syntax/parse: pinpoint stx from progress, not expectstack
This commit is contained in:
parent
68e7cda162
commit
95d690d550
|
@ -12,9 +12,7 @@
|
||||||
ps-add-unpstruct
|
ps-add-unpstruct
|
||||||
ps-add-opaque
|
ps-add-opaque
|
||||||
|
|
||||||
#|
|
|
||||||
ps->stx+index
|
ps->stx+index
|
||||||
|#
|
|
||||||
ps-context-syntax
|
ps-context-syntax
|
||||||
ps-difference
|
ps-difference
|
||||||
|
|
||||||
|
@ -86,7 +84,8 @@ Interpretation: Inner PS structures are applied first.
|
||||||
(match ps
|
(match ps
|
||||||
[(cons (? syntax? stx) _) stx]
|
[(cons (? syntax? stx) _) stx]
|
||||||
[(cons 'car parent)
|
[(cons 'car parent)
|
||||||
(let ([d (syntax-e (interp parent))])
|
(let* ([d (interp parent)]
|
||||||
|
[d (if (syntax? d) (syntax-e d) d)])
|
||||||
(cond [(pair? d) (car d)]
|
(cond [(pair? d) (car d)]
|
||||||
[(vector? d) (vector->list d)]
|
[(vector? d) (vector->list d)]
|
||||||
[(box? d) (unbox d)]
|
[(box? d) (unbox d)]
|
||||||
|
|
|
@ -51,16 +51,20 @@ complicated.
|
||||||
[ess (map normalize-expectstack ess)]
|
[ess (map normalize-expectstack ess)]
|
||||||
[ess (remove-duplicates ess)]
|
[ess (remove-duplicates ess)]
|
||||||
[ess (simplify-common-expectstacks ess)])
|
[ess (simplify-common-expectstacks ess)])
|
||||||
(map report/expectstack ess)))
|
(let-values ([(stx index) (ps->stx+index (failure-progress (car fs)))])
|
||||||
|
(for/list ([es (in-list ess)])
|
||||||
|
(report/expectstack es stx index)))))
|
||||||
|
|
||||||
;; report/expectstack : ExpectStack -> Report
|
;; report/expectstack : ExpectStack syntax nat -> Report
|
||||||
(define (report/expectstack es)
|
(define (report/expectstack es stx index)
|
||||||
(let ([top-frame (and (pair? es) (car es))])
|
(let ([top-frame (and (pair? es) (car es))])
|
||||||
(cond [(not top-frame)
|
(cond [(not top-frame)
|
||||||
(report "bad syntax" #f)]
|
(report "bad syntax" #f)]
|
||||||
[else
|
[else
|
||||||
(let ([frame-expect (and top-frame (car top-frame))]
|
(let ([frame-expect (and top-frame (car top-frame))]
|
||||||
[frame-stx (and top-frame (cdr top-frame))])
|
[frame-stx
|
||||||
|
(let-values ([(x cx) (stx-list-drop/cx stx stx index)])
|
||||||
|
(datum->syntax cx x cx))])
|
||||||
(cond [(equal? frame-expect (expect:atom '()))
|
(cond [(equal? frame-expect (expect:atom '()))
|
||||||
(syntax-case frame-stx ()
|
(syntax-case frame-stx ()
|
||||||
[(one . more)
|
[(one . more)
|
||||||
|
@ -72,7 +76,7 @@ complicated.
|
||||||
[else
|
[else
|
||||||
(report/expects (list frame-expect) frame-stx)]))])))
|
(report/expects (list frame-expect) frame-stx)]))])))
|
||||||
|
|
||||||
;; report/expects : (listof Expect) -> Report
|
;; report/expects : (listof Expect) syntax -> Report
|
||||||
(define (report/expects expects frame-stx)
|
(define (report/expects expects frame-stx)
|
||||||
(report (join-sep (for/list ([expect expects])
|
(report (join-sep (for/list ([expect expects])
|
||||||
(prose-for-expect expect))
|
(prose-for-expect expect))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user