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

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Sun Apr 24 22:08:40 UTC 2005


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

Modified Files:
	special-operators.lisp 
Log Message:
Fixed bug in inline-values: stack was not reset properly for >= 3 values.

Date: Mon Apr 25 00:08:39 2005
Author: ffjeld

Index: movitz/special-operators.lisp
diff -u movitz/special-operators.lisp:1.49 movitz/special-operators.lisp:1.50
--- movitz/special-operators.lisp:1.49	Thu Feb  3 10:18:51 2005
+++ movitz/special-operators.lisp	Mon Apr 25 00:08:39 2005
@@ -8,7 +8,7 @@
 ;;;; Author:        Frode Vatvedt Fjeld <frodef at acm.org>
 ;;;; Created at:    Fri Nov 24 16:22:59 2000
 ;;;;                
-;;;; $Id: special-operators.lisp,v 1.49 2005/02/03 09:18:51 ffjeld Exp $
+;;;; $Id: special-operators.lisp,v 1.50 2005/04/24 22:08:39 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -1115,9 +1115,12 @@
 	(t (multiple-value-bind (arguments-code stack-displacement arguments-modifies
 				 arguments-types arguments-functional-p)
 	       (make-compiled-argument-forms sub-forms (all :funobj) (all :env))
+	     (assert (not (minusp (- stack-displacement (- (length sub-forms) 2)))))
 	     (multiple-value-bind (stack-restore-code new-returns)
-		 (make-compiled-stack-restore stack-displacement result-mode :multiple-values)
-	       (declare (ignore stack-restore-code))
+		 (make-compiled-stack-restore (- stack-displacement
+						 (- (length sub-forms) 2))
+					      result-mode
+					      :multiple-values)
 	       (compiler-values ()
 		 :returns new-returns
 		 :type `(values , at arguments-types)
@@ -1127,16 +1130,14 @@
 			       (loop for i from (- (length sub-forms) 3) downto 0
 				   collecting
 				     `(:locally (:popl (:edi (:edi-offset values ,(* i 4))))))
-			       (make-immediate-move (length sub-forms) :ecx)
-			       `((:leal ((:ecx ,+movitz-fixnum-factor+) ,(* -2 +movitz-fixnum-factor+))
-					:edx)
-				 (:locally (:movl :edx (:edi (:edi-offset num-values))))
+			       (make-immediate-move (* +movitz-fixnum-factor+ (- (length sub-forms) 2))
+						    :ecx)
+			       `((:locally (:movl :ecx (:edi (:edi-offset num-values))))
 				 (:stc))
 			       #+ignore
 			       (make-compiled-funcall-by-symbol 'muerte.cl::values
 								(length sub-forms)
 								(all :funobj))
-			       #+ignore
 			       stack-restore-code)))))))))
 
 (define-special-operator muerte::compiler-typecase (&all all &form form)




More information about the Movitz-cvs mailing list