Don't get stuck in macros

This commit is contained in:
Aleksey Kladov 2018-09-08 10:28:53 +03:00
parent bd3a26493f
commit a0a347eac9
3 changed files with 54 additions and 1 deletions

View File

@ -355,7 +355,12 @@ pub(super) fn token_tree(p: &mut Parser) {
while !p.at(EOF) && !p.at(closing_paren_kind) {
match p.current() {
L_CURLY | L_PAREN | L_BRACK => token_tree(p),
R_CURLY | R_PAREN | R_BRACK => p.err_and_bump("unmatched brace"),
R_CURLY => {
p.error("unmatched `}`");
m.complete(p, TOKEN_TREE);
return;
}
R_PAREN | R_BRACK => p.err_and_bump("unmatched brace"),
_ => p.bump()
}
};

View File

@ -0,0 +1,5 @@
fn main() {
foo! (
bar, "baz", 1, 2.0
} //~ ERROR incorrect close delimiter
}

View File

@ -0,0 +1,43 @@
ROOT@[0; 94)
FN_DEF@[0; 55)
FN_KW@[0; 2)
WHITESPACE@[2; 3)
NAME@[3; 7)
IDENT@[3; 7) "main"
PARAM_LIST@[7; 9)
L_PAREN@[7; 8)
R_PAREN@[8; 9)
WHITESPACE@[9; 10)
BLOCK@[10; 55)
L_CURLY@[10; 11)
WHITESPACE@[11; 16)
MACRO_CALL@[16; 49)
PATH@[16; 19)
PATH_SEGMENT@[16; 19)
NAME_REF@[16; 19)
IDENT@[16; 19) "foo"
EXCL@[19; 20)
WHITESPACE@[20; 21)
TOKEN_TREE@[21; 49)
L_PAREN@[21; 22)
WHITESPACE@[22; 31)
IDENT@[31; 34) "bar"
COMMA@[34; 35)
WHITESPACE@[35; 36)
STRING@[36; 41)
COMMA@[41; 42)
WHITESPACE@[42; 43)
INT_NUMBER@[43; 44) "1"
COMMA@[44; 45)
WHITESPACE@[45; 46)
FLOAT_NUMBER@[46; 49) "2.0"
err: `unmatched `}``
WHITESPACE@[49; 54)
R_CURLY@[54; 55)
WHITESPACE@[55; 56)
COMMENT@[56; 91)
WHITESPACE@[91; 92)
err: `unmatched `}``
ERROR@[92; 93)
R_CURLY@[92; 93)
WHITESPACE@[93; 94)