From cd1c5eb99df4b687e49797e57f8198c6fb8e27f6 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 16 Sep 2016 01:08:20 -0400 Subject: [PATCH] WIP --- scheme/cyclone/macros.sld | 11 ++++++----- scheme/cyclone/util.sld | 15 ++++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/scheme/cyclone/macros.sld b/scheme/cyclone/macros.sld index 3975063b..a0db3d44 100644 --- a/scheme/cyclone/macros.sld +++ b/scheme/cyclone/macros.sld @@ -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 diff --git a/scheme/cyclone/util.sld b/scheme/cyclone/util.sld index 6fe7c1e4..07febab1 100644 --- a/scheme/cyclone/util.sld +++ b/scheme/cyclone/util.sld @@ -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.