X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fltn.lisp;h=80f112a648a104973f5a0b9124a1d15b79eaa253;hb=dcd86042bba514f5dfc39246de9cdbb030648569;hp=b707b767ba75ff98683a8d90d22b01330655c6a6;hpb=45bc305be4e269d2e1a477c8e0ae9a64df1ccd1c;p=sbcl.git diff --git a/src/compiler/ltn.lisp b/src/compiler/ltn.lisp index b707b76..80f112a 100644 --- a/src/compiler/ltn.lisp +++ b/src/compiler/ltn.lisp @@ -68,13 +68,14 @@ ;;; return the leaf, otherwise return NIL. (defun lvar-delayed-leaf (lvar) (declare (type lvar lvar)) - (let ((use (lvar-uses lvar))) - (and (ref-p use) - (let ((leaf (ref-leaf use))) - (etypecase leaf - (lambda-var (if (null (lambda-var-sets leaf)) leaf nil)) - (constant leaf) - ((or functional global-var) nil)))))) + (unless (lvar-dynamic-extent lvar) + (let ((use (lvar-uses lvar))) + (and (ref-p use) + (let ((leaf (ref-leaf use))) + (etypecase leaf + (lambda-var (if (null (lambda-var-sets leaf)) leaf nil)) + (constant leaf) + ((or functional global-var) nil))))))) ;;; Annotate a normal single-value lvar. If its only use is a ref that ;;; we are allowed to delay the evaluation of, then we mark the lvar