X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Flocall.lisp;h=97372d3b18e9bf39601112402026b3cdd267dd5f;hb=e536da6bd0f0b6db16863f5e031a05e6797fc2a9;hp=2df985b99d4c1fd1b675296182ba6c8592cb2ff2;hpb=373df66df093e8c1771069dcc30c2ec32598af6a;p=sbcl.git diff --git a/src/compiler/locall.lisp b/src/compiler/locall.lisp index 2df985b..97372d3 100644 --- a/src/compiler/locall.lisp +++ b/src/compiler/locall.lisp @@ -712,7 +712,8 @@ (convert-hairy-fun-entry ref call (optional-dispatch-main-entry fun) (append temps more-temps) (ignores) (call-args) - more-temps)))) + (when (optional-rest-p fun) + more-temps))))) (values)) @@ -1028,7 +1029,13 @@ ;; with anonymous things, and suppressing inlining ;; for such things can easily give Python acute indigestion, so ;; we don't.) - (when (leaf-has-source-name-p clambda) + ;; + ;; A functional that is already inline-expanded in this componsne definitely + ;; deserves let-conversion -- and in case of main entry points for inline + ;; expanded optional dispatch, the main-etry isn't explicitly marked :INLINE + ;; even if the function really is. + (when (and (leaf-has-source-name-p clambda) + (not (functional-inline-expanded clambda))) ;; ANSI requires that explicit NOTINLINE be respected. (or (eq (lambda-inlinep clambda) :notinline) ;; If (= LET-CONVERSION 0) we can guess that inlining