From 42c56a2de1e22447016bb7f7ddad94725da226f0 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Mon, 4 Apr 2016 14:48:05 -0700 Subject: [PATCH] strings.parser: better string error messages. --- core/strings/parser/parser.factor | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/core/strings/parser/parser.factor b/core/strings/parser/parser.factor index 6f7e0f1bec..17259bd6de 100644 --- a/core/strings/parser/parser.factor +++ b/core/strings/parser/parser.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2008, 2009 Slava Pestov, Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors arrays assocs combinators kernel kernel.private -lexer math math.parser namespaces sbufs sequences splitting -strings ; +USING: accessors assocs combinators continuations kernel +kernel.private lexer math math.parser namespaces sbufs sequences +splitting strings ; IN: strings.parser ERROR: bad-escape char ; @@ -151,12 +151,21 @@ DEFER: (parse-full-string) (parse-full-string) ] if* ] [ - throw-unexpected-eof + "Unterminated string" throw ] if ; +: rewind-on-error ( quot -- ) + lexer get [ line>> ] [ line-text>> ] [ column>> ] tri + [ + lexer get [ column<< ] [ line-text<< ] [ line<< ] tri + rethrow + ] 3curry recover ; inline + PRIVATE> : parse-full-string ( -- str ) - SBUF" " clone [ - lexer get (parse-full-string) - ] keep unescape-string ; + [ + SBUF" " clone [ + lexer get (parse-full-string) + ] keep unescape-string + ] rewind-on-error ;