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-opaque
|
||||
|
||||
#|
|
||||
ps->stx+index
|
||||
|#
|
||||
ps-context-syntax
|
||||
ps-difference
|
||||
|
||||
|
@ -86,7 +84,8 @@ Interpretation: Inner PS structures are applied first.
|
|||
(match ps
|
||||
[(cons (? syntax? stx) _) stx]
|
||||
[(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)]
|
||||
[(vector? d) (vector->list d)]
|
||||
[(box? d) (unbox d)]
|
||||
|
|
|
@ -51,16 +51,20 @@ complicated.
|
|||
[ess (map normalize-expectstack ess)]
|
||||
[ess (remove-duplicates 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
|
||||
(define (report/expectstack es)
|
||||
;; report/expectstack : ExpectStack syntax nat -> Report
|
||||
(define (report/expectstack es stx index)
|
||||
(let ([top-frame (and (pair? es) (car es))])
|
||||
(cond [(not top-frame)
|
||||
(report "bad syntax" #f)]
|
||||
[else
|
||||
(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 '()))
|
||||
(syntax-case frame-stx ()
|
||||
[(one . more)
|
||||
|
@ -72,7 +76,7 @@ complicated.
|
|||
[else
|
||||
(report/expects (list frame-expect) frame-stx)]))])))
|
||||
|
||||
;; report/expects : (listof Expect) -> Report
|
||||
;; report/expects : (listof Expect) syntax -> Report
|
||||
(define (report/expects expects frame-stx)
|
||||
(report (join-sep (for/list ([expect expects])
|
||||
(prose-for-expect expect))
|
||||
|
|
Loading…
Reference in New Issue
Block a user