0.6.12.3:
[sbcl.git] / src / compiler / locall.lisp
index 155afd1..c423a66 100644 (file)
           (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))))
 ;;; 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.
   (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
               (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)))
          (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))