mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-14 08:17:35 +02:00
WIP
This commit is contained in:
parent
0a352541eb
commit
cd1c5eb99d
2 changed files with 16 additions and 10 deletions
|
@ -52,7 +52,8 @@
|
||||||
(define (macro:macro? exp defined-macros) (assoc (car exp) defined-macros))
|
(define (macro:macro? exp defined-macros) (assoc (car exp) defined-macros))
|
||||||
|
|
||||||
(define (macro:expand exp macro mac-env)
|
(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)))))
|
(procedure? (cadr macro)))))
|
||||||
;(newline)
|
;(newline)
|
||||||
;(display "/* ")
|
;(display "/* ")
|
||||||
|
@ -66,15 +67,15 @@
|
||||||
(compiled-macro?
|
(compiled-macro?
|
||||||
((Cyc-get-cvar (cadr macro))
|
((Cyc-get-cvar (cadr macro))
|
||||||
exp
|
exp
|
||||||
(Cyc-er-rename mac-env mac-env) ;; TODO: use-env
|
(Cyc-er-rename use-env mac-env)
|
||||||
(Cyc-er-compare? mac-env))) ;; TODO: wrong env (?)
|
(Cyc-er-compare? use-env)))
|
||||||
(else
|
(else
|
||||||
(eval
|
(eval
|
||||||
(list
|
(list
|
||||||
(Cyc-get-cvar (cadr macro))
|
(Cyc-get-cvar (cadr macro))
|
||||||
(list 'quote exp)
|
(list 'quote exp)
|
||||||
(Cyc-er-rename mac-env mac-env)
|
(Cyc-er-rename use-env mac-env)
|
||||||
(Cyc-er-compare? mac-env))
|
(Cyc-er-compare? use-env))
|
||||||
mac-env)))))
|
mac-env)))))
|
||||||
|
|
||||||
; TODO: get macro name, transformer
|
; TODO: get macro name, transformer
|
||||||
|
|
|
@ -476,15 +476,20 @@
|
||||||
(set! renames (cons (cons identifier name) renames))
|
(set! renames (cons (cons identifier name) renames))
|
||||||
name)
|
name)
|
||||||
|
|
||||||
|
;; TODO: rename variables in use-env. do we need a cleanup env as well?
|
||||||
(let ((val (env:lookup identifier mac-env 'not-defined)))
|
(let ((val (env:lookup identifier mac-env 'not-defined)))
|
||||||
(cond
|
(cond
|
||||||
((or (not (tagged-list? 'macro val)) ;; TODO: For now only rename macros, but should support anything
|
((tagged-list? 'macro val)
|
||||||
(eq? val 'not-defined))
|
|
||||||
identifier)
|
|
||||||
(else
|
|
||||||
(let ((renamed (gensym identifier)))
|
(let ((renamed (gensym identifier)))
|
||||||
(env:define-variable! renamed val mac-env)
|
(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 identifier)
|
||||||
; gensym not good enough, need to also preserve ref trans.
|
; gensym not good enough, need to also preserve ref trans.
|
||||||
|
|
Loading…
Add table
Reference in a new issue