mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-20 14:19:17 +02:00
Add macro:clean
This commit is contained in:
parent
4f99b8b629
commit
f51a680eef
1 changed files with 8 additions and 5 deletions
|
@ -99,17 +99,20 @@
|
||||||
(env:all-values env)
|
(env:all-values env)
|
||||||
*macro:renamed-variables*)))
|
*macro:renamed-variables*)))
|
||||||
|
|
||||||
#;(define (macro:cleanup expr)
|
(define (macro:cleanup expr)
|
||||||
(define (clean expr bv) ;; Bound variables
|
(define (clean expr bv) ;; Bound variables
|
||||||
(cond
|
(cond
|
||||||
((const? expr) expr)
|
((const? expr) expr)
|
||||||
((prim? expr) expr)
|
;((prim? expr) expr)
|
||||||
((quote? expr) expr)
|
((quote? expr) expr)
|
||||||
((define-c? expr) expr)
|
((define-c? expr) expr)
|
||||||
((ref? expr)
|
((ref? expr)
|
||||||
;; TODO: if symbol has been renamed and is not a bound variable,
|
;; if symbol has been renamed and is not a bound variable,
|
||||||
;; undo the rename
|
;; undo the rename
|
||||||
expr)
|
(let ((val (env:lookup expr *macro:renamed-variables* #f)))
|
||||||
|
(if (and val (not (member val bv)))
|
||||||
|
(clean val bv)
|
||||||
|
expr)))
|
||||||
((if? expr)
|
((if? expr)
|
||||||
`(if ,(clean (if->condition expr) bv)
|
`(if ,(clean (if->condition expr) bv)
|
||||||
,(clean (if->then expr) bv)
|
,(clean (if->then expr) bv)
|
||||||
|
|
Loading…
Add table
Reference in a new issue