diff --git a/cyclone.scm b/cyclone.scm index aac30b65..c19afb0a 100644 --- a/cyclone.scm +++ b/cyclone.scm @@ -102,16 +102,16 @@ ;; JAE DEBUG code, remove (or refactor) once working (trace:info "JAE DEBUG - compiled macros") -(trace:info - (filter - (lambda (v) - (cond - ((equal? (car v) 'my-or) - (trace:info (list 'my-or (car v) (cdr v) (macro? (Cyc-get-cvar (cdr v))))) - #t) - (else #f))) - ;(macro? (cdr v))) - (Cyc-global-vars))) +;(trace:info +; (filter +; (lambda (v) +; (cond +; ((equal? (car v) 'my-or) +; (trace:info (list 'my-or (car v) (cdr v) (macro? (Cyc-get-cvar (cdr v))))) +; #t) +; (else #f))) +; ;(macro? (cdr v))) +; (Cyc-global-vars))) ; TODO: should be able to use this to find all the compiled macros (let ((macros (filter (lambda (v) @@ -119,14 +119,12 @@ (Cyc-global-vars)))) (set! *defined-macros* (append - ;(map - ; (lambda (v) - ; (cons (car v) (cdr v))) - ; macros)) macros *defined-macros*))) +(macro:load-env! *defined-macros*) ;TODO: try this again, make sure macro is loaded: (trace:info *defined-macros*) +(trace:info (list 'macro-env (macro:get-env))) ;; END JAE DEBUG (set! input-program (expand input-program)) diff --git a/scheme/cyclone/macros.sld b/scheme/cyclone/macros.sld index 941ff85c..d514ece2 100644 --- a/scheme/cyclone/macros.sld +++ b/scheme/cyclone/macros.sld @@ -10,9 +10,14 @@ macro:macro? macro:expand macro:add! + macro:load-env! + macro:get-env macro:get-defined-macros ) (begin + ;; top-level macro environment + (define *macro:env* '()) + ;; A list of all macros defined by the program/library being compiled (define *macro:defined-macros* '()) @@ -21,6 +26,14 @@ (cons (cons name body) *macro:defined-macros*)) #t) + (define (macro:load-env! defined-macros) + (set! *macro-env* (env:extend-environment + (map car defined-macros) + (map cdr defined-macros) + env:the-empty-environment))) + + (define (macro:get-env) *macro:env*) + (define (macro:get-defined-macros) *macro:defined-macros*) ;; Macro section