From b4d3473d5eb2a01e1707be0c2af757224a302927 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 3 Nov 2008 21:01:50 -0600 Subject: [PATCH] Tuple parsing didn't handle line breaks properly; if scan returns f, must throw unexpected-eof --- core/classes/tuple/parser/parser-tests.factor | 33 +++++++++++++++++++ core/classes/tuple/parser/parser.factor | 11 +++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/core/classes/tuple/parser/parser-tests.factor b/core/classes/tuple/parser/parser-tests.factor index 6b9a953ab9..22b5784269 100644 --- a/core/classes/tuple/parser/parser-tests.factor +++ b/core/classes/tuple/parser/parser-tests.factor @@ -109,3 +109,36 @@ TUPLE: parsing-corner-case x ; "}" } "\n" join eval ] unit-test + +[ T{ parsing-corner-case f 3 } ] [ + { + "USE: classes.tuple.parser.tests" + "T{ parsing-corner-case" + " { x 3 }" + "}" + } "\n" join eval +] unit-test + +[ T{ parsing-corner-case f 3 } ] [ + { + "USE: classes.tuple.parser.tests" + "T{ parsing-corner-case {" + " x 3 }" + "}" + } "\n" join eval +] unit-test + + +[ + { + "USE: classes.tuple.parser.tests T{ parsing-corner-case" + " { x 3 }" + } "\n" join eval +] [ error>> unexpected-eof? ] must-fail-with + +[ + { + "USE: classes.tuple.parser.tests T{ parsing-corner-case {" + " x 3 }" + } "\n" join eval +] [ error>> unexpected-eof? ] must-fail-with diff --git a/core/classes/tuple/parser/parser.factor b/core/classes/tuple/parser/parser.factor index 7888635641..659195edbf 100644 --- a/core/classes/tuple/parser/parser.factor +++ b/core/classes/tuple/parser/parser.factor @@ -60,14 +60,19 @@ ERROR: invalid-slot-name name ; dup check-duplicate-slots 3dup check-slot-shadowing ; -: parse-slot-value ( -- ) - scan scan-object 2array , scan "}" assert= ; - ERROR: bad-literal-tuple ; +: parse-slot-value ( -- ) + scan scan-object 2array , scan { + { f [ unexpected-eof ] } + { "}" [ ] } + [ bad-literal-tuple ] + } case ; + : (parse-slot-values) ( -- ) parse-slot-value scan { + { f [ unexpected-eof ] } { "{" [ (parse-slot-values) ] } { "}" [ ] } [ bad-literal-tuple ]