mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-14 08:17:35 +02:00
Handled renamed syntax-rules during macro expansion
This commit is contained in:
parent
344eb59381
commit
b2e9524e70
2 changed files with 26 additions and 7 deletions
|
@ -922,11 +922,21 @@
|
||||||
(let* ((name (car b))
|
(let* ((name (car b))
|
||||||
(binding (cadr b))
|
(binding (cadr b))
|
||||||
(binding-body (cadr binding)))
|
(binding-body (cadr binding)))
|
||||||
|
;(define tmp (env:lookup (car binding) env #f))
|
||||||
|
;(display "/* ")
|
||||||
|
;(write `(DEBUG expand let-syntax
|
||||||
|
; ,(if (tagged-list? 'macro tmp)
|
||||||
|
; (Cyc-get-cvar (cadr tmp))
|
||||||
|
; tmp)
|
||||||
|
; ,syntax-rules))
|
||||||
|
;(display "*/ ")
|
||||||
|
;(newline)
|
||||||
(cons
|
(cons
|
||||||
name
|
name
|
||||||
(list
|
(list
|
||||||
'macro
|
'macro
|
||||||
(if (tagged-list? 'syntax-rules binding)
|
;; Broken for renames, replace w/below: (if (tagged-list? 'syntax-rules binding)
|
||||||
|
(if (macro:syntax-rules? (env:lookup (car binding) env #f))
|
||||||
;; TODO: is this ok?
|
;; TODO: is this ok?
|
||||||
(cadr (_expand binding env rename-env local-env))
|
(cadr (_expand binding env rename-env local-env))
|
||||||
binding-body)))))
|
binding-body)))))
|
||||||
|
@ -975,6 +985,13 @@
|
||||||
(else
|
(else
|
||||||
(error "unknown exp: " exp))))
|
(error "unknown exp: " exp))))
|
||||||
|
|
||||||
|
(define (macro:syntax-rules? exp)
|
||||||
|
(eq?
|
||||||
|
syntax-rules
|
||||||
|
(if (tagged-list? 'macro exp)
|
||||||
|
(Cyc-get-cvar (cadr exp))
|
||||||
|
exp)))
|
||||||
|
|
||||||
;; Nicer interface to expand-body
|
;; Nicer interface to expand-body
|
||||||
(define (expand-lambda-body exp env rename-env)
|
(define (expand-lambda-body exp env rename-env)
|
||||||
(expand-body '() exp env rename-env))
|
(expand-body '() exp env rename-env))
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
;; From:
|
;; From:
|
||||||
;; https://github.com/ashinn/chibi-scheme/issues/298
|
;; https://github.com/ashinn/chibi-scheme/issues/298
|
||||||
(import (scheme base))
|
(import (scheme base) (scheme write))
|
||||||
|
|
||||||
(define-syntax bar
|
(define-syntax bar
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
|
@ -8,7 +8,9 @@
|
||||||
(let-syntax ((foo (syntax-rules () ((_) 'ok))))
|
(let-syntax ((foo (syntax-rules () ((_) 'ok))))
|
||||||
(foo)))))
|
(foo)))))
|
||||||
|
|
||||||
(define-syntax foo (syntax-rules ()))
|
;(define-syntax foo (syntax-rules ()))
|
||||||
|
|
||||||
|
(write
|
||||||
(bar)
|
(bar)
|
||||||
(foo)
|
)
|
||||||
|
;(foo)
|
||||||
|
|
Loading…
Add table
Reference in a new issue