Gracefully handle the case where the token stream just contains the END token and an error occurs.

original commit: 69ae77a253fadbcb4ad4e87514e18f2a01b97068
tokens
Danny Yoo 11 years ago
parent 2fd35df83a
commit cdb627642e

@ -744,19 +744,31 @@
val val
(next success-k fail-k max-depth tasks)))] (next success-k fail-k max-depth tasks)))]
[fail-k (lambda (max-depth tasks) [fail-k (lambda (max-depth tasks)
(let ([bad-tok (list-ref tok-list (cond
(min (sub1 (length tok-list)) [(null? tok-list)
max-depth))])
(if error-proc (if error-proc
(error-proc #t (error-proc #t
(tok-orig-name bad-tok) 'no-tokens
(tok-val bad-tok) #f
(tok-start bad-tok) (make-position #f #f #f)
(tok-end bad-tok)) (make-position #f #f #f))
(error (error
'cfg-parse 'cfg-parse
"failed at ~a" "no tokens"))]
(tok-val bad-tok)))))]) [else
(let ([bad-tok (list-ref tok-list
(min (sub1 (length tok-list))
max-depth))])
(if error-proc
(error-proc #t
(tok-orig-name bad-tok)
(tok-val bad-tok)
(tok-start bad-tok)
(tok-end bad-tok))
(error
'cfg-parse
"failed at ~a"
(tok-val bad-tok))))]))])
(#,start tok-list (#,start tok-list
;; we simulate a token at the very beginning with zero width ;; we simulate a token at the very beginning with zero width
;; for use with the position-generating code (*-start-pos, *-end-pos). ;; for use with the position-generating code (*-start-pos, *-end-pos).

Loading…
Cancel
Save