Update of /project/movitz/cvsroot/movitz In directory common-lisp.net:/tmp/cvs-serv1776
Modified Files: special-operators.lisp Log Message: Fixing dynamic control transfers, primarily to handle the stack-allocated funobjs, but there seems to be a number of (other) bugs here too. It's not quite working yet, though.
Date: Tue Jan 4 17:54:11 2005 Author: ffjeld
Index: movitz/special-operators.lisp diff -u movitz/special-operators.lisp:1.47 movitz/special-operators.lisp:1.48 --- movitz/special-operators.lisp:1.47 Tue Jan 4 12:35:48 2005 +++ movitz/special-operators.lisp Tue Jan 4 17:54:10 2005 @@ -8,7 +8,7 @@ ;;;; Author: Frode Vatvedt Fjeld frodef@acm.org ;;;; Created at: Fri Nov 24 16:22:59 2000 ;;;; -;;;; $Id: special-operators.lisp,v 1.47 2005/01/04 11:35:48 ffjeld Exp $ +;;;; $Id: special-operators.lisp,v 1.48 2005/01/04 16:54:10 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------
@@ -1210,15 +1210,17 @@ `((:load-lexical ,dynamic-slot-binding :edx) (:locally (:movl :edx (:edi (:edi-offset raw-scratch0)))) ; final continuation (:load-lexical ,next-continuation-step-binding :edx) ; next continuation-step - (:locally (:movl :esi (:edi (:edi-offset scratch1)))) - (:locally (:movl :edx (:edi (:edi-offset dynamic-env)))) ; exit dynamic-env - (:movl :edx :esp) ; enter non-local jump stack mode. - - (:movl (:esp) :edx) ; target stack-frame EBP - (:movl (:edx -4) :esi) ; get target funobj into ESI - - (:movl (:esp 8) :edx) ; target jumper number - (:jmp (:esi :edx ,(slot-offset 'movitz-funobj 'constant0))))))))) + (:locally (:call (:edi (:edi-offset dynamic-jump-next)))))))))) + +;;; (:locally (:movl :esi (:edi (:edi-offset scratch1)))) + + +;;; (:locally (:movl :edx (:edi (:edi-offset dynamic-env)))) ; exit dynamic-env +;;; (:movl :edx :esp) ; enter non-local jump stack mode. +;;; (:movl (:esp) :edx) ; target stack-frame EBP +;;; (:movl (:edx -4) :esi) ; get target funobj into ESI +;;; (:movl (:esp 8) :edx) ; target jumper number +;;; (:jmp (:esi :edx ,(slot-offset 'movitz-funobj 'constant0)))))))))
(define-special-operator muerte::with-basic-restart (&all defaults &form form &env env) @@ -1297,10 +1299,10 @@ :form body) `((:leal (:esp ,(+ -12 -4 (* 4 entry-size))) :esp) ,exit-point + (:movl (:esp) :ebp) (:movl (:esp 12) :edx) (:locally (:movl :edx (:edi (:edi-offset dynamic-env)))) - (:popl :ebp) - (:leal (:esp 12) :esp) + (:leal (:esp 16) :esp) )))))))