mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-23 12:00:21 +02:00
Vars and labels are separate namespaces
* module/language/cps.scm (fresh-var, with-fresh-name-state): Vars have their own namespace.
This commit is contained in:
parent
b9e601d20d
commit
1eda52c8ad
1 changed files with 6 additions and 13 deletions
|
@ -202,12 +202,10 @@
|
||||||
(label-counter (1+ count))
|
(label-counter (1+ count))
|
||||||
count))
|
count))
|
||||||
|
|
||||||
;; FIXME: Currently vars and labels need to be unique, so we use the
|
|
||||||
;; label counter.
|
|
||||||
(define (fresh-var)
|
(define (fresh-var)
|
||||||
(let ((count (or (label-counter)
|
(let ((count (or (var-counter)
|
||||||
(error "fresh-var outside with-fresh-name-state"))))
|
(error "fresh-var outside with-fresh-name-state"))))
|
||||||
(label-counter (1+ count))
|
(var-counter (1+ count))
|
||||||
count))
|
count))
|
||||||
|
|
||||||
(define-syntax-rule (let-fresh (label ...) (var ...) body ...)
|
(define-syntax-rule (let-fresh (label ...) (var ...) body ...)
|
||||||
|
@ -215,7 +213,6 @@
|
||||||
(var (fresh-var)) ...)
|
(var (fresh-var)) ...)
|
||||||
body ...))
|
body ...))
|
||||||
|
|
||||||
;; FIXME: Same FIXME as above.
|
|
||||||
(define-syntax-rule (with-fresh-name-state fun body ...)
|
(define-syntax-rule (with-fresh-name-state fun body ...)
|
||||||
(begin
|
(begin
|
||||||
(when (or (label-counter) (var-counter))
|
(when (or (label-counter) (var-counter))
|
||||||
|
@ -223,8 +220,8 @@
|
||||||
(call-with-values (lambda ()
|
(call-with-values (lambda ()
|
||||||
(compute-max-label-and-var fun))
|
(compute-max-label-and-var fun))
|
||||||
(lambda (max-label max-var)
|
(lambda (max-label max-var)
|
||||||
(parameterize ((label-counter (1+ (max max-label max-var)))
|
(parameterize ((label-counter (1+ max-label))
|
||||||
(var-counter (1+ (max max-label max-var))))
|
(var-counter (1+ max-var)))
|
||||||
body ...)))))
|
body ...)))))
|
||||||
|
|
||||||
(define-syntax build-arity
|
(define-syntax build-arity
|
||||||
|
@ -490,18 +487,14 @@
|
||||||
(fun-folder fun seed ...)))
|
(fun-folder fun seed ...)))
|
||||||
|
|
||||||
(define (compute-max-label-and-var fun)
|
(define (compute-max-label-and-var fun)
|
||||||
(define (max* var max-var)
|
|
||||||
(if (number? var)
|
|
||||||
(max var max-var)
|
|
||||||
max-var))
|
|
||||||
((make-cont-folder max-label max-var)
|
((make-cont-folder max-label max-var)
|
||||||
(lambda (label cont max-label max-var)
|
(lambda (label cont max-label max-var)
|
||||||
(values (max label max-label)
|
(values (max label max-label)
|
||||||
(match cont
|
(match cont
|
||||||
(($ $kargs names vars)
|
(($ $kargs names vars)
|
||||||
(fold max* max-var vars))
|
(fold max max-var vars))
|
||||||
(($ $kentry self)
|
(($ $kentry self)
|
||||||
(max* self max-var))
|
(max self max-var))
|
||||||
(_ max-var))))
|
(_ max-var))))
|
||||||
fun
|
fun
|
||||||
-1
|
-1
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue