diff --git a/core/parser/parser-tests.factor b/core/parser/parser-tests.factor index 267fcb3eb7..55ea673c3c 100644 --- a/core/parser/parser-tests.factor +++ b/core/parser/parser-tests.factor @@ -35,6 +35,13 @@ unit-test eval( -- ) "USE: parser.tests hello" eval( -- string ) ] unit-test +[ "IN: parser.tests : \" ( -- n ) 123 ;" eval( -- ) ] +[ error>> invalid-word-name? ] must-fail-with +[ "IN: parser.tests : \"asdf ( -- n ) 123 ;" eval( -- ) ] +[ error>> invalid-word-name? ] must-fail-with +[ "IN: parser.tests : 123 ( -- n ) 123 ;" eval( -- ) ] +[ error>> invalid-word-name? ] must-fail-with + [ ] [ "! This is a comment, people." eval( -- ) ] unit-test diff --git a/core/parser/parser.factor b/core/parser/parser.factor index 266f4c77ec..bba9bfe543 100644 --- a/core/parser/parser.factor +++ b/core/parser/parser.factor @@ -71,11 +71,12 @@ ERROR: number-expected ; : scan-number ( -- number ) (scan-token) parse-number ; +ERROR: invalid-word-name string ; + : scan-word-name ( -- string ) scan-token - dup string>number [ - "Word names cannot be numbers" throw - ] when ; + dup "\"" = [ t ] [ dup string>number ] if + [ invalid-word-name ] when ; : scan-new ( -- word ) scan-word-name create-in ;