[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