From a194e955efeb9960990546f1681581388f1b03e4 Mon Sep 17 00:00:00 2001 From: Ryan Culpepper Date: Wed, 3 Dec 2008 05:59:18 +0000 Subject: [PATCH] macro stepper: improved 'provide' handling svn: r12685 original commit: 7fd78779e4e16c9366723b9348761c3b8adb0462 --- collects/macro-debugger/model/deriv-c.ss | 5 +++-- collects/macro-debugger/model/deriv-parser.ss | 12 +++++------ collects/macro-debugger/model/reductions.ss | 20 ++++++++++++++++--- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/collects/macro-debugger/model/deriv-c.ss b/collects/macro-debugger/model/deriv-c.ss index 7260748..3efb19f 100644 --- a/collects/macro-debugger/model/deriv-c.ss +++ b/collects/macro-debugger/model/deriv-c.ss @@ -89,6 +89,9 @@ (srenames sbindrhss vrenames vrhss body tag) #:transparent) +;; (make-p:provide (listof Deriv) ?exn) +(define-struct (p:provide prule) (inners ?2) #:transparent) + ;; (make-p:stop ) ;; (make-p:unknown ) ;; (make-p:#%top Stx) @@ -98,7 +101,6 @@ ;; (make-p:require ) ;; (make-p:require-for-syntax ) ;; (make-p:require-for-template ) -;; (make-p:provide ) ;; (make-p:#%variable-reference ) (define-struct (p::STOP prule) () #:transparent) (define-struct (p:stop p::STOP) () #:transparent) @@ -110,7 +112,6 @@ (define-struct (p:require p::STOP) () #:transparent) (define-struct (p:require-for-syntax p::STOP) () #:transparent) (define-struct (p:require-for-template p::STOP) () #:transparent) -(define-struct (p:provide p::STOP) () #:transparent) (define-struct (p:#%variable-reference p::STOP) () #:transparent) ;; A LDeriv is diff --git a/collects/macro-debugger/model/deriv-parser.ss b/collects/macro-debugger/model/deriv-parser.ss index cbe0417..029041c 100644 --- a/collects/macro-debugger/model/deriv-parser.ss +++ b/collects/macro-debugger/model/deriv-parser.ss @@ -288,8 +288,8 @@ [() (make mod:skip)] ;; provide: special - [(enter-prim prim-provide (? ModuleProvide/Inner) exit-prim) - (make mod:cons (make p:provide $1 $4 null $3))] + [(enter-prim prim-provide (? ModuleProvide/Inner) ! exit-prim) + (make mod:cons (make p:provide $1 $5 null #f $3 $4))] ;; normal: expand completely [((? EE)) (make mod:cons $1)] @@ -298,10 +298,10 @@ (make mod:lift $1 #f $2)]) (ModuleProvide/Inner - [() #f] - [(!!) $1] + (#:skipped null) + [() null] [((? EE) (? ModuleProvide/Inner)) - $2]) + (cons $1 $2)]) ;; Definitions (PrimDefineSyntaxes @@ -442,7 +442,7 @@ (PrimProvide (#:args e1 e2 rs) - [(prim-provide !) (make p:provide e1 e2 rs $2)]) + [(prim-provide !) (make p:provide e1 e2 rs $2 null #f)]) (PrimVarRef (#:args e1 e2 rs) diff --git a/collects/macro-debugger/model/reductions.ss b/collects/macro-debugger/model/reductions.ss index 67671a7..8ded0fb 100644 --- a/collects/macro-debugger/model/reductions.ss +++ b/collects/macro-debugger/model/reductions.ss @@ -194,9 +194,23 @@ [#:pattern (?top . ?var)] [#:learn (list #'?var)])] - [(Wrap p:provide (e1 e2 rs ?1)) - (R [! ?1] - [#:walk e2 'provide])] + [(Wrap p:provide (e1 e2 rs ?1 inners ?2)) + (let ([wrapped-inners + (for/list ([inner inners]) + (match inner + [(Wrap deriv (e1 e2)) + (make local-expansion e1 e2 + #f e1 inner #f e2 #f)]))]) + (R [! ?1] + [#:pattern ?form] + [#:pass1] + [#:left-foot] + [LocalActions ?form wrapped-inners] + [! ?2] + [#:pass2] + [#:set-syntax e2] + [#:step 'provide] + [#:set-syntax e2]))] [(Wrap p:stop (e1 e2 rs ?1)) (R [! ?1])]