summaryrefslogtreecommitdiffstats
path: root/stdlib/optimize.tl
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/optimize.tl')
-rw-r--r--stdlib/optimize.tl18
1 files changed, 10 insertions, 8 deletions
diff --git a/stdlib/optimize.tl b/stdlib/optimize.tl
index 906abdb8..d72be2fc 100644
--- a/stdlib/optimize.tl
+++ b/stdlib/optimize.tl
@@ -135,7 +135,7 @@
^(rewrite (lambda (,sym)
(match-case ,sym
,*cases))
- ,list))
+ ,list nil))
(defmeth basic-blocks link-graph (bb : first-time)
(unless first-time
@@ -868,13 +868,15 @@
(each ((cl clist))
cl.(apply-treg-compacting-map map))))))
-(defun rewrite (fun list)
- (build
- (while* list
- (let ((nlist [fun list]))
- (if (eq list nlist)
- (if list (add (pop list)))
- (set list nlist))))))
+(defun rewrite (fun list out)
+ (let ((nlist [fun list]))
+ (if (eq list nlist)
+ (if list
+ (push (pop list) out))
+ (set list nlist))
+ (if list
+ (rewrite fun list out)
+ (nreverse out))))
(defun dedup-labels (insns)
(rewrite-case tail insns