diff --git a/collects/mzlib/private/match/convert-pat.ss b/collects/mzlib/private/match/convert-pat.ss index a3c1dceac2..49c092dce4 100644 --- a/collects/mzlib/private/match/convert-pat.ss +++ b/collects/mzlib/private/match/convert-pat.ss @@ -1,7 +1,8 @@ (module convert-pat mzscheme (require "match-error.ss" "match-helper.ss" - "match-expander-struct.ss") + "match-expander-struct.ss" + "observe-step.ss") (require-for-template mzscheme "match-error.ss") @@ -84,13 +85,15 @@ [xformer (match-expander-match-xform expander)]) (if (not xformer) (match:syntax-err #'expander - "This expander only works with plt-match.") - (let ([introducer (make-syntax-introducer)] - [certifier (match-expander-certifier expander)]) - (convert-pat/cert - (introducer (xformer (introducer stx))) - (lambda (id) - (certifier (cert id) #f introducer))))))] + "This expander only works with plt-match.ss.") + (let* ([introducer (make-syntax-introducer)] + [certifier (match-expander-certifier expander)] + [mstx (introducer stx)] + [mresult (xformer mstx)] + [result (introducer mresult)] + [cert* (lambda (id) (certifier (cert id) #f introducer))]) + (observe-step stx mstx mresult result) + (convert-pat/cert result cert*))))] [p (dot-dot-k? (syntax-object->datum #'p)) stx] diff --git a/collects/mzlib/private/match/observe-step.ss b/collects/mzlib/private/match/observe-step.ss new file mode 100644 index 0000000000..bb2cba7f0e --- /dev/null +++ b/collects/mzlib/private/match/observe-step.ss @@ -0,0 +1,43 @@ +(module observe-step mzscheme + (provide observe-step) + + (define current-expand-observe + (dynamic-require '#%expobs 'current-expand-observe)) + + (define (observe-step pre mpre mpost post) + (define (call-obs ev . args) + (let ([obs (current-expand-observe)]) + (if obs + (let ([evn (case ev + [(visit) 0] + [(enter-prim) 6] + [(prim-stop) 100] + [(exit-prim) 7] + [(return) 2] + [(macro-enter) 8] + [(macro-exit) 9] + [(macro-pre) 21] + [(macro-post) 22] + [(local-enter) 130] + [(local-exit) 131] + [(local-pre) 132] + [(local-post) 133])]) + (apply obs evn args))))) + + (call-obs 'local-enter pre) + (call-obs 'local-pre pre) + (call-obs 'visit pre) + (call-obs 'macro-enter pre) + (call-obs 'macro-pre mpre) + (call-obs 'macro-post mpost) + (call-obs 'macro-exit post) + (call-obs 'visit post) + (call-obs 'enter-prim post) + (call-obs 'prim-stop #f) + (call-obs 'exit-prim post) + (call-obs 'return post) + (call-obs 'local-post post) + (call-obs 'local-exit post) + ) + + ) \ No newline at end of file diff --git a/collects/mzlib/private/match/simplify-patterns.ss b/collects/mzlib/private/match/simplify-patterns.ss index 558e48f4aa..fac49fa7d7 100644 --- a/collects/mzlib/private/match/simplify-patterns.ss +++ b/collects/mzlib/private/match/simplify-patterns.ss @@ -11,7 +11,8 @@ "update-binding-counts.scm" "reorder-tests.scm" "match-expander-struct.ss" - "render-helpers.ss") + "render-helpers.ss" + "observe-step.ss") (require "render-sigs.ss" (lib "unitsig.ss")) @@ -26,44 +27,6 @@ "match-helper.ss") - (define current-expand-observe - (dynamic-require '#%expobs 'current-expand-observe)) - - (define (observe-step pre mpre mpost post) - (define (call-obs ev . args) - (let ([obs (current-expand-observe)]) - (if obs - (let ([evn (case ev - [(visit) 0] - [(enter-prim) 6] - [(prim-stop) 100] - [(exit-prim) 7] - [(return) 2] - [(macro-enter) 8] - [(macro-exit) 9] - [(macro-pre) 21] - [(macro-post) 22] - [(local-enter) 130] - [(local-exit) 131] - [(local-pre) 132] - [(local-post) 133])]) - (apply obs evn args))))) - - (call-obs 'local-enter pre) - (call-obs 'local-pre pre) - (call-obs 'visit pre) - (call-obs 'macro-enter pre) - (call-obs 'macro-pre mpre) - (call-obs 'macro-post mpost) - (call-obs 'macro-exit post) - (call-obs 'visit post) - (call-obs 'enter-prim post) - (call-obs 'prim-stop #f) - (call-obs 'exit-prim post) - (call-obs 'return post) - (call-obs 'local-post post) - (call-obs 'local-exit post) - ) (provide simplify)