diff --git a/lib/chibi/parse-test.sld b/lib/chibi/parse-test.sld index 48d468d5..f39aefff 100644 --- a/lib/chibi/parse-test.sld +++ b/lib/chibi/parse-test.sld @@ -21,6 +21,7 @@ (test-not (parse parse-nothing "")) (test-not (parse parse-nothing "a")) + (test-error (parse-fully parse-nothing "")) (test-not (parse (parse-char #\a) "")) (test-assert (parse-fully (parse-char #\a) "a")) diff --git a/lib/chibi/parse/parse.scm b/lib/chibi/parse/parse.scm index 514c85ba..defc6cfa 100644 --- a/lib/chibi/parse/parse.scm +++ b/lib/chibi/parse/parse.scm @@ -167,16 +167,19 @@ ;; location (if (%parse-stream-tail s) (parse-stream-debug-info (%parse-stream-tail s) i) - (let* ((line-info - (parse-stream-count-lines s (parse-stream-max-char s))) - (line (+ (parse-stream-line s) (car line-info))) - (col (if (zero? (car line-info)) - (+ (parse-stream-column s) (cadr line-info)) - (cadr line-info))) - (from (car (cddr line-info))) - (to (parse-stream-end-of-line s (+ from 1))) - (str (parse-stream-substring s from s to))) - (list line col str)))) + (let ((max-char (parse-stream-max-char s))) + (if (< max-char 0) + (list 0 0 "") + (let* ((line-info + (parse-stream-count-lines s max-char)) + (line (+ (parse-stream-line s) (car line-info))) + (col (if (zero? (car line-info)) + (+ (parse-stream-column s) (cadr line-info)) + (cadr line-info))) + (from (car (cddr line-info))) + (to (parse-stream-end-of-line s (+ from 1))) + (str (parse-stream-substring s from s to))) + (list line col str)))))) (define (parse-stream-next-source source i) (if (>= (+ i 1) (vector-length (parse-stream-buffer source)))