~ chicken-core (chicken-5) fb423c06afa0a30c1be8040785f0769c459d180b
commit fb423c06afa0a30c1be8040785f0769c459d180b
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Wed Jan 13 21:53:18 2010 +0100
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Wed Jan 13 21:53:18 2010 +0100
toplevel-alias detection for simple cases
diff --git a/compiler.scm b/compiler.scm
index d12c7cb6..1ec72225 100644
--- a/compiler.scm
+++ b/compiler.scm
@@ -90,6 +90,7 @@
; ##compiler#profile -> BOOL
; ##compiler#unused -> BOOL
; ##compiler#foldable -> BOOL
+; ##compiler#toplevel-alias -> SYMBOL
; - Source language:
;
diff --git a/optimizer.scm b/optimizer.scm
index 150246ea..3b087977 100644
--- a/optimizer.scm
+++ b/optimizer.scm
@@ -85,8 +85,9 @@
[(##core#call) (touch)]
[(set!)
- (let ([var (first params)])
- (scan (first subs) e)
+ (let ((var (first params))
+ (val (first subs)))
+ (scan val e)
(let ((p (alist-ref var previous)))
(when (and p (not (memq var unsafe)))
(compiler-warning
@@ -96,6 +97,14 @@
(copy-node!
(make-node '##core#undefined '() '())
p))
+ (when (and (not escaped)
+ (not (memq var e))
+ (not (memq var unsafe))
+ (eq? '##core#variable (node-class val)))
+ (let ((valname (first (node-parameters val))))
+ (unless (memq valname e)
+ (debugging 'x (sprintf "toplevel-alias: ~s -> ~s" var valname))
+ (##sys#put! var '##compiler#toplevel-alias valname))))
(unless (memq var e) (mark var))
(remember var n) ) ) ]
@@ -214,6 +223,7 @@
(touch)
(debugging 'o "substituted constant variable" var)
(qnode (car (node-parameters (test var 'value)))) )
+ ((##sys#get var '##compiler#toplevel-alias) => replace)
(else
(if (not (eq? var (first params)))
(begin
Trap