X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fir1-translators.lisp;h=affa00fc8c45945bda762ce881eb79ffe480081c;hb=47b7637b3e7c012c6dfa754e107c9bc7d74e73bd;hp=83b4ab49b63c2d0e17b4a602b820cefc2eef092b;hpb=a40acb7f6d4b6beb4251c77bc00f73967dcddc77;p=sbcl.git diff --git a/src/compiler/ir1-translators.lisp b/src/compiler/ir1-translators.lisp index 83b4ab4..affa00f 100644 --- a/src/compiler/ir1-translators.lisp +++ b/src/compiler/ir1-translators.lisp @@ -74,7 +74,7 @@ otherwise evaluate ELSE and return its values. ELSE defaults to NIL." (if (policy *lexenv* (= store-coverage-data 0)) nil (labels ((sub (form) - (or (gethash form *source-paths*) + (or (get-source-path form) (and (consp form) (some #'sub form))))) (or (sub form))))) @@ -575,7 +575,7 @@ be a lambda expression." ;;; directly to %FUNCALL, instead of waiting around for type ;;; inference. (define-source-transform funcall (function &rest args) - (if (and (consp function) (eq (car function) 'function)) + (if (and (consp function) (member (car function) '(function lambda))) `(%funcall ,function ,@args) (let ((name (constant-global-fun-name function))) (if name @@ -585,6 +585,11 @@ be a lambda expression." (deftransform %coerce-callable-to-fun ((thing) (function) *) "optimize away possible call to FDEFINITION at runtime" 'thing) + +(define-source-transform %coerce-callable-to-fun (thing) + (if (and (consp thing) (member (car thing) '(function lambda))) + thing + (values nil t))) ;;;; LET and LET* ;;;; @@ -700,7 +705,7 @@ form to reference any of the previous VARS." #!+sb-doc "LOCALLY declaration* form* -Sequentially evaluate the FORMS in a lexical environment where the the +Sequentially evaluate the FORMS in a lexical environment where the DECLARATIONS have effect. If LOCALLY is a top level form, then the FORMS are also processed as top level forms." (ir1-translate-locally body start next result))