mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-16 09:17:35 +02:00
Issue #361 - Ensure bound vars are known within scope
This commit is contained in:
parent
a46b2ec6ae
commit
29b2872f54
2 changed files with 14 additions and 6 deletions
|
@ -10,6 +10,10 @@ Features
|
|||
make_c_opaque(opq, my_c_obj);
|
||||
opaque_collect_ptr(&opq) = 1; // Cyclone's GC will free this memory
|
||||
|
||||
Bug Fixes
|
||||
|
||||
- Fixed a bug where variables defined within `define-syntax` and `let-syntax` are reported as unbound by the compiler.
|
||||
|
||||
## 0.15 - February 26, 2020
|
||||
|
||||
Features
|
||||
|
|
|
@ -903,11 +903,15 @@
|
|||
;; At this point defines cannot be in lambda form.
|
||||
;; EG: (define (f x) ...)
|
||||
((define? expr)
|
||||
(let ((bv* (cons (define->var expr) bv)))
|
||||
;; #361 - Update parent list of bound variables to account
|
||||
;; for defined variable since it is within that scope
|
||||
(if (null? bv)
|
||||
(set! bv (list bv))
|
||||
(set-cdr! bv (cons (define->var expr) (cdr bv))))
|
||||
`(define ,(define->var expr)
|
||||
,@(map
|
||||
(lambda (e) (clean e bv*))
|
||||
(define->exp expr)))))
|
||||
(lambda (e) (clean e bv))
|
||||
(define->exp expr))))
|
||||
;; For now, assume set is not introducing a new binding
|
||||
((set!? expr)
|
||||
`(set! ,(clean (set!->var expr) bv)
|
||||
|
@ -917,7 +921,7 @@
|
|||
expr))
|
||||
(else
|
||||
(error "macro cleanup unexpected expression: " expr))))
|
||||
(clean expr '()))
|
||||
(clean expr (list '____unused____)))
|
||||
|
||||
; TODO: get macro name, transformer
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue