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

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Tue Apr 13 13:28:26 UTC 2004


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

Modified Files:
	special-operators-cl.lisp 
Log Message:
Added the same change for undwind-protect as the other dynamic
control-transfer mechanisms: Use a jumper-table index rather than EIP
directly in the on-stack structure.

Date: Tue Apr 13 09:28:26 2004
Author: ffjeld

Index: movitz/special-operators-cl.lisp
diff -u movitz/special-operators-cl.lisp:1.15 movitz/special-operators-cl.lisp:1.16
--- movitz/special-operators-cl.lisp:1.15	Tue Apr 13 09:07:40 2004
+++ movitz/special-operators-cl.lisp	Tue Apr 13 09:28:26 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.15 2004/04/13 13:07:40 ffjeld Exp $
+;;;; $Id: special-operators-cl.lisp,v 1.16 2004/04/13 13:28:26 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -1168,7 +1168,7 @@
     (let ((up-env (make-instance 'unwind-protect-env
 		    :uplink env
 		    :funobj (movitz-environment-funobj env))))
-      (with-labels (unwind-protect (cleanup-entry-offset cleanup-entry))
+      (with-labels (unwind-protect (cleanup-label cleanup-entry))
 	(compiler-call #'compile-form
 	  :result-mode :multiple-values
 	  :forward all
@@ -1178,9 +1178,8 @@
 			 (do-case (t :multiple-values)
 			   ;; install up dynamic-env..
 			   (:locally (:pushl (:edi (:edi-offset dynamic-env))))
-			   (:call (:pc+ 0)) ; EIP
-			   ,cleanup-entry-offset
-			   (:addl '(:funcall - ',cleanup-entry ',cleanup-entry-offset) (:esp))
+			   (:declare-label-set ,cleanup-label (,cleanup-entry))
+			   (:pushl ',cleanup-label) ; jumper index
 			   (:globally (:pushl (:edi (:edi-offset unwind-protect-tag)))) ; tag
 			   (:pushl :ebp) ; stack-frame
 			   (:locally (:movl :esp (:edi (:edi-offset dynamic-env)))))) ; install up-env
@@ -1196,7 +1195,7 @@
 		       ;; execute cleanup-forms
 		       (:call '(:sub-program (,cleanup-entry) ; label
 				,@(compiler-call #'compile-form
-				    :with-stack-used t
+				    :with-stack-used t ; stack distance is _really_ unknown!
 				    :defaults all
 				    :result-mode :ignore
 				    :form `(muerte.cl::progn , at cleanup-forms))





More information about the Movitz-cvs mailing list