Use emit-local-step with match expanders.
This commit is contained in:
parent
490361c0fc
commit
4ac05ce5bd
|
@ -4,6 +4,7 @@
|
||||||
syntax/boundmap
|
syntax/boundmap
|
||||||
syntax/stx
|
syntax/stx
|
||||||
scheme/struct-info
|
scheme/struct-info
|
||||||
|
macro-debugger/emit
|
||||||
"patterns.rkt"
|
"patterns.rkt"
|
||||||
"compiler.rkt")
|
"compiler.rkt")
|
||||||
|
|
||||||
|
@ -135,18 +136,19 @@
|
||||||
;; produces a parsed pattern
|
;; produces a parsed pattern
|
||||||
(define (match-expander-transform parse/cert cert expander stx accessor
|
(define (match-expander-transform parse/cert cert expander stx accessor
|
||||||
error-msg)
|
error-msg)
|
||||||
(let* ([expander (syntax-local-value (cert expander))]
|
(let* ([expander* (syntax-local-value (cert expander))]
|
||||||
[transformer (accessor expander)]
|
[transformer (accessor expander*)]
|
||||||
[transformer (if (set!-transformer? transformer)
|
[transformer (if (set!-transformer? transformer)
|
||||||
(set!-transformer-procedure transformer)
|
(set!-transformer-procedure transformer)
|
||||||
transformer)])
|
transformer)])
|
||||||
(unless transformer (raise-syntax-error #f error-msg expander))
|
(unless transformer (raise-syntax-error #f error-msg expander*))
|
||||||
(let* ([introducer (make-syntax-introducer)]
|
(let* ([introducer (make-syntax-introducer)]
|
||||||
[certifier (match-expander-certifier expander)]
|
[certifier (match-expander-certifier expander*)]
|
||||||
[mstx (introducer (syntax-local-introduce stx))]
|
[mstx (introducer (syntax-local-introduce stx))]
|
||||||
[mresult (transformer mstx)]
|
[mresult (transformer mstx)]
|
||||||
[result (syntax-local-introduce (introducer mresult))]
|
[result (syntax-local-introduce (introducer mresult))]
|
||||||
[cert* (lambda (id) (certifier (cert id) #f introducer))])
|
[cert* (lambda (id) (certifier (cert id) #f introducer))])
|
||||||
|
(emit-local-step stx result #:id expander)
|
||||||
(parse/cert result cert*))))
|
(parse/cert result cert*))))
|
||||||
|
|
||||||
;; raise an error, blaming stx
|
;; raise an error, blaming stx
|
||||||
|
|
Loading…
Reference in New Issue
Block a user