X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Flocall.lisp;h=f8211b797dd77d2cacd3dea719cf08f4bf07e3af;hb=94ea2b2082deaa0331dfb66fa6af6ca12dd8dc83;hp=f1c7feb1c1f06f924fa42847442ca8ba76fb569f;hpb=ea12c1295d511ba5242f3ce64c44e1e445f72cc8;p=sbcl.git diff --git a/src/compiler/locall.lisp b/src/compiler/locall.lisp index f1c7feb..f8211b7 100644 --- a/src/compiler/locall.lisp +++ b/src/compiler/locall.lisp @@ -226,9 +226,8 @@ (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) - :debug-name (debug-namify - "XEP for " - (leaf-debug-name fun))))) + :debug-name (debug-name + 'xep (leaf-debug-name fun))))) (setf (functional-kind res) :external (leaf-ever-used res) t (functional-entry-fun res) fun @@ -378,23 +377,28 @@ (inline-expansion-ok call)) (let* ((end (component-last-block (node-component call))) (pred (block-prev end))) - (multiple-value-bind (losing-local-functional converted-lambda) + (multiple-value-bind (losing-local-object converted-lambda) (catch 'locall-already-let-converted (with-ir1-environment-from-node call (let ((*lexenv* (functional-lexenv original-functional))) (values nil (ir1-convert-lambda (functional-inline-expansion original-functional) - :debug-name (debug-namify - "local inline " - (leaf-debug-name - original-functional))))))) - (cond (losing-local-functional - (let ((*compiler-error-context* call)) - (compiler-notify "couldn't inline expand because expansion ~ - calls this LET-converted local function:~ - ~% ~S" - (leaf-debug-name losing-local-functional))) + :debug-name (debug-name 'local-inline + (leaf-debug-name + original-functional))))))) + (cond (losing-local-object + (if (functional-p losing-local-object) + (let ((*compiler-error-context* call)) + (compiler-notify "couldn't inline expand because expansion ~ + calls this LET-converted local function:~ + ~% ~S" + (leaf-debug-name losing-local-object))) + (let ((*compiler-error-context* call)) + (compiler-notify "implementation limitation: couldn't inline ~ + expand because expansion refers to ~ + the optimized away object ~S." + losing-local-object))) (loop for block = (block-next pred) then (block-next block) until (eq block end) do (setf (block-delete-p block) t)) @@ -573,9 +577,9 @@ `(lambda ,vars (declare (ignorable ,@ignores)) (%funcall ,entry ,@args)) - :debug-name (debug-namify "hairy function entry " - (lvar-fun-name - (basic-combination-fun call))))))) + :debug-name (debug-name 'hairy-function-entry + (lvar-fun-name + (basic-combination-fun call))))))) (convert-call ref call new-fun) (dolist (ref (leaf-refs entry)) (convert-call-if-possible ref (lvar-dest (node-lvar ref)))))) @@ -644,7 +648,6 @@ (let ((name (lvar-value lvar)) (dummy (first temp)) (val (second temp))) - ;; FIXME: check whether KEY was supplied earlier (when (and (eq name :allow-other-keys) (not allow-found)) (let ((val (second key))) (cond ((constant-lvar-p val) @@ -661,9 +664,11 @@ (setq loser (list name))))) (let ((info (lambda-var-arg-info var))) (when (eq (arg-info-key info) name) - (ignores dummy) - (supplied (cons var val)) - (return))))))) + (ignores dummy) + (if (member var (supplied) :key #'car) + (ignores val) + (supplied (cons var val))) + (return))))))) (when (and loser (not (optional-dispatch-allowp fun)) (not allowp)) (compiler-warn "function called with unknown argument keyword ~S"