From 7baa54e6b1c65e4881430bf95c9ff975748e7948 Mon Sep 17 00:00:00 2001 From: Ryan Culpepper Date: Wed, 14 Mar 2012 23:07:44 -0600 Subject: [PATCH] macro-debugger: workaround for instrumentation problem in provide The expansion observer is not propagated to expand_all_provides. original commit: e13cce267d4f37242d494fc2dcba6a5ff4408c19 --- collects/macro-debugger/model/deriv-parser.rkt | 13 +++++++++++++ collects/tests/macro-debugger/tests/regression.rkt | 8 ++++++++ 2 files changed, 21 insertions(+) diff --git a/collects/macro-debugger/model/deriv-parser.rkt b/collects/macro-debugger/model/deriv-parser.rkt index 965c488..0bf7b1b 100644 --- a/collects/macro-debugger/model/deriv-parser.rkt +++ b/collects/macro-debugger/model/deriv-parser.rkt @@ -288,10 +288,23 @@ [() #f] [((? CheckImmediateMacro)) $1]) + ;; FIXME: workaround for problem in expander instrumentation: + ;; observer not propagated correctly to expand_all_provides + ;; so local actions that should be within prim-provide's EE + ;; instead appear directly here (Prim#%ModuleBegin + (#:args e1 e2 rs) + [(prim-#%module-begin ! rename-one (? ModuleBegin/Phase) (? Eval)) + (make p:#%module-begin e1 e2 rs $2 $3 $4 + (for/or ([la (in-list $5)]) + (and (local-exn? la) (local-exn-exn la))))]) + #| + ;; restore this version when expander fixed + (Prim#%ModuleBegin-REAL (#:args e1 e2 rs) [(prim-#%module-begin ! rename-one (? ModuleBegin/Phase) !) (make p:#%module-begin e1 e2 rs $2 $3 $4 $5)]) + |# (ModuleBegin/Phase [((? ModulePass1) next-group (? ModulePass2) next-group (? ModulePass3)) diff --git a/collects/tests/macro-debugger/tests/regression.rkt b/collects/tests/macro-debugger/tests/regression.rkt index 6b44695..3b1a1ac 100644 --- a/collects/tests/macro-debugger/tests/regression.rkt +++ b/collects/tests/macro-debugger/tests/regression.rkt @@ -215,4 +215,12 @@ (syntax-local-value (quote-syntax lambda) void)))))]) (check-pred deriv? d) (check-pred ok-node? d))) + (test-case "syntax-local-value in provide" + (let ([d (trace '(module m racket/base + (#%plain-module-begin + (provide (except-out (all-defined-out) x y)) + (define-values (x) 1) + (define-values (y) 2))))]) + (check-pred deriv? d) + (check-pred ok-node? d))) ))