mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-19 05:39:18 +02:00
parse-seq should check for ignored value in fast paths as well (issue #757)
This commit is contained in:
parent
2d21500185
commit
5b8e196e0f
2 changed files with 16 additions and 2 deletions
|
@ -53,6 +53,15 @@
|
|||
(test-assert (parse f "aab"))
|
||||
(test-error (parse-fully f "aab")))
|
||||
|
||||
(let ((f (parse-seq (parse-char #\a)
|
||||
(parse-ignore (parse-char #\b)))))
|
||||
(test '(#\a) (parse f "ab")))
|
||||
|
||||
(let ((f (parse-seq (parse-char #\a)
|
||||
(parse-ignore (parse-char #\b))
|
||||
(parse-char #\c))))
|
||||
(test '(#\a #\c) (parse f "abc")))
|
||||
|
||||
;; grammars
|
||||
|
||||
(let ()
|
||||
|
|
|
@ -399,7 +399,9 @@
|
|||
((null? (cdr o))
|
||||
(let ((f (car o)))
|
||||
(lambda (s i sk fk)
|
||||
(f s i (lambda (r s i fk) (sk (list r) s i fk)) fk))))
|
||||
(f s i (lambda (r s i fk)
|
||||
(sk (if (eq? r ignored-value) '() (list r)) s i fk))
|
||||
fk))))
|
||||
(else
|
||||
(let* ((f (car o))
|
||||
(o (cdr o))
|
||||
|
@ -408,7 +410,10 @@
|
|||
(g (if (pair? o)
|
||||
(apply parse-seq g o)
|
||||
(lambda (s i sk fk)
|
||||
(g s i (lambda (r s i fk) (sk (list r) s i fk)) fk)))))
|
||||
(g s i (lambda (r s i fk)
|
||||
(sk (if (eq? r ignored-value) '() (list r))
|
||||
s i fk))
|
||||
fk)))))
|
||||
(lambda (source index sk fk)
|
||||
(f source
|
||||
index
|
||||
|
|
Loading…
Add table
Reference in a new issue