X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fir1-translators.lisp;h=add4fa1f25d0f39d6b4518ae85b4c9879f5c302b;hb=8e6b746f034c8632394c56a4aa43c38333335a2e;hp=cd10e15e0538cf7628264d4ebf85ebb350e3457a;hpb=3cb0f1859061e97b42bd332afc20aa4cff2a4685;p=sbcl.git diff --git a/src/compiler/ir1-translators.lisp b/src/compiler/ir1-translators.lisp index cd10e15..add4fa1 100644 --- a/src/compiler/ir1-translators.lisp +++ b/src/compiler/ir1-translators.lisp @@ -42,7 +42,10 @@ otherwise evaluate ELSE and return its values. ELSE defaults to NIL." ;; IR1-CONVERT-MAYBE-PREDICATE requires DEST to be CIF, so the ;; order of the following two forms is important (setf (lvar-dest pred-lvar) node) - (ir1-convert start pred-ctran pred-lvar test) + (multiple-value-bind (context count) (possible-rest-arg-context test) + (if context + (ir1-convert start pred-ctran pred-lvar `(%rest-true ,test ,context ,count)) + (ir1-convert start pred-ctran pred-lvar test))) (link-node-to-previous-ctran node pred-ctran) (let ((start-block (ctran-block pred-ctran))) @@ -601,7 +604,7 @@ be a lambda expression." (cond (cname `(global-function ,cname)) (give-up - (give-up-ir1-transform give-up)) + (give-up-ir1-transform "not known to be a function")) (t `(%coerce-callable-to-fun ,lvar-name)))))) @@ -644,8 +647,9 @@ be a lambda expression." (define-source-transform funcall (function &rest args) `(%funcall ,(ensure-source-fun-form function) ,@args)) -(deftransform %coerce-callable-to-fun ((thing) * *) - (ensure-lvar-fun-form thing 'thing "optimize away possible call to FDEFINITION at runtime")) +(deftransform %coerce-callable-to-fun ((thing) * * :node node) + "optimize away possible call to FDEFINITION at runtime" + (ensure-lvar-fun-form thing 'thing t)) (define-source-transform %coerce-callable-to-fun (thing) (ensure-source-fun-form thing t))