Paren expr

This commit is contained in:
Aleksey Kladov 2018-08-05 17:19:03 +03:00
parent ed96926df7
commit 8cf962f1f5
5 changed files with 64 additions and 1 deletions

View File

@ -138,6 +138,7 @@ Grammar(
// atoms
"TUPLE_EXPR",
"PAREN_EXPR",
"PATH_EXPR",
"LAMBDA_EXPR",
"IF_EXPR",

View File

@ -60,12 +60,29 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<CompletedMark
Some(done)
}
// test tuple_expr
// fn foo() {
// ();
// (1);
// (1,);
// }
fn tuple_expr(p: &mut Parser) -> CompletedMarker {
assert!(p.at(L_PAREN));
let m = p.start();
p.expect(L_PAREN);
let mut saw_comma = false;
let mut saw_expr = false;
while !p.at(EOF) && !p.at(R_PAREN) {
saw_expr = true;
expr(p);
if !p.at(R_PAREN) {
saw_comma = true;
p.expect(COMMA);
}
}
p.expect(R_PAREN);
m.complete(p, TUPLE_EXPR)
m.complete(p, if saw_expr && !saw_comma { PAREN_EXPR } else { TUPLE_EXPR })
}
// test lambda_expr

View File

@ -128,6 +128,7 @@ pub enum SyntaxKind {
STRUCT_PAT,
TUPLE_PAT,
TUPLE_EXPR,
PAREN_EXPR,
PATH_EXPR,
LAMBDA_EXPR,
IF_EXPR,
@ -353,6 +354,7 @@ impl SyntaxKind {
STRUCT_PAT => &SyntaxInfo { name: "STRUCT_PAT" },
TUPLE_PAT => &SyntaxInfo { name: "TUPLE_PAT" },
TUPLE_EXPR => &SyntaxInfo { name: "TUPLE_EXPR" },
PAREN_EXPR => &SyntaxInfo { name: "PAREN_EXPR" },
PATH_EXPR => &SyntaxInfo { name: "PATH_EXPR" },
LAMBDA_EXPR => &SyntaxInfo { name: "LAMBDA_EXPR" },
IF_EXPR => &SyntaxInfo { name: "IF_EXPR" },

View File

@ -0,0 +1,5 @@
fn foo() {
();
(1);
(1,);
}

View File

@ -0,0 +1,38 @@
FILE@[0; 40)
FN_ITEM@[0; 40)
FN_KW@[0; 2)
NAME@[2; 6)
WHITESPACE@[2; 3)
IDENT@[3; 6) "foo"
PARAM_LIST@[6; 9)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 40)
L_CURLY@[9; 10)
EXPR_STMT@[10; 23)
TUPLE_EXPR@[10; 17)
WHITESPACE@[10; 15)
L_PAREN@[15; 16)
R_PAREN@[16; 17)
SEMI@[17; 18)
WHITESPACE@[18; 23)
EXPR_STMT@[23; 32)
PAREN_EXPR@[23; 26)
L_PAREN@[23; 24)
LITERAL@[24; 25)
INT_NUMBER@[24; 25) "1"
R_PAREN@[25; 26)
SEMI@[26; 27)
WHITESPACE@[27; 32)
EXPR_STMT@[32; 38)
TUPLE_EXPR@[32; 36)
L_PAREN@[32; 33)
LITERAL@[33; 34)
INT_NUMBER@[33; 34) "1"
COMMA@[34; 35)
R_PAREN@[35; 36)
SEMI@[36; 37)
WHITESPACE@[37; 38)
R_CURLY@[38; 39)
WHITESPACE@[39; 40)