|
|
CVS: sbcl/src/compiler debug.lisp,1.32,1.33 locall.lisp,1.56,1.57: msg#00167
|
Subject: |
CVS: sbcl/src/compiler debug.lisp,1.32,1.33 locall.lisp,1.56,1.57 |
Update of /cvsroot/sbcl/sbcl/src/compiler
In directory sc8-pr-cvs1:/tmp/cvs-serv5563/src/compiler
Modified Files:
debug.lisp locall.lisp
Log Message:
0.8.5.5:
* Fix bug reported by Brian Downing: do not perform
MV-LET-convertion, if the last optional entry has
references.
... new consistency condition: function in a local
mv-combination must be of kind MV-LET.
Index: debug.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/debug.lisp,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- debug.lisp 3 Oct 2003 02:51:56 -0000 1.32
+++ debug.lisp 26 Oct 2003 11:36:25 -0000 1.33
@@ -466,6 +466,18 @@
(check-fun-reached leaf node)))))
(basic-combination
(check-dest (basic-combination-fun node) node)
+ (when (and (mv-combination-p node)
+ (eq (basic-combination-kind node) :local))
+ (let ((fun-lvar (basic-combination-fun node)))
+ (unless (ref-p (lvar-uses fun-lvar))
+ (barf "function in a local mv-combination is not a LEAF: ~S" node))
+ (let ((fun (ref-leaf (lvar-use fun-lvar))))
+ (unless (lambda-p fun)
+ (barf "function ~S in a local mv-combination ~S is not local"
+ fun node))
+ (unless (eq (functional-kind fun) :mv-let)
+ (barf "function ~S in a local mv-combination ~S is not of kind
:MV-LET"
+ fun node)))))
(dolist (arg (basic-combination-args node))
(cond
(arg (check-dest arg node))
Index: locall.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/locall.lisp,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -d -r1.56 -r1.57
--- locall.lisp 9 Oct 2003 06:41:51 -0000 1.56
+++ locall.lisp 26 Oct 2003 11:36:25 -0000 1.57
@@ -438,22 +438,23 @@
(defun convert-mv-call (ref call fun)
(declare (type ref ref) (type mv-combination call) (type functional fun))
(when (and (looks-like-an-mv-bind fun)
- (not (functional-entry-fun fun))
(singleton-p (leaf-refs fun))
(singleton-p (basic-combination-args call)))
(let* ((*current-component* (node-component ref))
(ep (optional-dispatch-entry-point-fun
fun (optional-dispatch-max-args fun))))
- (aver (= (optional-dispatch-min-args fun) 0))
- (setf (basic-combination-kind call) :local)
- (pushnew ep (lambda-calls-or-closes (node-home-lambda call)))
- (merge-tail-sets call ep)
- (change-ref-leaf ref ep)
+ (when (null (leaf-refs ep))
+ (aver (= (optional-dispatch-min-args fun) 0))
+ (aver (not (functional-entry-fun fun)))
+ (setf (basic-combination-kind call) :local)
+ (pushnew ep (lambda-calls-or-closes (node-home-lambda call)))
+ (merge-tail-sets call ep)
+ (change-ref-leaf ref ep)
- (assert-lvar-type
- (first (basic-combination-args call))
- (make-short-values-type (mapcar #'leaf-type (lambda-vars ep)))
- (lexenv-policy (node-lexenv call)))))
+ (assert-lvar-type
+ (first (basic-combination-args call))
+ (make-short-values-type (mapcar #'leaf-type (lambda-vars ep)))
+ (lexenv-policy (node-lexenv call))))))
(values))
;;; Attempt to convert a call to a lambda. If the number of args is
-------------------------------------------------------
This SF.net email is sponsored by: The SF.net Donation Program.
Do you like what SourceForge.net is doing for the Open
Source Community? Make a contribution, and help us add new
features and functionality. Click here: http://sourceforge.net/donate/
|
| |