X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Flocall.lisp;h=093ddd0fb759329c7cee802434bcaf825559f83a;hb=0dcc957ae6bf24809fda82fd59c134e70058c42a;hp=155afd19a18bfc4d49860f8779d02708870d1c50;hpb=de201aeb12169d0bd377eca4da6116c2797a66ad;p=sbcl.git diff --git a/src/compiler/locall.lisp b/src/compiler/locall.lisp index 155afd1..093ddd0 100644 --- a/src/compiler/locall.lisp +++ b/src/compiler/locall.lisp @@ -130,7 +130,7 @@ (temps (make-gensym-list (length (lambda-vars fun))))) `(lambda (,n-supplied ,@temps) (declare (type index ,n-supplied)) - ,(if (policy nil (zerop safety)) + ,(if (policy *lexenv* (zerop safety)) `(declare (ignore ,n-supplied)) `(%verify-argument-count ,n-supplied ,nargs)) (%funcall ,fun ,@temps)))) @@ -168,8 +168,7 @@ ;;; then associate this lambda with FUN as its XEP. After the ;;; conversion, we iterate over the function's associated lambdas, ;;; redoing local call analysis so that the XEP calls will get -;;; converted. We also bind *LEXENV* to change the compilation policy -;;; over to the interface policy. +;;; converted. ;;; ;;; We set REANALYZE and REOPTIMIZE in the component, just in case we ;;; discover an XEP after the initial local call analyze pass. @@ -177,14 +176,13 @@ (declare (type functional fun)) (aver (not (functional-entry-function fun))) (with-ir1-environment (lambda-bind (main-entry fun)) - (let* ((*lexenv* (make-lexenv :policy (make-interface-policy *lexenv*))) - (res (ir1-convert-lambda (make-xep-lambda fun)))) - (setf (functional-kind res) :external) - (setf (leaf-ever-used res) t) - (setf (functional-entry-function res) fun) - (setf (functional-entry-function fun) res) - (setf (component-reanalyze *current-component*) t) - (setf (component-reoptimize *current-component*) t) + (let ((res (ir1-convert-lambda (make-xep-lambda fun)))) + (setf (functional-kind res) :external + (leaf-ever-used res) t + (functional-entry-function res) fun + (functional-entry-function fun) res + (component-reanalyze *current-component*) t + (component-reoptimize *current-component*) t) (etypecase fun (clambda (local-call-analyze-1 fun)) (optional-dispatch @@ -288,7 +286,6 @@ (if (and (policy call (and (>= speed space) (>= speed compilation-speed))) (not (eq (functional-kind (node-home-lambda call)) :external)) - (not *converting-for-interpreter*) (inline-expansion-ok call)) (with-ir1-environment call (let* ((*lexenv* (functional-lexenv fun)) @@ -875,7 +872,8 @@ (not (functional-entry-function fun))) (let* ((ref-cont (node-cont (first refs))) (dest (continuation-dest ref-cont))) - (when (and (basic-combination-p dest) + (when (and dest + (basic-combination-p dest) (eq (basic-combination-fun dest) ref-cont) (eq (basic-combination-kind dest) :local) (not (block-delete-p (node-block dest))) @@ -966,7 +964,9 @@ (call-fun nil)) (when (and (dolist (ref (leaf-refs fun) t) (let ((dest (continuation-dest (node-cont ref)))) - (when (block-delete-p (node-block dest)) (return nil)) + (when (or (not dest) + (block-delete-p (node-block dest))) + (return nil)) (let ((home (node-home-lambda ref))) (unless (eq home fun) (when call-fun (return nil))