From b25a17b148443ae9f28c73f844f9534fd357cfb9 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 8 Oct 2018 20:54:06 +0100 Subject: [PATCH] Improve error recovery --- implementations/racket/preserves/main.rkt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/implementations/racket/preserves/main.rkt b/implementations/racket/preserves/main.rkt index bdaa1c2..720cd17 100644 --- a/implementations/racket/preserves/main.rkt +++ b/implementations/racket/preserves/main.rkt @@ -289,8 +289,9 @@ (define k (read-value)) (skip-whitespace) (match (peek-char i) - [#\: (when (set? acc) (parse-error "Unexpected key/value separator in set")) - (read-char i) + [#\: (read-char i) + (when (set? acc) + (parse-error "Unexpected key/value separator in set")) (define v (read-value)) (hash-set (or acc (hash)) k v)] [_ (when (hash? acc) (parse-error "Missing expected key/value separator")) @@ -306,7 +307,9 @@ (? char? (or #\( #\) #\{ #\} #\[ #\] #\" #\; #\, #\# #\: (== PIPE) (? char-whitespace?)))) - (string->symbol (list->string (reverse acc)))] + (if (null? acc) + (parse-error "Invalid character ~v at start of value; skipping" (read-char i)) + (string->symbol (list->string (reverse acc))))] [_ (read-raw-symbol (cons (read-char i) acc))])) (define (read-base64-binary acc) @@ -484,7 +487,7 @@ (read-base64-binary '())] [_ (parse-error "Invalid preserve value")])] - [#\: (parse-error "Unexpected key/value separator between items")] + [#\: (read-char i) (parse-error "Unexpected key/value separator between items")] [_ (read-raw-symbol '())]))) (read-value))