X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Flocall.lisp;h=e820d461ec980902921a1375d713c374089407c0;hb=c5d49a98212cf02fbfd0dd7f58a6177142c1c4a9;hp=aa84315a06280270f1c50bd64944f42e0ca50b84;hpb=a76ae2de6f6d81d3a774da2060844af08e705c95;p=sbcl.git diff --git a/src/compiler/locall.lisp b/src/compiler/locall.lisp index aa84315..e820d46 100644 --- a/src/compiler/locall.lisp +++ b/src/compiler/locall.lisp @@ -209,25 +209,29 @@ (declare (type functional fun)) (aver (null (functional-entry-fun fun))) (with-ir1-environment-from-node (lambda-bind (main-entry fun)) - (let ((res (ir1-convert-lambda (make-xep-lambda-expression fun) + (let ((xep (ir1-convert-lambda (make-xep-lambda-expression fun) :debug-name (debug-name 'xep (leaf-debug-name fun)) :system-lambda t))) - (setf (functional-kind res) :external - (leaf-ever-used res) t - (functional-entry-fun res) fun - (functional-entry-fun fun) res + (setf (functional-kind xep) :external + (leaf-ever-used xep) t + (functional-entry-fun xep) fun + (functional-entry-fun fun) xep (component-reanalyze *current-component*) t) (reoptimize-component *current-component* :maybe) - (etypecase fun - (clambda - (locall-analyze-fun-1 fun)) - (optional-dispatch - (dolist (ep (optional-dispatch-entry-points fun)) - (locall-analyze-fun-1 (force ep))) - (when (optional-dispatch-more-entry fun) - (locall-analyze-fun-1 (optional-dispatch-more-entry fun))))) - res))) + (locall-analyze-xep-entry-point fun) + xep))) + +(defun locall-analyze-xep-entry-point (fun) + (declare (type functional fun)) + (etypecase fun + (clambda + (locall-analyze-fun-1 fun)) + (optional-dispatch + (dolist (ep (optional-dispatch-entry-points fun)) + (locall-analyze-fun-1 (force ep))) + (when (optional-dispatch-more-entry fun) + (locall-analyze-fun-1 (optional-dispatch-more-entry fun)))))) ;;; Notice a REF that is not in a local-call context. If the REF is ;;; already to an XEP, then do nothing, otherwise change it to the