This commit is contained in:
Justin Ethier 2016-09-16 01:08:20 -04:00
parent 0a352541eb
commit cd1c5eb99d
2 changed files with 16 additions and 10 deletions

View file

@ -52,7 +52,8 @@
(define (macro:macro? exp defined-macros) (assoc (car exp) defined-macros))
(define (macro:expand exp macro mac-env)
(let* ((compiled-macro? (or (Cyc-macro? (Cyc-get-cvar (cadr macro)))
(let* ((use-env (env:extend-environment '() '() '()))
(compiled-macro? (or (Cyc-macro? (Cyc-get-cvar (cadr macro)))
(procedure? (cadr macro)))))
;(newline)
;(display "/* ")
@ -66,15 +67,15 @@
(compiled-macro?
((Cyc-get-cvar (cadr macro))
exp
(Cyc-er-rename mac-env mac-env) ;; TODO: use-env
(Cyc-er-compare? mac-env))) ;; TODO: wrong env (?)
(Cyc-er-rename use-env mac-env)
(Cyc-er-compare? use-env)))
(else
(eval
(list
(Cyc-get-cvar (cadr macro))
(list 'quote exp)
(Cyc-er-rename mac-env mac-env)
(Cyc-er-compare? mac-env))
(Cyc-er-rename use-env mac-env)
(Cyc-er-compare? use-env))
mac-env)))))
; TODO: get macro name, transformer

View file

@ -476,15 +476,20 @@
(set! renames (cons (cons identifier name) renames))
name)
;; TODO: rename variables in use-env. do we need a cleanup env as well?
(let ((val (env:lookup identifier mac-env 'not-defined)))
(cond
((or (not (tagged-list? 'macro val)) ;; TODO: For now only rename macros, but should support anything
(eq? val 'not-defined))
identifier)
(else
((tagged-list? 'macro val)
(let ((renamed (gensym identifier)))
(env:define-variable! renamed val mac-env)
renamed))))
renamed))
(else
;; Unrenamed variable identifier
(let ((renamed (gensym identifier)))
(env:define-variable! renamed identifier use-env)
renamed)
identifier ;; TESTING!
)))
;
;(gensym identifier)
; gensym not good enough, need to also preserve ref trans.