47: G: more types r=matklad a=matklad

bors r+
This commit is contained in:
bors[bot] 2018-02-10 21:47:04 +00:00
commit e19d038a0e
25 changed files with 263 additions and 67 deletions

View file

@ -101,6 +101,11 @@ Grammar(
"IMPL_ITEM", "IMPL_ITEM",
"TYPE_ITEM", "TYPE_ITEM",
"PAREN_TYPE",
"TUPLE_TYPE",
"NEVER_TYPE",
"PATH_TYPE",
"EXTERN_BLOCK", "EXTERN_BLOCK",
"ENUM_VARIANT", "ENUM_VARIANT",
"NAMED_FIELD", "NAMED_FIELD",

View file

@ -14,7 +14,7 @@ fn const_or_static(p: &mut Parser, kw: SyntaxKind) {
p.eat(MUT_KW); // TODO: validator to forbid const mut p.eat(MUT_KW); // TODO: validator to forbid const mut
name(p); name(p);
p.expect(COLON); p.expect(COLON);
types::type_ref(p); types::ty(p);
p.expect(EQ); p.expect(EQ);
expressions::expr(p); expressions::expr(p);
p.expect(SEMI); p.expect(SEMI);

View file

@ -247,7 +247,7 @@ fn type_item(p: &mut Parser) {
type_params::where_clause(p); type_params::where_clause(p);
p.expect(EQ); p.expect(EQ);
types::type_ref(p); types::ty(p);
p.expect(SEMI); p.expect(SEMI);
} }

View file

@ -89,7 +89,7 @@ fn named_fields(p: &mut Parser) {
if p.at(IDENT) { if p.at(IDENT) {
name(p); name(p);
p.expect(COLON); p.expect(COLON);
types::type_ref(p); types::ty(p);
field.complete(p, NAMED_FIELD); field.complete(p, NAMED_FIELD);
} else { } else {
field.abandon(p); field.abandon(p);
@ -105,7 +105,7 @@ fn pos_fields(p: &mut Parser) {
while !p.at(R_PAREN) && !p.at(EOF) { while !p.at(R_PAREN) && !p.at(EOF) {
let pos_field = p.start(); let pos_field = p.start();
visibility(p); visibility(p);
types::type_ref(p); types::ty(p);
pos_field.complete(p, POS_FIELD); pos_field.complete(p, POS_FIELD);
if !p.at(R_PAREN) { if !p.at(R_PAREN) {

View file

@ -62,7 +62,7 @@ pub(super) fn list(p: &mut Parser) {
} }
} }
if p.at(EQ) { if p.at(EQ) {
types::type_ref(p) types::ty(p)
} }
m.complete(p, TYPE_PARAM); m.complete(p, TYPE_PARAM);
} }

View file

@ -1,14 +1,51 @@
use super::*; use super::*;
pub(super) fn type_ref(p: &mut Parser) { pub(super) fn ty(p: &mut Parser) {
match p.current() { match p.current() {
IDENT => p.bump(), L_PAREN => paren_or_tuple_ty(p),
L_PAREN => { IDENT => path_type(p),
p.bump();
p.expect(R_PAREN);
}
_ => { _ => {
p.error("expected type"); p.error("expected type");
} }
} }
} }
fn paren_or_tuple_ty(p: &mut Parser) {
assert!(p.at(L_PAREN));
let m = p.start();
p.bump();
let mut n_types: u32 = 0;
let mut trailing_comma: bool = false;
while !p.at(EOF) && !p.at(R_PAREN) {
n_types += 1;
ty(p);
if p.eat(COMMA) {
trailing_comma = true;
} else {
trailing_comma = false;
break;
}
}
p.expect(R_PAREN);
let kind = if n_types == 1 && !trailing_comma {
// test paren_type
// type T = (i32);
PAREN_TYPE
} else {
// test unit_type
// type T = ();
// test singleton_tuple_type
// type T = (i32,);
TUPLE_TYPE
};
m.complete(p, kind);
}
fn path_type(p: &mut Parser) {
assert!(p.at(IDENT));
let m = p.start();
paths::type_path(p);
m.complete(p, PATH_TYPE);
}

View file

@ -99,6 +99,10 @@ pub enum SyntaxKind {
TRAIT_ITEM, TRAIT_ITEM,
IMPL_ITEM, IMPL_ITEM,
TYPE_ITEM, TYPE_ITEM,
PAREN_TYPE,
TUPLE_TYPE,
NEVER_TYPE,
PATH_TYPE,
EXTERN_BLOCK, EXTERN_BLOCK,
ENUM_VARIANT, ENUM_VARIANT,
NAMED_FIELD, NAMED_FIELD,
@ -224,6 +228,10 @@ impl SyntaxKind {
TRAIT_ITEM => &SyntaxInfo { name: "TRAIT_ITEM" }, TRAIT_ITEM => &SyntaxInfo { name: "TRAIT_ITEM" },
IMPL_ITEM => &SyntaxInfo { name: "IMPL_ITEM" }, IMPL_ITEM => &SyntaxInfo { name: "IMPL_ITEM" },
TYPE_ITEM => &SyntaxInfo { name: "TYPE_ITEM" }, TYPE_ITEM => &SyntaxInfo { name: "TYPE_ITEM" },
PAREN_TYPE => &SyntaxInfo { name: "PAREN_TYPE" },
TUPLE_TYPE => &SyntaxInfo { name: "TUPLE_TYPE" },
NEVER_TYPE => &SyntaxInfo { name: "NEVER_TYPE" },
PATH_TYPE => &SyntaxInfo { name: "PATH_TYPE" },
EXTERN_BLOCK => &SyntaxInfo { name: "EXTERN_BLOCK" }, EXTERN_BLOCK => &SyntaxInfo { name: "EXTERN_BLOCK" },
ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" }, ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" },
NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" }, NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" },

View file

@ -11,15 +11,23 @@ FILE@[0; 34)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
IDENT@[15; 16) "a" IDENT@[15; 16) "a"
COLON@[16; 17) COLON@[16; 17)
WHITESPACE@[17; 18) PATH_TYPE@[17; 26)
IDENT@[18; 21) "u32" PATH@[17; 26)
WHITESPACE@[21; 26) PATH_SEGMENT@[17; 26)
NAME_REF@[17; 26)
WHITESPACE@[17; 18)
IDENT@[18; 21) "u32"
WHITESPACE@[21; 26)
err: `expected COMMA` err: `expected COMMA`
NAMED_FIELD@[26; 33) NAMED_FIELD@[26; 33)
NAME@[26; 27) NAME@[26; 27)
IDENT@[26; 27) "b" IDENT@[26; 27) "b"
COLON@[27; 28) COLON@[27; 28)
WHITESPACE@[28; 29) PATH_TYPE@[28; 33)
IDENT@[29; 32) "u32" PATH@[28; 33)
WHITESPACE@[32; 33) PATH_SEGMENT@[28; 33)
NAME_REF@[28; 33)
WHITESPACE@[28; 29)
IDENT@[29; 32) "u32"
WHITESPACE@[32; 33)
R_CURLY@[33; 34) R_CURLY@[33; 34)

View file

@ -11,16 +11,24 @@ FILE@[0; 40)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
IDENT@[15; 16) "a" IDENT@[15; 16) "a"
COLON@[16; 17) COLON@[16; 17)
WHITESPACE@[17; 18) PATH_TYPE@[17; 21)
IDENT@[18; 21) "i32" PATH@[17; 21)
PATH_SEGMENT@[17; 21)
NAME_REF@[17; 21)
WHITESPACE@[17; 18)
IDENT@[18; 21) "i32"
COMMA@[21; 22) COMMA@[21; 22)
NAMED_FIELD@[22; 36) NAMED_FIELD@[22; 36)
NAME@[22; 28) NAME@[22; 28)
WHITESPACE@[22; 27) WHITESPACE@[22; 27)
IDENT@[27; 28) "b" IDENT@[27; 28) "b"
COLON@[28; 29) COLON@[28; 29)
WHITESPACE@[29; 30) PATH_TYPE@[29; 36)
IDENT@[30; 36) "String" PATH@[29; 36)
PATH_SEGMENT@[29; 36)
NAME_REF@[29; 36)
WHITESPACE@[29; 30)
IDENT@[30; 36) "String"
COMMA@[36; 37) COMMA@[36; 37)
WHITESPACE@[37; 38) WHITESPACE@[37; 38)
R_CURLY@[38; 39) R_CURLY@[38; 39)

View file

@ -11,8 +11,12 @@ FILE@[0; 74)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
IDENT@[15; 16) "f" IDENT@[15; 16) "f"
COLON@[16; 17) COLON@[16; 17)
WHITESPACE@[17; 18) PATH_TYPE@[17; 21)
IDENT@[18; 21) "u32" PATH@[17; 21)
PATH_SEGMENT@[17; 21)
NAME_REF@[17; 21)
WHITESPACE@[17; 18)
IDENT@[18; 21) "u32"
COMMA@[21; 22) COMMA@[21; 22)
VISIBILITY@[22; 31) VISIBILITY@[22; 31)
WHITESPACE@[22; 27) WHITESPACE@[22; 27)
@ -42,16 +46,24 @@ FILE@[0; 74)
NAME@[52; 53) NAME@[52; 53)
IDENT@[52; 53) "x" IDENT@[52; 53) "x"
COLON@[53; 54) COLON@[53; 54)
WHITESPACE@[54; 55) PATH_TYPE@[54; 58)
IDENT@[55; 58) "u32" PATH@[54; 58)
PATH_SEGMENT@[54; 58)
NAME_REF@[54; 58)
WHITESPACE@[54; 55)
IDENT@[55; 58) "u32"
COMMA@[58; 59) COMMA@[58; 59)
NAMED_FIELD@[59; 70) NAMED_FIELD@[59; 70)
NAME@[59; 65) NAME@[59; 65)
WHITESPACE@[59; 64) WHITESPACE@[59; 64)
IDENT@[64; 65) "z" IDENT@[64; 65) "z"
COLON@[65; 66) COLON@[65; 66)
WHITESPACE@[66; 67) PATH_TYPE@[66; 70)
IDENT@[67; 70) "f64" PATH@[66; 70)
PATH_SEGMENT@[66; 70)
NAME_REF@[66; 70)
WHITESPACE@[66; 67)
IDENT@[67; 70) "f64"
COMMA@[70; 71) COMMA@[70; 71)
WHITESPACE@[71; 72) WHITESPACE@[71; 72)
R_CURLY@[72; 73) R_CURLY@[72; 73)

View file

@ -11,8 +11,9 @@ FILE@[0; 21)
R_ANGLE@[13; 14) R_ANGLE@[13; 14)
WHITESPACE@[14; 15) WHITESPACE@[14; 15)
EQ@[15; 16) EQ@[15; 16)
WHITESPACE@[16; 17) TUPLE_TYPE@[16; 19)
L_PAREN@[17; 18) WHITESPACE@[16; 17)
R_PAREN@[18; 19) L_PAREN@[17; 18)
R_PAREN@[18; 19)
SEMI@[19; 20) SEMI@[19; 20)
WHITESPACE@[20; 21) WHITESPACE@[20; 21)

View file

@ -6,7 +6,11 @@ FILE@[0; 16)
IDENT@[5; 8) "Foo" IDENT@[5; 8) "Foo"
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
EQ@[9; 10) EQ@[9; 10)
WHITESPACE@[10; 11) PATH_TYPE@[10; 14)
IDENT@[11; 14) "Bar" PATH@[10; 14)
PATH_SEGMENT@[10; 14)
NAME_REF@[10; 14)
WHITESPACE@[10; 11)
IDENT@[11; 14) "Bar"
SEMI@[14; 15) SEMI@[14; 15)
WHITESPACE@[15; 16) WHITESPACE@[15; 16)

View file

@ -14,8 +14,9 @@ FILE@[0; 31)
IDENT@[20; 24) "Copy" IDENT@[20; 24) "Copy"
WHITESPACE@[24; 25) WHITESPACE@[24; 25)
EQ@[25; 26) EQ@[25; 26)
WHITESPACE@[26; 27) TUPLE_TYPE@[26; 29)
L_PAREN@[27; 28) WHITESPACE@[26; 27)
R_PAREN@[28; 29) L_PAREN@[27; 28)
R_PAREN@[28; 29)
SEMI@[29; 30) SEMI@[29; 30)
WHITESPACE@[30; 31) WHITESPACE@[30; 31)

View file

@ -0,0 +1 @@
type T = (i32);

View file

@ -0,0 +1,19 @@
FILE@[0; 16)
TYPE_ITEM@[0; 16)
TYPE_KW@[0; 4)
NAME@[4; 7)
WHITESPACE@[4; 5)
IDENT@[5; 6) "T"
WHITESPACE@[6; 7)
EQ@[7; 8)
PAREN_TYPE@[8; 14)
WHITESPACE@[8; 9)
L_PAREN@[9; 10)
PATH_TYPE@[10; 13)
PATH@[10; 13)
PATH_SEGMENT@[10; 13)
NAME_REF@[10; 13)
IDENT@[10; 13) "i32"
R_PAREN@[13; 14)
SEMI@[14; 15)
WHITESPACE@[15; 16)

View file

@ -0,0 +1 @@
type T = ();

View file

@ -0,0 +1,14 @@
FILE@[0; 13)
TYPE_ITEM@[0; 13)
TYPE_KW@[0; 4)
NAME@[4; 7)
WHITESPACE@[4; 5)
IDENT@[5; 6) "T"
WHITESPACE@[6; 7)
EQ@[7; 8)
TUPLE_TYPE@[8; 11)
WHITESPACE@[8; 9)
L_PAREN@[9; 10)
R_PAREN@[10; 11)
SEMI@[11; 12)
WHITESPACE@[12; 13)

View file

@ -0,0 +1 @@
type T = (i32,);

View file

@ -0,0 +1,20 @@
FILE@[0; 17)
TYPE_ITEM@[0; 17)
TYPE_KW@[0; 4)
NAME@[4; 7)
WHITESPACE@[4; 5)
IDENT@[5; 6) "T"
WHITESPACE@[6; 7)
EQ@[7; 8)
TUPLE_TYPE@[8; 15)
WHITESPACE@[8; 9)
L_PAREN@[9; 10)
PATH_TYPE@[10; 13)
PATH@[10; 13)
PATH_SEGMENT@[10; 13)
NAME_REF@[10; 13)
IDENT@[10; 13) "i32"
COMMA@[13; 14)
R_PAREN@[14; 15)
SEMI@[15; 16)
WHITESPACE@[16; 17)

View file

@ -11,7 +11,11 @@ FILE@[0; 25)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
IDENT@[15; 18) "foo" IDENT@[15; 18) "foo"
COLON@[18; 19) COLON@[18; 19)
WHITESPACE@[19; 20) PATH_TYPE@[19; 24)
IDENT@[20; 23) "u32" PATH@[19; 24)
WHITESPACE@[23; 24) PATH_SEGMENT@[19; 24)
NAME_REF@[19; 24)
WHITESPACE@[19; 20)
IDENT@[20; 23) "u32"
WHITESPACE@[23; 24)
R_CURLY@[24; 25) R_CURLY@[24; 25)

View file

@ -36,8 +36,12 @@ FILE@[0; 97)
WHITESPACE@[45; 50) WHITESPACE@[45; 50)
IDENT@[50; 51) "a" IDENT@[50; 51) "a"
COLON@[51; 52) COLON@[51; 52)
WHITESPACE@[52; 53) PATH_TYPE@[52; 56)
IDENT@[53; 56) "u32" PATH@[52; 56)
PATH_SEGMENT@[52; 56)
NAME_REF@[52; 56)
WHITESPACE@[52; 53)
IDENT@[53; 56) "u32"
COMMA@[56; 57) COMMA@[56; 57)
NAMED_FIELD@[57; 73) NAMED_FIELD@[57; 73)
VISIBILITY@[57; 66) VISIBILITY@[57; 66)
@ -47,9 +51,13 @@ FILE@[0; 97)
NAME@[66; 67) NAME@[66; 67)
IDENT@[66; 67) "b" IDENT@[66; 67) "b"
COLON@[67; 68) COLON@[67; 68)
WHITESPACE@[68; 69) PATH_TYPE@[68; 73)
IDENT@[69; 72) "u32" PATH@[68; 73)
WHITESPACE@[72; 73) PATH_SEGMENT@[68; 73)
NAME_REF@[68; 73)
WHITESPACE@[68; 69)
IDENT@[69; 72) "u32"
WHITESPACE@[72; 73)
R_CURLY@[73; 74) R_CURLY@[73; 74)
WHITESPACE@[74; 76) WHITESPACE@[74; 76)
STRUCT_ITEM@[76; 97) STRUCT_ITEM@[76; 97)
@ -62,11 +70,19 @@ FILE@[0; 97)
VISIBILITY@[85; 89) VISIBILITY@[85; 89)
PUB_KW@[85; 88) PUB_KW@[85; 88)
WHITESPACE@[88; 89) WHITESPACE@[88; 89)
IDENT@[89; 90) "x" PATH_TYPE@[89; 90)
PATH@[89; 90)
PATH_SEGMENT@[89; 90)
NAME_REF@[89; 90)
IDENT@[89; 90) "x"
COMMA@[90; 91) COMMA@[90; 91)
POS_FIELD@[91; 93) POS_FIELD@[91; 93)
WHITESPACE@[91; 92) PATH_TYPE@[91; 93)
IDENT@[92; 93) "y" PATH@[91; 93)
PATH_SEGMENT@[91; 93)
NAME_REF@[91; 93)
WHITESPACE@[91; 92)
IDENT@[92; 93) "y"
COMMA@[93; 94) COMMA@[93; 94)
R_PAREN@[94; 95) R_PAREN@[94; 95)
SEMI@[95; 96) SEMI@[95; 96)

View file

@ -23,7 +23,11 @@ FILE@[0; 290)
R_ANGLE@[25; 26) R_ANGLE@[25; 26)
L_PAREN@[26; 27) L_PAREN@[26; 27)
POS_FIELD@[27; 30) POS_FIELD@[27; 30)
IDENT@[27; 30) "u32" PATH_TYPE@[27; 30)
PATH@[27; 30)
PATH_SEGMENT@[27; 30)
NAME_REF@[27; 30)
IDENT@[27; 30) "u32"
R_PAREN@[30; 31) R_PAREN@[30; 31)
SEMI@[31; 32) SEMI@[31; 32)
WHITESPACE@[32; 33) WHITESPACE@[32; 33)
@ -44,9 +48,13 @@ FILE@[0; 290)
WHITESPACE@[47; 48) WHITESPACE@[47; 48)
IDENT@[48; 49) "u" IDENT@[48; 49) "u"
COLON@[49; 50) COLON@[49; 50)
WHITESPACE@[50; 51) PATH_TYPE@[50; 55)
IDENT@[51; 54) "u32" PATH@[50; 55)
WHITESPACE@[54; 55) PATH_SEGMENT@[50; 55)
NAME_REF@[50; 55)
WHITESPACE@[50; 51)
IDENT@[51; 54) "u32"
WHITESPACE@[54; 55)
R_CURLY@[55; 56) R_CURLY@[55; 56)
WHITESPACE@[56; 58) WHITESPACE@[56; 58)
STRUCT_ITEM@[58; 71) STRUCT_ITEM@[58; 71)

View file

@ -81,8 +81,12 @@ FILE@[0; 182)
WHITESPACE@[104; 113) WHITESPACE@[104; 113)
IDENT@[113; 114) "a" IDENT@[113; 114) "a"
COLON@[114; 115) COLON@[114; 115)
WHITESPACE@[115; 116) PATH_TYPE@[115; 119)
IDENT@[116; 119) "u32" PATH@[115; 119)
PATH_SEGMENT@[115; 119)
NAME_REF@[115; 119)
WHITESPACE@[115; 116)
IDENT@[116; 119) "u32"
COMMA@[119; 120) COMMA@[119; 120)
NAMED_FIELD@[120; 139) NAMED_FIELD@[120; 139)
VISIBILITY@[120; 133) VISIBILITY@[120; 133)
@ -92,8 +96,12 @@ FILE@[0; 182)
NAME@[133; 134) NAME@[133; 134)
IDENT@[133; 134) "b" IDENT@[133; 134) "b"
COLON@[134; 135) COLON@[134; 135)
WHITESPACE@[135; 136) PATH_TYPE@[135; 139)
IDENT@[136; 139) "f64" PATH@[135; 139)
PATH_SEGMENT@[135; 139)
NAME_REF@[135; 139)
WHITESPACE@[135; 136)
IDENT@[136; 139) "f64"
COMMA@[139; 140) COMMA@[139; 140)
WHITESPACE@[140; 145) WHITESPACE@[140; 145)
R_CURLY@[145; 146) R_CURLY@[145; 146)
@ -110,7 +118,11 @@ FILE@[0; 182)
IDENT@[162; 163) "D" IDENT@[162; 163) "D"
L_PAREN@[163; 164) L_PAREN@[163; 164)
POS_FIELD@[164; 167) POS_FIELD@[164; 167)
IDENT@[164; 167) "u32" PATH_TYPE@[164; 167)
PATH@[164; 167)
PATH_SEGMENT@[164; 167)
NAME_REF@[164; 167)
IDENT@[164; 167) "u32"
COMMA@[167; 168) COMMA@[167; 168)
R_PAREN@[168; 169) R_PAREN@[168; 169)
COMMA@[169; 170) COMMA@[169; 170)

View file

@ -5,9 +5,13 @@ FILE@[0; 47)
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
IDENT@[7; 10) "FOO" IDENT@[7; 10) "FOO"
COLON@[10; 11) COLON@[10; 11)
WHITESPACE@[11; 12) PATH_TYPE@[11; 16)
IDENT@[12; 15) "u32" PATH@[11; 16)
WHITESPACE@[15; 16) PATH_SEGMENT@[11; 16)
NAME_REF@[11; 16)
WHITESPACE@[11; 12)
IDENT@[12; 15) "u32"
WHITESPACE@[15; 16)
EQ@[16; 17) EQ@[16; 17)
LITERAL@[17; 19) LITERAL@[17; 19)
WHITESPACE@[17; 18) WHITESPACE@[17; 18)
@ -22,9 +26,13 @@ FILE@[0; 47)
WHITESPACE@[31; 32) WHITESPACE@[31; 32)
IDENT@[32; 35) "BAR" IDENT@[32; 35) "BAR"
COLON@[35; 36) COLON@[35; 36)
WHITESPACE@[36; 37) PATH_TYPE@[36; 41)
IDENT@[37; 40) "i32" PATH@[36; 41)
WHITESPACE@[40; 41) PATH_SEGMENT@[36; 41)
NAME_REF@[36; 41)
WHITESPACE@[36; 37)
IDENT@[37; 40) "i32"
WHITESPACE@[40; 41)
EQ@[41; 42) EQ@[41; 42)
LITERAL@[42; 45) LITERAL@[42; 45)
WHITESPACE@[42; 43) WHITESPACE@[42; 43)

View file

@ -5,9 +5,13 @@ FILE@[0; 46)
WHITESPACE@[5; 6) WHITESPACE@[5; 6)
IDENT@[6; 9) "FOO" IDENT@[6; 9) "FOO"
COLON@[9; 10) COLON@[9; 10)
WHITESPACE@[10; 11) PATH_TYPE@[10; 15)
IDENT@[11; 14) "u32" PATH@[10; 15)
WHITESPACE@[14; 15) PATH_SEGMENT@[10; 15)
NAME_REF@[10; 15)
WHITESPACE@[10; 11)
IDENT@[11; 14) "u32"
WHITESPACE@[14; 15)
EQ@[15; 16) EQ@[15; 16)
LITERAL@[16; 19) LITERAL@[16; 19)
WHITESPACE@[16; 17) WHITESPACE@[16; 17)
@ -22,9 +26,13 @@ FILE@[0; 46)
WHITESPACE@[30; 31) WHITESPACE@[30; 31)
IDENT@[31; 34) "BAR" IDENT@[31; 34) "BAR"
COLON@[34; 35) COLON@[34; 35)
WHITESPACE@[35; 36) PATH_TYPE@[35; 40)
IDENT@[36; 39) "u32" PATH@[35; 40)
WHITESPACE@[39; 40) PATH_SEGMENT@[35; 40)
NAME_REF@[35; 40)
WHITESPACE@[35; 36)
IDENT@[36; 39) "u32"
WHITESPACE@[39; 40)
EQ@[40; 41) EQ@[40; 41)
LITERAL@[41; 44) LITERAL@[41; 44)
WHITESPACE@[41; 42) WHITESPACE@[41; 42)