[movitz-cvs] CVS update: movitz/compiler.lisp
Frode Vatvedt Fjeld
ffjeld at common-lisp.net
Thu Jun 16 08:46:05 UTC 2005
Update of /project/movitz/cvsroot/movitz
In directory common-lisp.net:/tmp/cvs-serv3756
Modified Files:
compiler.lisp
Log Message:
Be more clever about when function-arguments can be re-ordered. We
were overly optimistic before, which could result in subtle bugs.
Date: Thu Jun 16 10:46:04 2005
Author: ffjeld
Index: movitz/compiler.lisp
diff -u movitz/compiler.lisp:1.145 movitz/compiler.lisp:1.146
--- movitz/compiler.lisp:1.145 Wed Jun 15 23:48:19 2005
+++ movitz/compiler.lisp Thu Jun 16 10:46:04 2005
@@ -8,7 +8,7 @@
;;;; Created at: Wed Oct 25 12:30:49 2000
;;;; Distribution: See the accompanying file COPYING.
;;;;
-;;;; $Id: compiler.lisp,v 1.145 2005/06/15 21:48:19 ffjeld Exp $
+;;;; $Id: compiler.lisp,v 1.146 2005/06/16 08:46:04 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -5549,10 +5549,10 @@
(setf arguments-self-evaluating-p nil)
(assert (eq :load-lexical (caar code)) ()
"comp-lex-var produced for ~S~% ~S" form code)
- (pushnew (second code) arguments-lexical-variables))
+ (pushnew (cadar code) arguments-lexical-variables))
(t (setf arguments-self-evaluating-p nil
arguments-are-load-lexicals-p nil)))
- code))))
+ code))))
(multiple-value-bind (code01 functionalp01 modifies01 all0 all1)
(make-compiled-two-forms-into-registers (first argument-forms) :eax
(second argument-forms) :ebx
@@ -5564,6 +5564,14 @@
(types (list* (type-specifier-primary (compiler-values-getf all0 :type))
(type-specifier-primary (compiler-values-getf all1 :type))
(nreverse arguments-types))))
+ #+ignore
+ (when (and (= 4 (length argument-forms))
+ (string= "WINDOW-TREE" (first argument-forms)))
+ (warn "final0: ~s, f1: ~S, typ: ~S, asep: ~S, aall: ~S"
+ final0 final1
+ types
+ arguments-self-evaluating-p
+ arguments-are-load-lexicals-p))
(cond
((or arguments-self-evaluating-p
(and (typep final0 'lexical-binding)
@@ -5592,9 +5600,9 @@
types
arguments-functional-p))
((and arguments-are-load-lexicals-p
- (not (operators-present-in-code-p code01
- '(:store-lexical)
- arguments-lexical-variables)))
+ (not (some (lambda (arg-binding)
+ (code-uses-binding-p code01 arg-binding :store t :load nil))
+ arguments-lexical-variables)))
(values (append arguments-code code01)
(+ -2 (length argument-forms))
nil
More information about the Movitz-cvs
mailing list