X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fdefboot.lisp;h=4f5ff75d61b3ca86003a7ce93057689356458ec6;hb=d76c81b0ca4dcfc99f0cd805f5c20493fa80b2b6;hp=383c9f31f95e8adf72fddb063acf85c94a39f1bf;hpb=c7410461f77fe65c2913b17d2936c4f6dea2c016;p=sbcl.git diff --git a/src/code/defboot.lisp b/src/code/defboot.lisp index 383c9f3..4f5ff75 100644 --- a/src/code/defboot.lisp +++ b/src/code/defboot.lisp @@ -164,29 +164,15 @@ #-sb-xc-host (named-lambda `(named-lambda ,name ,@lambda-guts)) (inline-lambda - (cond (;; Does the user not even want to inline? - (not (inline-fun-name-p name)) - nil) - (;; Does inlining look too hairy to handle? - (not (sb!c:lambda-independent-of-lexenv-p lambda env)) - (sb!c:maybe-compiler-note - "lexical environment too hairy, can't inline DEFUN ~S" - name) - nil) - (t - ;; FIXME: The only reason that we return - ;; LAMBDA-WITH-LEXENV instead of returning bare - ;; LAMBDA is to avoid modifying downstream code - ;; which expects LAMBDA-WITH-LEXENV. But the code - ;; here is the only code which feeds into the - ;; downstream code, and the generality of the - ;; interface is no longer used, so it'd make sense - ;; to simplify the interface instead of using the - ;; old general LAMBDA-WITH-LEXENV interface in this - ;; simplified way. - `(sb!c:lambda-with-lexenv - nil nil nil ; i.e. no DECLS, no MACROS, no SYMMACS - ,@lambda-guts))))) + (when (inline-fun-name-p name) + ;; we want to attempt to inline, so complain if we can't + (or (sb!c:maybe-inline-syntactic-closure lambda env) + (progn + (#+sb-xc-host warn + #-sb-xc-host sb!c:maybe-compiler-note + "lexical environment too hairy, can't inline DEFUN ~S" + name) + nil))))) `(progn ;; In cross-compilation of toplevel DEFUNs, we arrange @@ -227,10 +213,7 @@ #+nil (setf (%fun-name def) name) (when doc - ;; FIXME: This should use shared SETF-name-parsing logic. - (if (and (consp name) (eq (first name) 'setf)) - (setf (fdocumentation (second name) 'setf) doc) - (setf (fdocumentation (the symbol name) 'function) doc))) + (setf (fdocumentation name 'function) doc)) name) ;;;; DEFVAR and DEFPARAMETER @@ -245,7 +228,7 @@ (declaim (special ,var)) ,@(when valp `((unless (boundp ',var) - (setq ,var ,val)))) + (set ',var ,val)))) ,@(when docp `((setf (fdocumentation ',var 'variable) ',doc ))) ',var)) @@ -259,7 +242,7 @@ string for the parameter." `(progn (declaim (special ,var)) - (setq ,var ,val) + (set ',var ,val) ,@(when docp `((setf (fdocumentation ',var 'variable) ',doc))) ',var)) @@ -360,3 +343,40 @@ (defmacro-mundanely lambda (&whole whole args &body body) (declare (ignore args body)) `#',whole) + +(defmacro-mundanely named-lambda (&whole whole name args &body body) + (declare (ignore name args body)) + `#',whole) + +(defmacro-mundanely lambda-with-lexenv (&whole whole + declarations macros symbol-macros + &body body) + (declare (ignore declarations macros symbol-macros body)) + `#',whole) + +;;; this eliminates a whole bundle of unknown function STYLE-WARNINGs +;;; when cross-compiling. It's not critical for behaviour, but is +;;; aesthetically pleasing, except inasmuch as there's this list of +;;; magic functions here. -- CSR, 2003-04-01 +#+sb-xc-host +(sb!xc:proclaim '(ftype (function * *) + ;; functions appearing in fundamental defining + ;; macro expansions: + %compiler-deftype + %defun + %defsetf + sb!c:%compiler-defun + sb!c::%define-symbol-macro + sb!c::%defconstant + sb!c::%define-compiler-macro + sb!c::%defmacro + sb!kernel::%compiler-defstruct + sb!kernel::%compiler-define-condition + sb!kernel::%defstruct + sb!kernel::%define-condition + ;; miscellaneous functions commonly appearing + ;; as a result of macro expansions or compiler + ;; transformations: + sb!int:find-undeleted-package-or-lose ; IN-PACKAGE + sb!kernel::arg-count-error ; PARSE-DEFMACRO + ))