[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