fixed bug in expansion of expressions in interaction environment
where id->label was prematurely interning identifiers in the environment. Now, there is id->label/intern that does that and it's only used when an identifier's type is resolved and not at other times (like in free-id=? and bount-id=?).
This commit is contained in:
parent
2924c91788
commit
5b2fca49e6
|
@ -335,7 +335,7 @@
|
|||
(sign-inf. (r ex sn)
|
||||
[(#\0) (next sign-inf.0 r ex sn)])
|
||||
(sign-inf.0 (r ex sn)
|
||||
[(eof) (* sn +inf.0)]
|
||||
[(eof) (if (= sn 1) +inf.0 -inf.0)] ;(* sn +inf.0)
|
||||
[(#\+) (next im:sign r (* sn +inf.0) ex +1)]
|
||||
[(#\-) (next im:sign r (* sn +inf.0) ex -1)]
|
||||
[(#\@) (next polar r (* sn +inf.0) ex)]
|
||||
|
|
|
@ -1 +1 @@
|
|||
1766
|
||||
1767
|
||||
|
|
|
@ -507,7 +507,7 @@
|
|||
;;; same label or if both are unbound and they have the same name.
|
||||
(define free-id=?
|
||||
(lambda (i j)
|
||||
(let ((t0 (id->real-label i)) (t1 (id->real-label j)))
|
||||
(let ((t0 (id->label i)) (t1 (id->label j)))
|
||||
(if (or t0 t1)
|
||||
(eq? t0 t1)
|
||||
(eq? (id->sym i) (id->sym j))))))
|
||||
|
@ -584,8 +584,8 @@
|
|||
;;; id->label takes an id (that's a sym x marks x substs) and
|
||||
;;; searches the substs for a label associated with the same sym
|
||||
;;; and marks.
|
||||
(define (id->label id)
|
||||
(or (id->real-label id)
|
||||
(define (id->label/intern id)
|
||||
(or (id->label id)
|
||||
(cond
|
||||
((top-level-context) =>
|
||||
(lambda (env)
|
||||
|
@ -596,7 +596,7 @@
|
|||
lab))))
|
||||
(else #f))))
|
||||
|
||||
(define id->real-label
|
||||
(define id->label
|
||||
(lambda (id)
|
||||
(let ((sym (id->sym id)))
|
||||
(let search ((subst* (stx-subst* id)) (mark* (stx-mark* id)))
|
||||
|
@ -679,7 +679,7 @@
|
|||
(cond
|
||||
((id? e)
|
||||
(let ((id e))
|
||||
(let* ((label (id->label id))
|
||||
(let* ((label (id->label/intern id))
|
||||
(b (label->binding label r))
|
||||
(type (binding-type b)))
|
||||
(unless label ;;; fail early.
|
||||
|
@ -694,7 +694,7 @@
|
|||
((syntax-pair? e)
|
||||
(let ((id (syntax-car e)))
|
||||
(if (id? id)
|
||||
(let* ((label (id->label id))
|
||||
(let* ((label (id->label/intern id))
|
||||
(b (label->binding label r))
|
||||
(type (binding-type b)))
|
||||
(unless label ;;; fail early.
|
||||
|
|
Loading…
Reference in New Issue