From 6bf6b028d231d548c54107f100d53741a294259f Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 2 Sep 2015 00:09:06 -0400 Subject: [PATCH] WIP --- Makefile | 6 +++- cyclone.scm | 2 +- scheme/cyclone/macros.sld | 57 ++++++++++++++++++++++++----------- scheme/cyclone/transforms.sld | 24 +++++++-------- 4 files changed, 58 insertions(+), 31 deletions(-) diff --git a/Makefile b/Makefile index 6a02cd0f..b6b833dc 100644 --- a/Makefile +++ b/Makefile @@ -148,4 +148,8 @@ sld: .PHONY: debug debug: - cyclone scheme/cyclone/macros.sld && sudo cp scheme/cyclone/macros.c /usr/local/share/cyclone/scheme/cyclone/ && sudo cp scheme/cyclone/macros.sld /usr/local/share/cyclone/scheme/cyclone/ && sudo cp scheme/cyclone/macros.o /usr/local/share/cyclone/scheme/cyclone/ && cyclone scheme/cyclone/util.sld && sudo cp scheme/cyclone/util.c /usr/local/share/cyclone/scheme/cyclone/ && sudo cp scheme/cyclone/util.sld /usr/local/share/cyclone/scheme/cyclone/ && sudo cp scheme/cyclone/util.o /usr/local/share/cyclone/scheme/cyclone/ && cyclone scheme/cyclone/transforms.sld && sudo cp scheme/cyclone/transforms.c /usr/local/share/cyclone/scheme/cyclone/ && sudo cp scheme/cyclone/transforms.sld /usr/local/share/cyclone/scheme/cyclone/ && sudo cp scheme/cyclone/transforms.o /usr/local/share/cyclone/scheme/cyclone/ && cyclone cyclone.scm && cyclone icyc.scm && sudo make install-bin + cyclone scheme/cyclone/macros.sld && sudo cp scheme/cyclone/macros.c /usr/local/share/cyclone/scheme/cyclone/ && sudo cp scheme/cyclone/macros.sld /usr/local/share/cyclone/scheme/cyclone/ && sudo cp scheme/cyclone/macros.o /usr/local/share/cyclone/scheme/cyclone/ && \ + cyclone scheme/cyclone/util.sld && sudo cp scheme/cyclone/util.c /usr/local/share/cyclone/scheme/cyclone/ && sudo cp scheme/cyclone/util.sld /usr/local/share/cyclone/scheme/cyclone/ && sudo cp scheme/cyclone/util.o /usr/local/share/cyclone/scheme/cyclone/ && \ + cyclone scheme/cyclone/transforms.sld && sudo cp scheme/cyclone/transforms.c /usr/local/share/cyclone/scheme/cyclone/ && sudo cp scheme/cyclone/transforms.sld /usr/local/share/cyclone/scheme/cyclone/ && sudo cp scheme/cyclone/transforms.o /usr/local/share/cyclone/scheme/cyclone/ && \ + cyclone -t cyclone.scm && cyclone -t icyc.scm && sudo make install-bin + diff --git a/cyclone.scm b/cyclone.scm index 2e5291cf..4cc7ca43 100644 --- a/cyclone.scm +++ b/cyclone.scm @@ -123,7 +123,7 @@ *defined-macros*))) (macro:load-env! *defined-macros*) ;TODO: try this again, make sure macro is loaded: -(trace:info *defined-macros*) +(trace:info (list 'defined-macros *defined-macros*)) (trace:info (list 'macro-env (macro:get-env))) ;; END JAE DEBUG diff --git a/scheme/cyclone/macros.sld b/scheme/cyclone/macros.sld index b94d3a37..01e25da4 100644 --- a/scheme/cyclone/macros.sld +++ b/scheme/cyclone/macros.sld @@ -9,6 +9,7 @@ define-syntax? macro:macro? macro:expand + macro:expand2 macro:add! macro:load-env! macro:get-env @@ -49,9 +50,38 @@ ; TODO: probably want to look at contents of defined-macros and figure out ; exactly how the env needs to represent macros (compiled and eval'd) ; - (define (macro:expand macro exp mac-env _defined-macros) - (let* (;(macro (assoc (car exp) defined-macros)) - (compiled-macro? (or (macro? (Cyc-get-cvar macro)) + (define (macro:expand _ exp mac-env defined-macros) + (let* ((macro (assoc (car exp) defined-macros)) + (compiled-macro? (or (macro? (Cyc-get-cvar (cdr macro))) + (procedure? (cdr macro))))) + ;; Invoke ER macro + (cond + ((not macro) + (error "macro not found" exp)) + (compiled-macro? + ((Cyc-get-cvar (cdr macro)) + exp + (Cyc-er-rename mac-env) + Cyc-er-compare?)) + (else + ;; Assume evaluated macro + (let* ((env-vars (map car defined-macros)) + (env-vals (map (lambda (v) + (list 'macro (cdr v))) + defined-macros)) + ;; Pass defined macros so nested macros can be expanded + (env (create-environment env-vars env-vals))) + (eval + (list + (Cyc-get-cvar (cdr macro)) + (list 'quote exp) + (Cyc-er-rename mac-env) + Cyc-er-compare?) + env)))))) + ;mac-env)))))) + + (define (macro:expand2 macro exp mac-env) + (let* ((compiled-macro? (or (macro? (Cyc-get-cvar macro)) (procedure? macro)))) ;; Invoke ER macro (cond @@ -63,20 +93,13 @@ (Cyc-er-rename mac-env) Cyc-er-compare?)) (else - ;; Assume evaluated macro - ;(let* ((env-vars (map car defined-macros)) - ; (env-vals (map (lambda (v) - ; (list 'macro (cdr v))) - ; defined-macros)) - ; ;; Pass defined macros so nested macros can be expanded - ; (env (create-environment env-vars env-vals))) - (eval - (list - (Cyc-get-cvar macro) - (list 'quote exp) - (Cyc-er-rename mac-env) - Cyc-er-compare?) - mac-env)))));) + (eval + (list + (Cyc-get-cvar macro) + (list 'quote exp) + (Cyc-er-rename mac-env) + Cyc-er-compare?) + mac-env))))) ; TODO: get macro name, transformer ; TODO: let-syntax forms diff --git a/scheme/cyclone/transforms.sld b/scheme/cyclone/transforms.sld index be943c70..6afb8e6d 100644 --- a/scheme/cyclone/transforms.sld +++ b/scheme/cyclone/transforms.sld @@ -789,20 +789,20 @@ `(define ,name ,(expand body env)))) ; Newer macro expansion code, but not ready yet - ((symbol? (car exp)) - (let ((val (env:lookup (car exp) env #f))) - (if val - (macro:expand val exp env) - (map - (lambda (expr) (expand expr env)) - exp)))) +; ((symbol? (car exp)) +; (let ((val (env:lookup (car exp) env #f))) +; (if val +; (macro:expand val exp env) +; (map +; (lambda (expr) (expand expr env)) +; exp)))) ;; Older *define-macro* code: -;((macro:macro? exp *defined-macros*) -; ;(trace:info (list 'expanding exp)) -; (expand ;; Could expand into another macro -; (macro:expand 'TODO-val exp env *defined-macros*) -; env)) +((macro:macro? exp *defined-macros*) + ;(trace:info (list 'expanding exp)) + (expand ;; Could expand into another macro + (macro:expand 'TODO-val exp env *defined-macros*) + env)) (else (map