macro-debugger: fix deriv parser for begin-for-syntax

original commit: 57bdb62547483242ad30f44a1aa80c15cfca6cee
This commit is contained in:
Ryan Culpepper 2012-03-14 22:03:33 -06:00
parent d62630672e
commit 890768b3c8
6 changed files with 22 additions and 11 deletions

View File

@ -130,8 +130,8 @@
(recur/phase-up rhs)]
[(p:define-values z1 z2 rs ?1 rhs)
(recur rhs)]
[(p:begin-for-syntax z1 z2 rs ?1 prep body)
(recur prep)
[(p:begin-for-syntax z1 z2 rs ?1 prep body locals)
(recur prep locals)
(recur/phase-up body)]
[(p:#%expression z1 z2 rs ?1 inner untag)
(recur inner)]

View File

@ -108,7 +108,7 @@
;; where BFSBody is one of
;; - ModuleBegin/Phase
;; - (list BeginForSyntaxLifts ... LDeriv))
(define-struct (p:begin-for-syntax prule) (prep body) #:transparent)
(define-struct (p:begin-for-syntax prule) (prep body locals) #:transparent)
;; (make-p:stop <Base>)
;; (make-p:unknown <Base>)

View File

@ -321,8 +321,8 @@
phase-up (? EE/LetLifts) (? Eval) exit-prim)
(make p:define-syntaxes $1 $8 null $3 $4 $6 $7)]
[(enter-prim prim-begin-for-syntax ! (? PrepareEnv)
phase-up (? ModuleBegin/Phase) exit-prim)
(make p:begin-for-syntax $1 $7 null $3 $4 $6)]
phase-up (? ModuleBegin/Phase) (? Eval) exit-prim)
(make p:begin-for-syntax $1 $7 null $3 $4 $6 $7)]
[(enter-prim prim-require (? Eval) exit-prim)
(make p:require $1 $4 null #f $3)]
[()
@ -504,8 +504,8 @@
(PrimBeginForSyntax
(#:args e1 e2 rs)
[(prim-begin-for-syntax ! (? PrepareEnv) (? BeginForSyntax*))
(make p:begin-for-syntax e1 e2 rs $2 $3 $4)])
[(prim-begin-for-syntax ! (? PrepareEnv) (? BeginForSyntax*) (? Eval))
(make p:begin-for-syntax e1 e2 rs $2 $3 $4 $5)])
(BeginForSyntax*
[((? EL))
(list $1)]

View File

@ -36,7 +36,7 @@
(define (ok-node? x)
(check 'ok-node? node? "node" x)
(and (node-z1 x) #t))
(and (node-z2 x) #t))
(define (interrupted-node? x)
(check 'interrupted-node? node? "node" x)
(not (node-z2 x)))

View File

@ -270,7 +270,7 @@
[! ?2]
[Expr ?rhs rhs])]
[(Wrap p:begin-for-syntax (e1 e2 rs ?1 prep body))
[(Wrap p:begin-for-syntax (e1 e2 rs ?1 prep body locals))
(R [! ?1]
[#:pattern ?form]
[PrepareEnv ?form prep]
@ -278,7 +278,8 @@
[#:parameterize ((phase (add1 (phase))))
[#:if (module-begin/phase? body)
[[ModuleBegin/Phase ?forms body]]
[[BeginForSyntax ?forms body]]]])]
[[BeginForSyntax ?forms body]]]]
[LocalActions ?forms locals])]
;; Macros
[(Wrap mrule (e1 e2 rs ?1 me1 locals me2 ?2 etx next))

View File

@ -205,4 +205,14 @@
(equal? (syntax->datum (state-e (step-s2 step)))
'(define y 12)))
"looking for m => define")))
))
;; Added 3/12/2012 based on bug from cce
(test-case "begin-for-syntax ends with phase1 eval"
(let ([d (trace '(module m '#%kernel
(#%module-begin
(#%require (for-syntax '#%kernel))
(begin-for-syntax
(syntax-local-value (quote-syntax lambda) void)))))])
(check-pred deriv? d)
(check-pred ok-node? d)))
))