diff --git a/compiler/ir1tran.lisp b/compiler/ir1tran.lisp index e440cbd7c45ed7f2f5c66c60912b86596c60b906..ba0477cd144bd8b0a68c5ea5c7b73f0ea0a8575f 100644 --- a/compiler/ir1tran.lisp +++ b/compiler/ir1tran.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman or slisp-group@cs.cmu.edu. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir1tran.lisp,v 1.62 1991/12/14 18:15:19 wlott Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir1tran.lisp,v 1.63 1991/12/19 22:10:44 ram Exp $") ;;; ;;; ********************************************************************** ;;; @@ -1044,12 +1044,14 @@ (continuation-starts-block cont) (let ((cleanup (make-cleanup :kind :special-bind)) (var (first svars)) - (next-cont (make-continuation))) + (next-cont (make-continuation)) + (nnext-cont (make-continuation))) (ir1-convert start next-cont `(%special-bind ',(lambda-var-specvar var) ,var)) (setf (cleanup-mess-up cleanup) (continuation-use next-cont)) (let ((*lexical-environment* (make-lexenv :cleanup cleanup))) - (ir1-convert-special-bindings next-cont cont body aux-vars aux-vals + (ir1-convert next-cont nnext-cont '(%cleanup-point)) + (ir1-convert-special-bindings nnext-cont cont body aux-vars aux-vals (rest svars))))))) @@ -2970,14 +2972,16 @@ ;;; one. ;;; (def-ir1-translator %within-cleanup ((kind mess-up &body body) start cont) - (let ((dummy (make-continuation))) + (let ((dummy (make-continuation)) + (dummy2 (make-continuation))) (ir1-convert start dummy mess-up) (let* ((mess-node (continuation-use dummy)) (cleanup (make-cleanup :kind kind :mess-up mess-node)) (old-cup (lexenv-cleanup *lexical-environment*)) (*lexical-environment* (make-lexenv :cleanup cleanup))) (setf (entry-cleanup (cleanup-mess-up old-cup)) cleanup) - (ir1-convert-progn-body dummy cont body)))) + (ir1-convert dummy dummy2 '(%cleanup-point)) + (ir1-convert-progn-body dummy2 cont body)))) ;;; This is a special special form that makes an "escape function" which