This commit is contained in:
Justin Ethier 2015-09-02 00:09:06 -04:00
parent 179d4008fb
commit 6bf6b028d2
4 changed files with 58 additions and 31 deletions

View file

@ -148,4 +148,8 @@ sld:
.PHONY: debug .PHONY: debug
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

View file

@ -123,7 +123,7 @@
*defined-macros*))) *defined-macros*)))
(macro:load-env! *defined-macros*) (macro:load-env! *defined-macros*)
;TODO: try this again, make sure macro is loaded: ;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))) (trace:info (list 'macro-env (macro:get-env)))
;; END JAE DEBUG ;; END JAE DEBUG

View file

@ -9,6 +9,7 @@
define-syntax? define-syntax?
macro:macro? macro:macro?
macro:expand macro:expand
macro:expand2
macro:add! macro:add!
macro:load-env! macro:load-env!
macro:get-env macro:get-env
@ -49,9 +50,38 @@
; TODO: probably want to look at contents of defined-macros and figure out ; 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) ; exactly how the env needs to represent macros (compiled and eval'd)
; ;
(define (macro:expand macro exp mac-env _defined-macros) (define (macro:expand _ exp mac-env defined-macros)
(let* (;(macro (assoc (car exp) defined-macros)) (let* ((macro (assoc (car exp) defined-macros))
(compiled-macro? (or (macro? (Cyc-get-cvar macro)) (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)))) (procedure? macro))))
;; Invoke ER macro ;; Invoke ER macro
(cond (cond
@ -63,20 +93,13 @@
(Cyc-er-rename mac-env) (Cyc-er-rename mac-env)
Cyc-er-compare?)) Cyc-er-compare?))
(else (else
;; Assume evaluated macro (eval
;(let* ((env-vars (map car defined-macros)) (list
; (env-vals (map (lambda (v) (Cyc-get-cvar macro)
; (list 'macro (cdr v))) (list 'quote exp)
; defined-macros)) (Cyc-er-rename mac-env)
; ;; Pass defined macros so nested macros can be expanded Cyc-er-compare?)
; (env (create-environment env-vars env-vals))) 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: get macro name, transformer
; TODO: let-syntax forms ; TODO: let-syntax forms

View file

@ -789,20 +789,20 @@
`(define ,name ,(expand body env)))) `(define ,name ,(expand body env))))
; Newer macro expansion code, but not ready yet ; Newer macro expansion code, but not ready yet
((symbol? (car exp)) ; ((symbol? (car exp))
(let ((val (env:lookup (car exp) env #f))) ; (let ((val (env:lookup (car exp) env #f)))
(if val ; (if val
(macro:expand val exp env) ; (macro:expand val exp env)
(map ; (map
(lambda (expr) (expand expr env)) ; (lambda (expr) (expand expr env))
exp)))) ; exp))))
;; Older *define-macro* code: ;; Older *define-macro* code:
;((macro:macro? exp *defined-macros*) ((macro:macro? exp *defined-macros*)
; ;(trace:info (list 'expanding exp)) ;(trace:info (list 'expanding exp))
; (expand ;; Could expand into another macro (expand ;; Could expand into another macro
; (macro:expand 'TODO-val exp env *defined-macros*) (macro:expand 'TODO-val exp env *defined-macros*)
; env)) env))
(else (else
(map (map