[movitz-cvs] CVS update: movitz/special-operators-cl.lisp

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Mon Oct 11 13:48:08 UTC 2004


Update of /project/movitz/cvsroot/movitz
In directory common-lisp.net:/tmp/cvs-serv30369

Modified Files:
	special-operators-cl.lisp 
Log Message:
Make "lexical" unwind-protects work (for some definition of work..)

Date: Mon Oct 11 15:48:07 2004
Author: ffjeld

Index: movitz/special-operators-cl.lisp
diff -u movitz/special-operators-cl.lisp:1.26 movitz/special-operators-cl.lisp:1.27
--- movitz/special-operators-cl.lisp:1.26	Fri Oct  8 12:26:38 2004
+++ movitz/special-operators-cl.lisp	Mon Oct 11 15:48:07 2004
@@ -9,7 +9,7 @@
 ;;;; Created at:    Fri Nov 24 16:31:11 2000
 ;;;; Distribution:  See the accompanying file COPYING.
 ;;;;                
-;;;; $Id: special-operators-cl.lisp,v 1.26 2004/10/08 10:26:38 ffjeld Exp $
+;;;; $Id: special-operators-cl.lisp,v 1.27 2004/10/11 13:48:07 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -721,7 +721,9 @@
 	(movitz-env-get tag 'go-tag nil env)
       (assert (and label tagbody-env) ()
 	"Go-tag ~W is not visible." tag)
-      (if (eq funobj (movitz-environment-funobj tagbody-env))
+      (if (and (eq funobj (movitz-environment-funobj tagbody-env))
+	       ;; any unwind-protects between here and there?
+	       (null (nth-value 2 (stack-delta env tagbody-env))))
 	  (compiler-values ()
 	    :returns :non-local-exit
 	    :code `((:lexical-control-transfer nil :nothing ,env ,tagbody-env ,label)))
@@ -1210,6 +1212,7 @@
 				    (make-instance 'located-binding
 				      :name (gensym "up-next-continuation-step-"))))
 	   (unwind-protect-env (make-instance 'unwind-protect-env
+				 :cleanup-form (cons 'muerte.cl:progn cleanup-forms)
 				 :uplink continuation-env
 				 :funobj (movitz-environment-funobj env))))
       (with-labels (unwind-protect (cleanup-label cleanup-entry continue continue-label))





More information about the Movitz-cvs mailing list