1.0.29.44: Complex float improvements
[sbcl.git] / src / compiler / generic / objdef.lisp
index 6e9d5d4..d768bca 100644 (file)
@@ -14,9 +14,6 @@
 ;;;; KLUDGE: The primitive objects here may look like self-contained
 ;;;; definitions, but in general they're not. In particular, if you
 ;;;; try to add a slot to them, beware of the following:
-;;;;   * (mysterious crashes which occur after changing the length
-;;;;     of SIMPLE-FUN, just adding a new slot not even doing anything
-;;;;     with it, still dunno why)
 ;;;;   * The GC scavenging code (and for all I know other GC code too)
 ;;;;     is not automatically generated from these layouts, but instead
 ;;;;     was hand-written to correspond to them. The offsets are
         :ref-trans %simple-fun-type
         :set-known (unsafe)
         :set-trans (setf %simple-fun-type))
-  (xrefs :init :null
-         :ref-trans %simple-fun-xrefs
-         :ref-known (flushable)
-         :set-trans (setf %simple-fun-xrefs)
-         :set-known ())
+  ;; NIL for empty, STRING for a docstring, SIMPLE-VECTOR for XREFS, and (CONS
+  ;; STRING SIMPLE-VECTOR) for both.
+  (info :init :null
+        :ref-trans %simple-fun-info
+        :ref-known (flushable)
+        :set-trans (setf %simple-fun-info)
+        :set-known (unsafe))
   ;; the SB!C::DEBUG-FUN object corresponding to this object, or NIL for none
   #+nil ; FIXME: doesn't work (gotcha, lowly maintenoid!) See notes on bug 137.
   (debug-fun :ref-known (flushable)
   ;; first data slot, and if you subtract 7 you get a symbol header.
 
   ;; also the CAR of NIL-as-end-of-list
-  (value :init :unbound :ref-known (flushable) :ref-trans symbol-global-value)
+  (value :init :unbound
+         :set-trans %set-symbol-global-value
+         :set-known (unsafe))
   ;; also the CDR of NIL-as-end-of-list.  Its reffer needs special
   ;; care for this reason, as hash values must be fixnums.
   (hash :set-trans %set-symbol-hash)
 (define-primitive-object (complex-single-float
                           :lowtag other-pointer-lowtag
                           :widetag complex-single-float-widetag)
+  #!+x86-64
+  (data :c-type "struct { float data[2]; } ")
+  #!-x86-64
   (real :c-type "float")
+  #!-x86-64
   (imag :c-type "float"))
 
 (define-primitive-object (complex-double-float
                           :lowtag other-pointer-lowtag
                           :widetag complex-double-float-widetag)
-  #!-x86-64 (filler)
+  (filler)
   (real :c-type "double" :length #!-x86-64 2 #!+x86-64 1)
   (imag :c-type "double" :length #!-x86-64 2 #!+x86-64 1))
 
   (binding-stack-pointer :c-type "lispobj *" :length #!+alpha 2 #!-alpha 1)
   (control-stack-start :c-type "lispobj *" :length #!+alpha 2 #!-alpha 1)
   (control-stack-end :c-type "lispobj *" :length #!+alpha 2 #!-alpha 1)
+  (control-stack-guard-page-protected)
   (alien-stack-start :c-type "lispobj *" :length #!+alpha 2 #!-alpha 1)
   (alien-stack-pointer :c-type "lispobj *" :length #!+alpha 2 #!-alpha 1)
   #!+gencgc (alloc-region :c-type "struct alloc_region" :length 5)