0.8.11.7:
[sbcl.git] / src / compiler / generic / objdef.lisp
index 57a4831..5de4603 100644 (file)
 \f
 ;;;; symbols
 
-#!+x86
-(defknown symbol-hash (symbol) (integer 0 #.sb!xc:most-positive-fixnum)
-  (flushable movable))
-
 (define-primitive-object (symbol :lowtag other-pointer-lowtag
                                 :widetag symbol-header-widetag
-                                #!-x86 :alloc-trans #!-x86 make-symbol)
+                                :alloc-trans make-symbol)
 
   ;; Beware when changing this definition.  NIL-the-symbol is defined
   ;; using this layout, and NIL-the-end-of-list-marker is the cons 
   ;; (conses have no header).  Careful selection of lowtags ensures
   ;; that the same pointer can be used for both purposes:
   ;; OTHER-POINTER-LOWTAG is 7, LIST-POINTER-LOWTAG is 3, so if you
-  ;; subtract 3 from (sb-kernel:get-lisp-obj-address 'NIL) you get the
+  ;; subtract 3 from (SB-KERNEL:GET-LISP-OBJ-ADDRESS 'NIL) you get the
   ;; first data slot, and if you subtract 7 you get a symbol header.
 
-  (value :init :unbound)               ;also the CAR of NIL-as-end-of-list
-  (hash)                               ;the CDR of NIL-as-end-of-list
+  ;; also the CAR of NIL-as-end-of-list
+  (value :init :unbound)               
+  ;; 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)
 
   (plist :ref-trans symbol-plist
         :set-trans %set-symbol-plist