Introduce param & arg list

This commit is contained in:
Aleksey Kladov 2018-07-31 12:32:53 +03:00
parent c244dd1034
commit ff71cb1f6d
30 changed files with 242 additions and 181 deletions

View File

@ -151,5 +151,8 @@ Grammar(
"LIFETIME_PARAM",
"TYPE_PARAM_LIST",
"TYPE_ARG_LIST",
"PARAM_LIST",
"ARG_LIST",
]
)

View File

@ -70,6 +70,13 @@ fn tuple_expr(p: &mut Parser) -> CompletedMarker {
fn call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker {
assert!(p.at(L_PAREN));
let m = lhs.precede(p);
arg_list(p);
m.complete(p, CALL_EXPR)
}
fn arg_list(p: &mut Parser) {
assert!(p.at(L_PAREN));
let m = p.start();
p.bump();
while !p.at(R_PAREN) && !p.at(EOF) {
expr(p);
@ -78,7 +85,7 @@ fn call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker {
}
}
p.eat(R_PAREN);
m.complete(p, CALL_EXPR)
m.complete(p, ARG_LIST);
}
// test path_expr

View File

@ -99,6 +99,7 @@ fn abi(p: &mut Parser) {
// fn d(x: i32, y: ()) {}
fn fn_value_parameters(p: &mut Parser) {
assert!(p.at(L_PAREN));
let m = p.start();
p.bump();
while !p.at(EOF) && !p.at(R_PAREN) {
value_parameter(p);
@ -107,6 +108,7 @@ fn fn_value_parameters(p: &mut Parser) {
}
}
p.expect(R_PAREN);
m.complete(p, PARAM_LIST);
fn value_parameter(p: &mut Parser) {
let m = p.start();

View File

@ -140,6 +140,8 @@ pub enum SyntaxKind {
LIFETIME_PARAM,
TYPE_PARAM_LIST,
TYPE_ARG_LIST,
PARAM_LIST,
ARG_LIST,
// Technical SyntaxKinds: they appear temporally during parsing,
// but never end up in the final tree
#[doc(hidden)]
@ -287,6 +289,8 @@ impl SyntaxKind {
LIFETIME_PARAM => &SyntaxInfo { name: "LIFETIME_PARAM" },
TYPE_PARAM_LIST => &SyntaxInfo { name: "TYPE_PARAM_LIST" },
TYPE_ARG_LIST => &SyntaxInfo { name: "TYPE_ARG_LIST" },
PARAM_LIST => &SyntaxInfo { name: "PARAM_LIST" },
ARG_LIST => &SyntaxInfo { name: "ARG_LIST" },
TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" },
EOF => &SyntaxInfo { name: "EOF" },
}

View File

@ -26,10 +26,11 @@ FILE@[0; 54)
NAME@[21; 25)
WHITESPACE@[21; 22)
IDENT@[22; 25) "foo"
PARAM_LIST@[25; 28)
L_PAREN@[25; 26)
R_PAREN@[26; 27)
BLOCK@[27; 34)
WHITESPACE@[27; 28)
BLOCK@[28; 34)
L_CURLY@[28; 29)
WHITESPACE@[29; 30)
R_CURLY@[30; 31)
@ -48,10 +49,11 @@ FILE@[0; 54)
NAME@[43; 47)
WHITESPACE@[43; 44)
IDENT@[44; 47) "foo"
PARAM_LIST@[47; 50)
L_PAREN@[47; 48)
R_PAREN@[48; 49)
BLOCK@[49; 54)
WHITESPACE@[49; 50)
BLOCK@[50; 54)
L_CURLY@[50; 51)
WHITESPACE@[51; 52)
R_CURLY@[52; 53)

View File

@ -19,6 +19,7 @@ err: `expected item`
NAME@[19; 23)
WHITESPACE@[19; 20)
IDENT@[20; 23) "foo"
PARAM_LIST@[23; 25)
L_PAREN@[23; 24)
R_PAREN@[24; 25)
BLOCK@[25; 29)

View File

@ -4,10 +4,11 @@ FILE@[0; 95)
NAME@[2; 6)
WHITESPACE@[2; 3)
IDENT@[3; 6) "foo"
PARAM_LIST@[6; 9)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
BLOCK@[8; 14)
WHITESPACE@[8; 9)
BLOCK@[9; 14)
L_CURLY@[9; 10)
WHITESPACE@[10; 11)
R_CURLY@[11; 12)
@ -55,10 +56,11 @@ FILE@[0; 95)
NAME@[84; 88)
WHITESPACE@[84; 85)
IDENT@[85; 88) "baz"
PARAM_LIST@[88; 91)
L_PAREN@[88; 89)
R_PAREN@[89; 90)
BLOCK@[90; 95)
WHITESPACE@[90; 91)
BLOCK@[91; 95)
L_CURLY@[91; 92)
WHITESPACE@[92; 93)
R_CURLY@[93; 94)

View File

@ -8,10 +8,11 @@ FILE@[0; 25)
NAME@[15; 19)
WHITESPACE@[15; 16)
IDENT@[16; 19) "foo"
PARAM_LIST@[19; 22)
L_PAREN@[19; 20)
R_PAREN@[20; 21)
BLOCK@[21; 25)
WHITESPACE@[21; 22)
BLOCK@[22; 25)
L_CURLY@[22; 23)
R_CURLY@[23; 24)
WHITESPACE@[24; 25)

View File

@ -6,10 +6,11 @@ FILE@[0; 18)
NAME@[8; 12)
WHITESPACE@[8; 9)
IDENT@[9; 12) "foo"
PARAM_LIST@[12; 15)
L_PAREN@[12; 13)
R_PAREN@[13; 14)
BLOCK@[14; 18)
WHITESPACE@[14; 15)
BLOCK@[15; 18)
L_CURLY@[15; 16)
R_CURLY@[16; 17)
WHITESPACE@[17; 18)

View File

@ -7,10 +7,11 @@ FILE@[0; 19)
NAME@[9; 13)
WHITESPACE@[9; 10)
IDENT@[10; 13) "foo"
PARAM_LIST@[13; 16)
L_PAREN@[13; 14)
R_PAREN@[14; 15)
BLOCK@[15; 19)
WHITESPACE@[15; 16)
BLOCK@[16; 19)
L_CURLY@[16; 17)
R_CURLY@[17; 18)
WHITESPACE@[18; 19)

View File

@ -6,10 +6,11 @@ FILE@[0; 19)
NAME@[9; 13)
WHITESPACE@[9; 10)
IDENT@[10; 13) "foo"
PARAM_LIST@[13; 16)
L_PAREN@[13; 14)
R_PAREN@[14; 15)
BLOCK@[15; 19)
WHITESPACE@[15; 16)
BLOCK@[16; 19)
L_CURLY@[16; 17)
R_CURLY@[17; 18)
WHITESPACE@[18; 19)

View File

@ -11,10 +11,11 @@ FILE@[0; 30)
NAME@[20; 24)
WHITESPACE@[20; 21)
IDENT@[21; 24) "foo"
PARAM_LIST@[24; 27)
L_PAREN@[24; 25)
R_PAREN@[25; 26)
BLOCK@[26; 30)
WHITESPACE@[26; 27)
BLOCK@[27; 30)
L_CURLY@[27; 28)
R_CURLY@[28; 29)
WHITESPACE@[29; 30)

View File

@ -4,6 +4,7 @@ FILE@[0; 33)
NAME@[2; 6)
WHITESPACE@[2; 3)
IDENT@[3; 6) "foo"
PARAM_LIST@[6; 8)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
BLOCK@[8; 11)
@ -23,6 +24,7 @@ FILE@[0; 33)
NAME@[24; 28)
WHITESPACE@[24; 25)
IDENT@[25; 28) "bar"
PARAM_LIST@[28; 30)
L_PAREN@[28; 29)
R_PAREN@[29; 30)
BLOCK@[30; 33)

View File

@ -9,6 +9,7 @@ FILE@[0; 70)
FN_POINTER_TYPE@[8; 13)
WHITESPACE@[8; 9)
FN_KW@[9; 11)
PARAM_LIST@[11; 13)
L_PAREN@[11; 12)
R_PAREN@[12; 13)
SEMI@[13; 14)
@ -25,6 +26,7 @@ FILE@[0; 70)
UNSAFE_KW@[24; 30)
WHITESPACE@[30; 31)
FN_KW@[31; 33)
PARAM_LIST@[33; 35)
L_PAREN@[33; 34)
R_PAREN@[34; 35)
SEMI@[35; 36)
@ -46,6 +48,7 @@ FILE@[0; 70)
STRING@[60; 63)
WHITESPACE@[63; 64)
FN_KW@[64; 66)
PARAM_LIST@[66; 68)
L_PAREN@[66; 67)
R_PAREN@[67; 68)
SEMI@[68; 69)

View File

@ -9,6 +9,7 @@ FILE@[0; 21)
FN_POINTER_TYPE@[8; 19)
WHITESPACE@[8; 9)
FN_KW@[9; 11)
PARAM_LIST@[11; 14)
L_PAREN@[11; 12)
R_PAREN@[12; 13)
WHITESPACE@[13; 14)

View File

@ -17,6 +17,7 @@ FILE@[0; 29)
WHITESPACE@[16; 17)
FN_POINTER_TYPE@[17; 27)
FN_KW@[17; 19)
PARAM_LIST@[19; 22)
L_PAREN@[19; 20)
R_PAREN@[20; 21)
WHITESPACE@[21; 22)

View File

@ -4,10 +4,11 @@ FILE@[0; 67)
NAME@[2; 4)
WHITESPACE@[2; 3)
IDENT@[3; 4) "a"
PARAM_LIST@[4; 7)
L_PAREN@[4; 5)
R_PAREN@[5; 6)
BLOCK@[6; 10)
WHITESPACE@[6; 7)
BLOCK@[7; 10)
L_CURLY@[7; 8)
R_CURLY@[8; 9)
WHITESPACE@[9; 10)
@ -16,6 +17,7 @@ FILE@[0; 67)
NAME@[12; 14)
WHITESPACE@[12; 13)
IDENT@[13; 14) "b"
PARAM_LIST@[14; 23)
L_PAREN@[14; 15)
VALUE_PARAMETER@[15; 21)
BIND_PAT@[15; 16)
@ -29,8 +31,8 @@ FILE@[0; 67)
WHITESPACE@[17; 18)
IDENT@[18; 21) "i32"
R_PAREN@[21; 22)
BLOCK@[22; 26)
WHITESPACE@[22; 23)
BLOCK@[23; 26)
L_CURLY@[23; 24)
R_CURLY@[24; 25)
WHITESPACE@[25; 26)
@ -39,6 +41,7 @@ FILE@[0; 67)
NAME@[28; 30)
WHITESPACE@[28; 29)
IDENT@[29; 30) "c"
PARAM_LIST@[30; 41)
L_PAREN@[30; 31)
VALUE_PARAMETER@[31; 37)
BIND_PAT@[31; 32)
@ -54,8 +57,8 @@ FILE@[0; 67)
COMMA@[37; 38)
WHITESPACE@[38; 39)
R_PAREN@[39; 40)
BLOCK@[40; 44)
WHITESPACE@[40; 41)
BLOCK@[41; 44)
L_CURLY@[41; 42)
R_CURLY@[42; 43)
WHITESPACE@[43; 44)
@ -64,6 +67,7 @@ FILE@[0; 67)
NAME@[46; 48)
WHITESPACE@[46; 47)
IDENT@[47; 48) "d"
PARAM_LIST@[48; 64)
L_PAREN@[48; 49)
VALUE_PARAMETER@[49; 55)
BIND_PAT@[49; 50)
@ -88,8 +92,8 @@ FILE@[0; 67)
L_PAREN@[60; 61)
R_PAREN@[61; 62)
R_PAREN@[62; 63)
BLOCK@[63; 67)
WHITESPACE@[63; 64)
BLOCK@[64; 67)
L_CURLY@[64; 65)
R_CURLY@[65; 66)
WHITESPACE@[66; 67)

View File

@ -4,10 +4,11 @@ FILE@[0; 94)
NAME@[2; 7)
WHITESPACE@[2; 3)
IDENT@[3; 7) "main"
PARAM_LIST@[7; 10)
L_PAREN@[7; 8)
R_PAREN@[8; 9)
BLOCK@[9; 94)
WHITESPACE@[9; 10)
BLOCK@[10; 94)
L_CURLY@[10; 11)
LET_STMT@[11; 32)
WHITESPACE@[11; 16)

View File

@ -4,10 +4,11 @@ FILE@[0; 52)
NAME@[2; 7)
WHITESPACE@[2; 3)
IDENT@[3; 7) "main"
PARAM_LIST@[7; 10)
L_PAREN@[7; 8)
R_PAREN@[8; 9)
BLOCK@[9; 52)
WHITESPACE@[9; 10)
BLOCK@[10; 52)
L_CURLY@[10; 11)
LET_STMT@[11; 33)
WHITESPACE@[11; 16)

View File

@ -4,10 +4,11 @@ FILE@[0; 26)
NAME@[2; 7)
WHITESPACE@[2; 3)
IDENT@[3; 7) "main"
PARAM_LIST@[7; 10)
L_PAREN@[7; 8)
R_PAREN@[8; 9)
BLOCK@[9; 26)
WHITESPACE@[9; 10)
BLOCK@[10; 26)
L_CURLY@[10; 11)
LET_STMT@[11; 24)
WHITESPACE@[11; 12)

View File

@ -4,10 +4,11 @@ FILE@[0; 30)
NAME@[2; 6)
WHITESPACE@[2; 3)
IDENT@[3; 6) "foo"
PARAM_LIST@[6; 9)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
BLOCK@[8; 12)
WHITESPACE@[8; 9)
BLOCK@[9; 12)
L_CURLY@[9; 10)
R_CURLY@[10; 11)
WHITESPACE@[11; 12)
@ -16,6 +17,7 @@ FILE@[0; 30)
NAME@[14; 18)
WHITESPACE@[14; 15)
IDENT@[15; 18) "bar"
PARAM_LIST@[18; 21)
L_PAREN@[18; 19)
R_PAREN@[19; 20)
WHITESPACE@[20; 21)

View File

@ -4,10 +4,11 @@ FILE@[0; 68)
NAME@[2; 6)
WHITESPACE@[2; 3)
IDENT@[3; 6) "foo"
PARAM_LIST@[6; 9)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
BLOCK@[8; 68)
WHITESPACE@[8; 9)
BLOCK@[9; 68)
L_CURLY@[9; 10)
LET_STMT@[10; 30)
WHITESPACE@[10; 15)

View File

@ -4,10 +4,11 @@ FILE@[0; 189)
NAME@[2; 6)
WHITESPACE@[2; 3)
IDENT@[3; 6) "foo"
PARAM_LIST@[6; 9)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
BLOCK@[8; 189)
WHITESPACE@[8; 9)
BLOCK@[9; 189)
L_CURLY@[9; 10)
LET_STMT@[10; 33)
WHITESPACE@[10; 15)

View File

@ -4,10 +4,11 @@ FILE@[0; 57)
NAME@[2; 6)
WHITESPACE@[2; 3)
IDENT@[3; 6) "foo"
PARAM_LIST@[6; 9)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
BLOCK@[8; 57)
WHITESPACE@[8; 9)
BLOCK@[9; 57)
L_CURLY@[9; 10)
LET_STMT@[10; 32)
WHITESPACE@[10; 15)
@ -24,6 +25,7 @@ FILE@[0; 57)
NAME_REF@[22; 24)
WHITESPACE@[22; 23)
IDENT@[23; 24) "f"
ARG_LIST@[24; 26)
L_PAREN@[24; 25)
R_PAREN@[25; 26)
SEMI@[26; 27)
@ -44,12 +46,15 @@ FILE@[0; 57)
NAME_REF@[39; 41)
WHITESPACE@[39; 40)
IDENT@[40; 41) "f"
ARG_LIST@[41; 43)
L_PAREN@[41; 42)
R_PAREN@[42; 43)
ARG_LIST@[43; 46)
L_PAREN@[43; 44)
LITERAL@[44; 45)
INT_NUMBER@[44; 45)
R_PAREN@[45; 46)
ARG_LIST@[46; 53)
L_PAREN@[46; 47)
LITERAL@[47; 48)
INT_NUMBER@[47; 48)

View File

@ -4,10 +4,11 @@ FILE@[0; 13)
NAME@[2; 6)
WHITESPACE@[2; 3)
IDENT@[3; 6) "foo"
PARAM_LIST@[6; 9)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
BLOCK@[8; 13)
WHITESPACE@[8; 9)
BLOCK@[9; 13)
L_CURLY@[9; 10)
WHITESPACE@[10; 11)
R_CURLY@[11; 12)

View File

@ -29,10 +29,11 @@ FILE@[0; 118)
NAME@[33; 37)
WHITESPACE@[33; 34)
IDENT@[34; 37) "foo"
PARAM_LIST@[37; 40)
L_PAREN@[37; 38)
R_PAREN@[38; 39)
BLOCK@[39; 52)
WHITESPACE@[39; 40)
BLOCK@[40; 52)
L_CURLY@[40; 41)
WHITESPACE@[41; 46)
R_CURLY@[46; 47)

View File

@ -22,10 +22,11 @@ FILE@[0; 35)
NAME@[25; 29)
WHITESPACE@[25; 26)
IDENT@[26; 29) "foo"
PARAM_LIST@[29; 32)
L_PAREN@[29; 30)
R_PAREN@[30; 31)
BLOCK@[31; 35)
WHITESPACE@[31; 32)
BLOCK@[32; 35)
L_CURLY@[32; 33)
R_CURLY@[33; 34)
WHITESPACE@[34; 35)

View File

@ -4,10 +4,11 @@ FILE@[0; 98)
NAME@[2; 4)
WHITESPACE@[2; 3)
IDENT@[3; 4) "a"
PARAM_LIST@[4; 7)
L_PAREN@[4; 5)
R_PAREN@[5; 6)
BLOCK@[6; 10)
WHITESPACE@[6; 7)
BLOCK@[7; 10)
L_CURLY@[7; 8)
R_CURLY@[8; 9)
WHITESPACE@[9; 10)
@ -19,10 +20,11 @@ FILE@[0; 98)
NAME@[16; 18)
WHITESPACE@[16; 17)
IDENT@[17; 18) "b"
PARAM_LIST@[18; 21)
L_PAREN@[18; 19)
R_PAREN@[19; 20)
BLOCK@[20; 24)
WHITESPACE@[20; 21)
BLOCK@[21; 24)
L_CURLY@[21; 22)
R_CURLY@[22; 23)
WHITESPACE@[23; 24)
@ -37,10 +39,11 @@ FILE@[0; 98)
NAME@[37; 39)
WHITESPACE@[37; 38)
IDENT@[38; 39) "c"
PARAM_LIST@[39; 42)
L_PAREN@[39; 40)
R_PAREN@[40; 41)
BLOCK@[41; 45)
WHITESPACE@[41; 42)
BLOCK@[42; 45)
L_CURLY@[42; 43)
R_CURLY@[43; 44)
WHITESPACE@[44; 45)
@ -55,10 +58,11 @@ FILE@[0; 98)
NAME@[58; 60)
WHITESPACE@[58; 59)
IDENT@[59; 60) "d"
PARAM_LIST@[60; 63)
L_PAREN@[60; 61)
R_PAREN@[61; 62)
BLOCK@[62; 66)
WHITESPACE@[62; 63)
BLOCK@[63; 66)
L_CURLY@[63; 64)
R_CURLY@[64; 65)
WHITESPACE@[65; 66)
@ -88,10 +92,11 @@ FILE@[0; 98)
NAME@[90; 92)
WHITESPACE@[90; 91)
IDENT@[91; 92) "e"
PARAM_LIST@[92; 95)
L_PAREN@[92; 93)
R_PAREN@[93; 94)
BLOCK@[94; 98)
WHITESPACE@[94; 95)
BLOCK@[95; 98)
L_CURLY@[95; 96)
R_CURLY@[96; 97)
WHITESPACE@[97; 98)

View File

@ -16,10 +16,11 @@ FILE@[0; 23)
NAME@[13; 17)
WHITESPACE@[13; 14)
IDENT@[14; 17) "foo"
PARAM_LIST@[17; 20)
L_PAREN@[17; 18)
R_PAREN@[18; 19)
BLOCK@[19; 23)
WHITESPACE@[19; 20)
BLOCK@[20; 23)
L_CURLY@[20; 21)
R_CURLY@[21; 22)
WHITESPACE@[22; 23)

View File

@ -7,10 +7,11 @@ FILE@[0; 71)
NAME@[9; 13)
WHITESPACE@[9; 10)
IDENT@[10; 13) "foo"
PARAM_LIST@[13; 16)
L_PAREN@[13; 14)
R_PAREN@[14; 15)
BLOCK@[15; 21)
WHITESPACE@[15; 16)
BLOCK@[16; 21)
L_CURLY@[16; 17)
WHITESPACE@[17; 18)
R_CURLY@[18; 19)
@ -25,10 +26,11 @@ FILE@[0; 71)
NAME@[34; 38)
WHITESPACE@[34; 35)
IDENT@[35; 38) "bar"
PARAM_LIST@[38; 41)
L_PAREN@[38; 39)
R_PAREN@[39; 40)
BLOCK@[40; 46)
WHITESPACE@[40; 41)
BLOCK@[41; 46)
L_CURLY@[41; 42)
WHITESPACE@[42; 43)
R_CURLY@[43; 44)
@ -43,10 +45,11 @@ FILE@[0; 71)
NAME@[60; 64)
WHITESPACE@[60; 61)
IDENT@[61; 64) "baz"
PARAM_LIST@[64; 67)
L_PAREN@[64; 65)
R_PAREN@[65; 66)
BLOCK@[66; 71)
WHITESPACE@[66; 67)
BLOCK@[67; 71)
L_CURLY@[67; 68)
WHITESPACE@[68; 69)
R_CURLY@[69; 70)