mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-09 14:07:34 +02:00
Allow (macro:add-renamed-vars!) to mutate env
This commit is contained in:
parent
6ca3b7fca7
commit
5f93f3e9cb
2 changed files with 14 additions and 17 deletions
|
@ -11,7 +11,6 @@
|
||||||
(scheme write) ;; Debug only
|
(scheme write) ;; Debug only
|
||||||
(scheme eval)
|
(scheme eval)
|
||||||
(scheme cyclone util)
|
(scheme cyclone util)
|
||||||
(srfi 69)
|
|
||||||
)
|
)
|
||||||
(export
|
(export
|
||||||
define-syntax?
|
define-syntax?
|
||||||
|
@ -53,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 rename-tbl)
|
(define *macro:renamed-variables* (env:extend-environment '() '() '()))
|
||||||
|
(define (macro:expand exp macro mac-env) ;;rename-tbl
|
||||||
(let* ((use-env (env:extend-environment '() '() '()))
|
(let* ((use-env (env:extend-environment '() '() '()))
|
||||||
(compiled-macro? (or (Cyc-macro? (Cyc-get-cvar (cadr macro)))
|
(compiled-macro? (or (Cyc-macro? (Cyc-get-cvar (cadr macro)))
|
||||||
(procedure? (cadr macro))))
|
(procedure? (cadr macro))))
|
||||||
|
@ -72,14 +72,14 @@
|
||||||
((Cyc-get-cvar (cadr macro))
|
((Cyc-get-cvar (cadr macro))
|
||||||
exp
|
exp
|
||||||
(Cyc-er-rename use-env mac-env)
|
(Cyc-er-rename use-env mac-env)
|
||||||
(Cyc-er-compare? use-env rename-tbl)))
|
(Cyc-er-compare? use-env *macro:renamed-variables*)))
|
||||||
(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 use-env mac-env)
|
(Cyc-er-rename use-env mac-env)
|
||||||
(Cyc-er-compare? use-env rename-tbl))
|
(Cyc-er-compare? use-env *macro:renamed-variables*))
|
||||||
mac-env))))
|
mac-env))))
|
||||||
; (newline)
|
; (newline)
|
||||||
; (display "/* ")
|
; (display "/* ")
|
||||||
|
@ -87,19 +87,18 @@
|
||||||
; (newline)
|
; (newline)
|
||||||
; (display (list result))
|
; (display (list result))
|
||||||
; (display "*/ ")
|
; (display "*/ ")
|
||||||
(macro:add-renamed-vars! use-env rename-tbl)
|
(macro:add-renamed-vars! use-env *macro:renamed-variables*)
|
||||||
result))
|
result))
|
||||||
|
|
||||||
(define (macro:add-renamed-vars! env rename-tbl)
|
(define (macro:add-renamed-vars! env renamed-env)
|
||||||
;; TODO: change this to use a hash table
|
(let ((frame (env:first-frame renamed-env)))
|
||||||
;(set! *macro:renamed-variables*
|
(for-each
|
||||||
; (env:extend-environment
|
(lambda (var val)
|
||||||
; (env:all-variables env)
|
(env:add-binding-to-frame! var val frame))
|
||||||
; (env:all-values env)
|
(env:all-variables env)
|
||||||
; *macro:renamed-variables*))
|
(env:all-values env))))
|
||||||
)
|
|
||||||
|
|
||||||
(define (macro:cleanup expr rename-tbl)
|
(define (macro:cleanup expr)
|
||||||
(define (clean expr bv) ;; Bound variables
|
(define (clean expr bv) ;; Bound variables
|
||||||
;(newline)
|
;(newline)
|
||||||
;(display "/* macro:cleanup->clean, bv =")
|
;(display "/* macro:cleanup->clean, bv =")
|
||||||
|
@ -117,7 +116,6 @@
|
||||||
((ref? expr)
|
((ref? expr)
|
||||||
;; if symbol has been renamed and is not a bound variable,
|
;; if symbol has been renamed and is not a bound variable,
|
||||||
;; undo the rename
|
;; undo the rename
|
||||||
TODO: no good, change to use rename-tbl (a hashtable)
|
|
||||||
(let ((val (env:lookup expr *macro:renamed-variables* #f)))
|
(let ((val (env:lookup expr *macro:renamed-variables* #f)))
|
||||||
(if (and val (not (member expr bv)))
|
(if (and val (not (member expr bv)))
|
||||||
(clean val bv)
|
(clean val bv)
|
||||||
|
|
|
@ -8,8 +8,7 @@
|
||||||
;;;;
|
;;;;
|
||||||
(define-library (scheme cyclone util)
|
(define-library (scheme cyclone util)
|
||||||
(import (scheme base)
|
(import (scheme base)
|
||||||
(scheme char)
|
(scheme char))
|
||||||
(srfi 69))
|
|
||||||
(export
|
(export
|
||||||
;; Code analysis
|
;; Code analysis
|
||||||
tagged-list?
|
tagged-list?
|
||||||
|
|
Loading…
Add table
Reference in a new issue