Update of /project/movitz/cvsroot/movitz In directory common-lisp.net:/tmp/cvs-serv18222
Modified Files: special-operators-cl.lisp Log Message: More about dynamic binding protocol: also call dynamic-variable-install at binding time.
Date: Thu Nov 11 11:48:22 2004 Author: ffjeld
Index: movitz/special-operators-cl.lisp diff -u movitz/special-operators-cl.lisp:1.29 movitz/special-operators-cl.lisp:1.30 --- movitz/special-operators-cl.lisp:1.29 Wed Nov 10 18:34:47 2004 +++ movitz/special-operators-cl.lisp Thu Nov 11 11:48:22 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.29 2004/11/10 17:34:47 ffjeld Exp $ +;;;; $Id: special-operators-cl.lisp,v 1.30 2004/11/11 10:48:22 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------
@@ -285,7 +285,9 @@ :init-with-type ,(type-specifier-primary type)))))))) (t init-code))) (when (plusp (num-specials local-env)) - `((:locally (:movl :esp (:edi (:edi-offset dynamic-env)))))) + `((:locally (:call (:edi ,(bt:slot-offset 'movitz-run-time-context + 'dynamic-variable-install)))) + (:locally (:movl :esp (:edi (:edi-offset dynamic-env)))))) (if (not recompile-body-p) body-code (progn #+ignore (warn "recompile..") ; XXX @@ -1106,11 +1108,14 @@ (:jmp ',loop) ,no-more-symbols (:popl :eax) ; remove extra pre-pushed tail + (:movl :ecx :edx) + (:locally (:call (:edi ,(bt:slot-offset 'movitz-run-time-context + 'dynamic-variable-install)))) (:locally (:movl :esp (:edi (:edi-offset dynamic-env)))) ; install env ;; ecx = N/fixnum ;; (:shll 4 :ecx) ; ecx = 16*N ;; (:leal (:esp :ecx -4) :eax) ; eax = esp + 16*N - 4 - (:pushl :ecx) ; Save number of bindings. + (:pushl :edx) ; Save number of bindings. #+ignore (:pushl :eax))) ; push address of first binding's tail body-code (when (eq body-returns :push)