X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fir1-translators.lisp;h=affa00fc8c45945bda762ce881eb79ffe480081c;hb=8a632c14b592472873cfb214239c9387bc1a1ced;hp=a6cfd9611ac37735a4b83a99ad52455538e0442f;hpb=49e92ee57b3b01f5862d0c6fa65f521de1688941;p=sbcl.git diff --git a/src/compiler/ir1-translators.lisp b/src/compiler/ir1-translators.lisp index a6cfd96..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))))) @@ -478,7 +478,7 @@ Return VALUE without evaluating it." (second thing)) ((lambda instance-lambda) `(lambda ,(second thing))) - ((lambda-with-lexenv)' + ((lambda-with-lexenv) `(lambda ,(fifth thing))))) (defun fun-name-leaf (thing) @@ -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)) @@ -1051,6 +1056,7 @@ due to normal completion or a non-local exit such as THROW)." (%unwind-protect (%escape-fun ,exit-tag) (%cleanup-fun ,cleanup-fun)) (return-from ,drop-thru-tag ,protected))) + (declare (optimize (insert-debug-catch 0))) (,cleanup-fun) (%continue-unwind ,next ,start ,count)))))))