X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fearly-c.lisp;h=1faa6f835a5de35c9c79f514585ebe04eff47a28;hb=77c80b85dc9ae9bde0692d4193187bfca507b936;hp=a98ec19e4fdbb2deda7448d92a9abec7e5bc79a7;hpb=f4f18b9dcdaf1948947b1747f5bfa766a1a0ee4c;p=sbcl.git diff --git a/src/compiler/early-c.lisp b/src/compiler/early-c.lisp index a98ec19..1faa6f8 100644 --- a/src/compiler/early-c.lisp +++ b/src/compiler/early-c.lisp @@ -16,16 +16,16 @@ (in-package "SB!C") ;;; ANSI limits on compilation -(defconstant sb!xc:call-arguments-limit most-positive-fixnum +(def!constant sb!xc:call-arguments-limit most-positive-fixnum #!+sb-doc "The exclusive upper bound on the number of arguments which may be passed to a function, including &REST args.") -(defconstant sb!xc:lambda-parameters-limit most-positive-fixnum +(def!constant sb!xc:lambda-parameters-limit most-positive-fixnum #!+sb-doc "The exclusive upper bound on the number of parameters which may be specifed in a given lambda list. This is actually the limit on required and &OPTIONAL parameters. With &KEY and &AUX you can get more.") -(defconstant sb!xc:multiple-values-limit most-positive-fixnum +(def!constant sb!xc:multiple-values-limit most-positive-fixnum #!+sb-doc "The exclusive upper bound on the number of multiple VALUES that you can return.") @@ -73,12 +73,12 @@ (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 @@ -115,6 +115,18 @@ (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*)))) ;;;; miscellaneous utilities @@ -125,7 +137,7 @@ 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) @@ -148,8 +160,24 @@ ;; (FOO 14))) ;; and then we happen to compile bar.lisp before foo.lisp. (when (looks-like-name-of-special-var-p symbol) - ;; FIXME: should be COMPILER-STYLE-WARNING? - (style-warn "using the lexical binding of the symbol ~S, not the~@ + ;; FIXME: should be COMPILER-STYLE-WARNING? + (style-warn "using the lexical binding of the symbol ~S, not the~@ dynamic binding, even though the symbol name follows the usual naming~@ convention (names like *FOO*) for special variables" symbol)) (values)) + +;;; shorthand for creating debug names from source names or other +;;; stems, e.g. +;;; (DEBUG-NAMIFY "FLET ~S" SOURCE-NAME) +;;; (DEBUG-NAMIFY "top level form ~S" FORM) +;;; +;;; FIXME: This function seems to have a lot in common with +;;; STRINGIFY-FORM, and perhaps there's some way to merge the two +;;; functions. +(defun debug-namify (format-string &rest format-arguments) + (with-standard-io-syntax + (let ((*print-readably* nil) + (*package* *cl-package*) + (*print-length* 3) + (*print-level* 2)) + (apply #'format nil format-string format-arguments))))