Renumber returns label/var counters for use in let-fresh
authorAndy Wingo <wingo@pobox.com>
Tue, 1 Apr 2014 14:47:11 +0000 (16:47 +0200)
committerAndy Wingo <wingo@pobox.com>
Tue, 1 Apr 2014 14:47:11 +0000 (16:47 +0200)
* module/language/cps/renumber.scm (renumber): Refactor to return the
  label and var counters as additional values.

* module/language/cps/dce.scm (eliminate-dead-code): Use the renumber
  label/var counters to initialize the fresh name state.

module/language/cps/dce.scm
module/language/cps/renumber.scm

index 7ee12d8..da19b93 100644 (file)
   (visit-fun fun))
 
 (define (eliminate-dead-code fun)
-  (let ((fun (renumber fun)))
-    (with-fresh-name-state fun
-      (call-with-values (lambda () (compute-live-code fun))
-        (lambda (fun-data-table live-vars)
-          (process-eliminations fun fun-data-table live-vars))))))
+  (call-with-values (lambda () (renumber fun))
+    (lambda (fun nlabels nvars)
+      (parameterize ((label-counter nlabels)
+                     (var-counter nvars))
+        (call-with-values (lambda () (compute-live-code fun))
+          (lambda (fun-data-table live-vars)
+            (process-eliminations fun fun-data-table live-vars)))))))
index 85ac52b..d410098 100644 (file)
              (visit-cont entry))))
 
         (visit-funs compute-names-in-fun fun)
-        (values labels vars)))))
+        (values labels vars next-label next-var)))))
 
 (define (renumber fun)
   (call-with-values (lambda () (compute-new-labels-and-vars fun))
-    (lambda (labels vars)
+    (lambda (labels vars nlabels nvars)
       (define (relabel label) (vector-ref labels label))
       (define (rename var) (vector-ref vars var))
       (define (rename-kw-arity arity)
         (rewrite-cps-exp fun
           (($ $fun src meta free body)
            ($fun src meta (map rename free) ,(must-visit-cont body)))))
-      (visit-fun fun))))
+      (values (visit-fun fun) nlabels nvars))))