[movitz-cvs] CVS movitz

ffjeld ffjeld at common-lisp.net
Wed Apr 11 22:09:39 UTC 2007


Update of /project/movitz/cvsroot/movitz
In directory clnet:/tmp/cvs-serv7978

Modified Files:
	special-operators-cl.lisp 
Log Message:
Fix unwind-protect compiler: do dynamic-unwind-next _after_ the
cleanup-forms have executed (ticket #6).


--- /project/movitz/cvsroot/movitz/special-operators-cl.lisp	2007/04/02 20:54:34	1.52
+++ /project/movitz/cvsroot/movitz/special-operators-cl.lisp	2007/04/11 22:09:39	1.53
@@ -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.52 2007/04/02 20:54:34 ffjeld Exp $
+;;;; $Id: special-operators-cl.lisp,v 1.53 2007/04/11 22:09:39 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -1338,12 +1338,15 @@
 		     :form `(muerte::with-cloak (:multiple-values)
 			      ;; Inside here we don't have to mind current-values.
 			      (muerte::with-inline-assembly (:returns :nothing)
-				;; First, find next-continuation-step..
-				(:locally (:movl (:edi (:edi-offset raw-scratch0)) :eax)) ; final-cont..
+				;; First, save final-continuation across cleanup-forms.
+				(:locally (:pushl (:edi (:edi-offset raw-scratch0)))))
+                              , at cleanup-forms
+			      (muerte::with-inline-assembly (:returns :nothing)
+				;; Now, find next-continuation-step..
+                                (:popl :eax) ; final-continuation
 				(:locally (:call (:edi (:edi-offset dynamic-unwind-next))))
 				(:locally (:bound (:edi (:edi-offset stack-bottom)) :eax))
-				(:store-lexical ,next-continuation-step-binding :eax :type t))
-			      , at cleanup-forms))
+				(:store-lexical ,next-continuation-step-binding :eax :type t))))
 		   `((:locally (:popl (:edi (:edi-offset raw-scratch0)))) ; pop final continuation
 		     (:load-lexical ,next-continuation-step-binding :edx)
 		     (:locally (:movl :edx (:edi (:edi-offset dynamic-env))))




More information about the Movitz-cvs mailing list