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@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 ,@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)