X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fir2tran.lisp;h=c28e37ed0ce7fa887ad25b777fc47cbe4a44f043;hb=8c12bc813114d4bbfa9c05e450e013167ad6cca3;hp=db050bc394ed0fe77123a64caf3e683acb36bfb1;hpb=abf95924deb0b9677a160c02632749d80a3c24f8;p=sbcl.git diff --git a/src/compiler/ir2tran.lisp b/src/compiler/ir2tran.lisp index db050bc..c28e37e 100644 --- a/src/compiler/ir2tran.lisp +++ b/src/compiler/ir2tran.lisp @@ -52,12 +52,13 @@ (emit-move-template node block (type-check-template type) value result) (values)) -;;; Allocate an indirect value cell. Maybe do some clever stack -;;; allocation someday. +;;; Allocate an indirect value cell. (defevent make-value-cell-event "Allocate heap value cell for lexical var.") (defun emit-make-value-cell (node block value res) (event make-value-cell-event node) - (vop make-value-cell node block value res)) + (let ((leaf (tn-leaf res))) + (vop make-value-cell node block value (and leaf (leaf-dynamic-extent leaf)) + res))) ;;;; leaf reference @@ -1180,8 +1181,9 @@ (ir2-physenv-return-pc env)) #!+unwind-to-frame-and-call-vop - (when (and (policy fun (>= insert-debug-catch 2)) - (lambda-return fun)) + (when (and (lambda-allow-instrumenting fun) + (lambda-return fun) + (policy fun (>= insert-debug-catch 2))) (vop sb!vm::bind-sentinel node block)) (let ((lab (gen-label))) @@ -1210,7 +1212,8 @@ (return-pc (ir2-physenv-return-pc env)) (returns (tail-set-info (lambda-tail-set fun)))) #!+unwind-to-frame-and-call-vop - (when (policy fun (>= insert-debug-catch 2)) + (when (and (lambda-allow-instrumenting fun) + (policy fun (>= insert-debug-catch 2))) (vop sb!vm::unbind-sentinel node block)) (cond ((and (eq (return-info-kind returns) :fixed)