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 ]