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

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Thu Nov 11 10:48:23 UTC 2004


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)





More information about the Movitz-cvs mailing list