~ chicken-core (chicken-5) e166fa31dded9de669904848048922ee23921c33
commit e166fa31dded9de669904848048922ee23921c33
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Tue Jan 5 13:17:48 2010 +0100
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Tue Jan 5 13:18:33 2010 +0100
fixed bug in unused-var-removal optimization done the other day
diff --git a/optimizer.scm b/optimizer.scm
index 8a7320e2..150246ea 100644
--- a/optimizer.scm
+++ b/optimizer.scm
@@ -68,7 +68,8 @@
(let ((var (first params)))
(when (and (not (memq var e))
(not (memq var safe)))
- (set! unsafe (cons var unsafe)) ) ) ]
+ (set! unsafe (cons var unsafe)) )
+ (set! previous (remove (lambda (p) (eq? (car p) var)) previous)))]
[(if ##core#cond ##core#switch)
(scan (first subs) e)
@@ -85,17 +86,18 @@
[(set!)
(let ([var (first params)])
- (and-let* ((p (alist-ref var previous)))
- (compiler-warning
- 'var
- "dropping assignment of unused value to global variable `~s'"
- var)
- (copy-node!
- (make-node '##core#undefined '() '())
- p))
(scan (first subs) e)
- (unless (memq var e) (mark var))
- (remember var n) )]
+ (let ((p (alist-ref var previous)))
+ (when (and p (not (memq var unsafe)))
+ (compiler-warning
+ 'var
+ "dropping assignment of unused value to global variable `~s'"
+ var)
+ (copy-node!
+ (make-node '##core#undefined '() '())
+ p))
+ (unless (memq var e) (mark var))
+ (remember var n) ) ) ]
[else (scan-each subs e)] ) ) )
Trap