(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
(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))
(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))