0.7.1.1:
[sbcl.git] / src / compiler / early-c.lisp
index 430918b..1e3f616 100644 (file)
   "The exclusive upper bound on the number of multiple VALUES that you can
   return.")
 
   "The exclusive upper bound on the number of multiple VALUES that you can
   return.")
 
-;;; FIXME: Shouldn't SB!C::&MORE be in this list?
 (defconstant-eqx sb!xc:lambda-list-keywords
 (defconstant-eqx sb!xc:lambda-list-keywords
-  '(&optional &rest &key &aux &body &whole &allow-other-keys &environment)
-  #!+sb-doc
+  '(&allow-other-keys
+    &aux
+    &body
+    &environment
+    &key
+    &more
+    &optional
+    &rest
+    &whole)
   #'equal
   #'equal
+  #!+sb-doc
   "symbols which are magical in a lambda list")
 \f
 ;;;; cross-compiler-only versions of CL special variables, so that we
   "symbols which are magical in a lambda list")
 \f
 ;;;; cross-compiler-only versions of CL special variables, so that we
 (defvar *lexenv*)
 (declaim (type lexenv *lexenv*))
 
 (defvar *lexenv*)
 (declaim (type lexenv *lexenv*))
 
-;;; *FREE-VARIABLES* translates from the names of variables referenced
-;;; globally to the LEAF structures for them. *FREE-FUNCTIONS* is like
-;;; *FREE-VARIABLES*, only it deals with function names.
-(defvar *free-variables*)
-(defvar *free-functions*)
-(declaim (type hash-table *free-variables* *free-functions*))
+;;; *FREE-VARS* translates from the names of variables referenced
+;;; globally to the LEAF structures for them. *FREE-FUNS* is like
+;;; *FREE-VARS*, only it deals with function names.
+(defvar *free-vars*)
+(defvar *free-funs*)
+(declaim (type hash-table *free-vars* *free-funs*))
 
 ;;; We use the same CONSTANT structure to represent all equal anonymous
 ;;; constants. This hashtable translates from constants to the LEAFs that
 
 ;;; We use the same CONSTANT structure to represent all equal anonymous
 ;;; constants. This hashtable translates from constants to the LEAFs that
 (defvar *trace-table*)
 (defvar *undefined-warnings*)
 (defvar *warnings-p*)
 (defvar *trace-table*)
 (defvar *undefined-warnings*)
 (defvar *warnings-p*)
+
+;;; unique ID for the next object created (to let us track object
+;;; identity even across GC, useful for understanding weird compiler
+;;; bugs where something is supposed to be unique but is instead
+;;; exists as duplicate objects)
+#!+sb-show
+(progn
+  (defvar *object-id-counter* 0)
+  (defun new-object-id ()
+    (prog1
+       *object-id-counter*
+      (incf *object-id-counter*))))
 \f
 ;;;; miscellaneous utilities
 
 \f
 ;;;; miscellaneous utilities
 
                note-name-defined))
 (defun note-name-defined (name kind)
   ;; We do this BOUNDP check because this function can be called when
                note-name-defined))
 (defun note-name-defined (name kind)
   ;; We do this BOUNDP check because this function can be called when
-  ;; not in a compilation unit (as when loading top-level forms).
+  ;; not in a compilation unit (as when loading top level forms).
   (when (boundp '*undefined-warnings*)
     (setq *undefined-warnings*
          (delete-if (lambda (x)
   (when (boundp '*undefined-warnings*)
     (setq *undefined-warnings*
          (delete-if (lambda (x)