parse-here doesn't consume an extra line now, and it checks that once a line has started there are no extra characters

db4
Doug Coleman 2011-09-03 12:17:30 -05:00
parent dec129bb29
commit 604dbf4df7
2 changed files with 33 additions and 6 deletions

View File

@ -1,4 +1,4 @@
USING: accessors eval multiline tools.test ;
USING: accessors eval multiline sequences tools.test ;
IN: multiline.tests
STRING: test-it
@ -78,3 +78,24 @@ lolaol ] unit-test
[ "whoa" ]
[ DELIMITED: factor blows my mind
whoafactor blows my mind ] unit-test
<<
SYNTAX: MULTILINE-LITERAL: parse-here suffix! ;
>>
[ { "bar" } ]
[
CONSTANT: foo { MULTILINE-LITERAL:
bar
;
} foo
] unit-test
! Make sure parse-here fails if extra crap appears on the first line
[
"CONSTANT: foo { MULTILINE-LITERAL: asdfasfdasdfas
bar
;
}" eval
] must-fail

View File

@ -7,6 +7,10 @@ IN: multiline
ERROR: bad-heredoc identifier ;
<PRIVATE
: rest-of-line ( -- seq )
lexer get [ line-text>> ] [ column>> ] bi tail ;
: next-line-text ( -- str )
lexer get dup next-line line-text>> ;
@ -16,11 +20,16 @@ ERROR: bad-heredoc identifier ;
[ drop lexer get next-line ]
[ % "\n" % (parse-here) ] if
] [ ";" unexpected-eof ] if* ;
PRIVATE>
ERROR: text-found-before-eol string ;
: parse-here ( -- str )
[ (parse-here) ] "" make but-last
lexer get next-line ;
[
rest-of-line dup [ drop ] [ text-found-before-eol ] if-empty
(parse-here)
] "" make but-last ;
SYNTAX: STRING:
CREATE-WORD
@ -48,9 +57,6 @@ SYNTAX: STRING:
change-column drop
] "" make ;
: rest-of-line ( -- seq )
lexer get [ line-text>> ] [ column>> ] bi tail ;
:: advance-same-line ( text -- )
lexer get [ text length + ] change-column drop ;