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

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Mon Nov 15 23:10:25 UTC 2004


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

Modified Files:
	special-operators-cl.lisp 
Log Message:
Change the compilation of unwind-protect to only use a single
dynamic-env entry.

Date: Tue Nov 16 00:10:24 2004
Author: ffjeld

Index: movitz/special-operators-cl.lisp
diff -u movitz/special-operators-cl.lisp:1.34 movitz/special-operators-cl.lisp:1.35
--- movitz/special-operators-cl.lisp:1.34	Sat Nov 13 15:49:51 2004
+++ movitz/special-operators-cl.lisp	Tue Nov 16 00:10:24 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.34 2004/11/13 14:49:51 ffjeld Exp $
+;;;; $Id: special-operators-cl.lisp,v 1.35 2004/11/15 23:10:24 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -1235,15 +1235,9 @@
 	  :returns :multiple-values
 	  :code (append
 		 ;; install default continuation dynamic-env..
-		 `((:locally (:pushl (:edi (:edi-offset dynamic-env)))) ; uplink
-		   (:declare-label-set ,continue-label (,continue))
-		   (:pushl ',continue-label)
-		   (:locally (:pushl (:edi (:edi-offset unbound-value))))
-		   (:pushl :ebp)
-		   (:locally (:movl :esp (:edi (:edi-offset dynamic-env)))))
-		 ;; install unwind-protect dynamic-env..
 		 `((:locally (:pushl (:edi (:edi-offset dynamic-env))))
 		   (:declare-label-set ,cleanup-label (,cleanup-entry))
+		   (:declare-label-set ,continue-label (,continue))
 		   (:pushl ',cleanup-label) ; jumper index
 		   (:globally (:pushl (:edi (:edi-offset unwind-protect-tag)))) ; tag
 		   (:pushl :ebp)	; stack-frame
@@ -1256,13 +1250,14 @@
 		   :result-mode :multiple-values
 		   :form protected-form)
 		 ;; From now on, take care not to touch current-values from protected-form.
-		 `((:leal (:esp 16) :edx) ; default final continuation
-		   (:locally (:movl :edx (:edi (:edi-offset raw-scratch0))))
+		 `((:locally (:movl :esp (:edi (:edi-offset raw-scratch0))))
 		   ,cleanup-entry
-		   (:movl (:esp 12) :edx) ; pop out of unwind-protect
-		   (:locally (:movl :edx (:edi (:edi-offset dynamic-env))))
-		   (:popl :ebp)
-		   (:leal (:esp 12) :esp)
+
+		   ;; Modify unwind-protect dyn-env-entry to be normal continuation
+		   (:locally (:movl (:edi (:edi-offset unbound-value)) :edx))
+		   (:movl :edx (:esp 4)) ; not unwind-protect-tag
+		   (:movl ',continue-label (:esp 8)) ; new jumper index
+		   
 		   (:locally (:pushl (:edi (:edi-offset raw-scratch0))))) ; push final-continuation
 		 ;; Execute cleanup-forms.
 		 (compiler-call #'compile-form-unprotected
@@ -1295,7 +1290,6 @@
 		   (:locally (:movl :edx (:edi (:edi-offset dynamic-env))))
 		   (:popl :ebp)
 		   (:leal (:esp 12) :esp))))))))
-
 
 (define-special-operator if (&all all &form form &env env &result-mode result-mode)
   (destructuring-bind (test-form then-form &optional else-form)





More information about the Movitz-cvs mailing list