mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-25 04:55:04 +02:00
WIP
This commit is contained in:
parent
179d4008fb
commit
6bf6b028d2
4 changed files with 58 additions and 31 deletions
6
Makefile
6
Makefile
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
;(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
|
(eval
|
||||||
(list
|
(list
|
||||||
(Cyc-get-cvar macro)
|
(Cyc-get-cvar macro)
|
||||||
(list 'quote exp)
|
(list 'quote exp)
|
||||||
(Cyc-er-rename mac-env)
|
(Cyc-er-rename mac-env)
|
||||||
Cyc-er-compare?)
|
Cyc-er-compare?)
|
||||||
mac-env)))));)
|
mac-env)))))
|
||||||
|
|
||||||
; TODO: get macro name, transformer
|
; TODO: get macro name, transformer
|
||||||
; TODO: let-syntax forms
|
; TODO: let-syntax forms
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue