Add macro:clean

This commit is contained in:
Justin Ethier 2016-09-16 18:19:50 -04:00
parent 4f99b8b629
commit f51a680eef

View file

@ -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)