modern: fix regression for names like CC>n.

locals-and-roots
Doug Coleman 2016-06-22 00:03:08 -07:00
parent 69997a3f21
commit f89f5312ae
3 changed files with 12 additions and 2 deletions

View File

@ -116,10 +116,17 @@ ERROR: unexpected-end n string ;
n' >>n drop n' >>n drop
n' string' slice ch ; n' string' slice ch ;
! rollback only n, other state is not rolled back
:: with-lexer-rollback ( lexer quot -- )
lexer n>> :> n
lexer quot call lexer n >>n drop ; inline
: merge-lex-til-whitespace ( lexer slice -- slice' ) : merge-lex-til-whitespace ( lexer slice -- slice' )
[ lex-til-whitespace drop 2nip ] dip merge-slices ; [ lex-til-whitespace drop 2nip ] dip merge-slices ;
: peek-merge-til-whitespace ( lexer slice -- slice' )
'[ _ merge-lex-til-whitespace ] with-lexer-rollback ;
:: slice-til-eol ( n string -- n'/f string slice/f ch/f ) :: slice-til-eol ( n string -- n'/f string slice/f ch/f )
n [ n [

View File

@ -452,7 +452,8 @@ ERROR: mismatched-terminator lexer slice ;
] if ; ] if ;
: gt-terminator ( lexer slice -- slice/f ) : gt-terminator ( lexer slice -- slice/f )
dup top-level-greater-than? [ 2dup peek-merge-til-whitespace
top-level-greater-than? [
2dup [ dup peek-tag ] dip delimiters-match? [ 2dup [ dup peek-tag ] dip delimiters-match? [
nip terminator-literal make-tag-class-literal nip terminator-literal make-tag-class-literal
] [ ] [

View File

@ -81,3 +81,5 @@ in: modern.out.tests
{ t } [ "->[ ]" rewrite-same-string ] unit-test { t } [ "->[ ]" rewrite-same-string ] unit-test
{ t } [ "abc>[ ]" rewrite-same-string ] unit-test { t } [ "abc>[ ]" rewrite-same-string ] unit-test
{ t } [ "CC>n" rewrite-same-string ] unit-test
{ t } [ "CC>CC" rewrite-same-string ] unit-test