// fn b(x: i32) {}
// fn c(x: i32, ) {}
// fn d(x: i32, y: ()) {}
-// fn g1(#[attr1] #[attr2] pat: Type) {}
-// fn g2(#[attr1] x: u8) {}
pub(super) fn param_list(p: &mut Parser) {
list_(p, Flavor::Normal)
}
// test param_list_opt_patterns
// fn foo<F: FnMut(&mut Foo<'a>)>(){}
-// fn foo<F: FnMut(#[attr] &mut Foo<'a>)>(){}
pub(super) fn param_list_opt_patterns(p: &mut Parser) {
list_(p, Flavor::OptionalPattern)
}
let m = p.start();
p.bump();
if flavor.type_required() {
+ // test self_param_outer_attr
+ // fn f(#[must_use] self) {}
attributes::outer_attributes(p);
opt_self_param(p);
}
while !p.at(EOF) && !p.at(ket) {
+ // test param_outer_arg
+ // fn f(#[attr1] pat: Type) {}
attributes::outer_attributes(p);
if flavor.type_required() && p.at(T![...]) {
}
// test param_list_vararg
// extern "C" { fn printf(format: *const i8, ...) -> i32; }
- // extern "C" { fn printf(format: *const i8, #[attr] ...) -> i32; }
if flavor.type_required() {
p.eat(T![...]);
}
// test trait_fn_placeholder_parameter
// trait Foo {
// fn bar(_: u64, mut x: i32);
- // fn bar(#[attr] _: u64, #[attr] mut x: i32);
// }
if (la0 == IDENT || la0 == T![_]) && la1 == T![:]
|| la0 == T![mut] && la1 == IDENT && la2 == T![:]
// fn c(&'a self,) {}
// fn d(&'a mut self, x: i32) {}
// fn e(mut self) {}
-// fn f(#[must_use] self) {}
-// fn g1(#[attr] self) {}
-// fn g2(#[attr] &self) {}
-// fn g3<'a>(#[attr] &mut self) {}
-// fn g4<'a>(#[attr] &'a self) {}
-// fn g5<'a>(#[attr] &'a mut self) {}
// }
fn opt_self_param(p: &mut Parser) {
let m;
// impl S {
// fn a(self: &Self) {}
// fn b(mut self: Box<Self>) {}
- // fn c(#[attr] self: Self) {}
- // fn d(#[attr] self: Rc<Self>) {}
// }
if p.at(T![:]) {
types::ascription(p);
fn c(&'a self,) {}
fn d(&'a mut self, x: i32) {}
fn e(mut self) {}
- fn f(#[must_use] self) {}
- fn g1(#[attr] self) {}
- fn g2(#[attr] &self) {}
- fn g3<'a>(#[attr] &mut self) {}
- fn g4<'a>(#[attr] &'a self) {}
- fn g5<'a>(#[attr] &'a mut self) {}
}
-SOURCE_FILE@[0; 323)
- IMPL_BLOCK@[0; 322)
+SOURCE_FILE@[0; 128)
+ IMPL_BLOCK@[0; 127)
IMPL_KW@[0; 4) "impl"
WHITESPACE@[4; 5) " "
PATH_TYPE@[5; 6)
NAME_REF@[5; 6)
IDENT@[5; 6) "S"
WHITESPACE@[6; 7) " "
- ITEM_LIST@[7; 322)
+ ITEM_LIST@[7; 127)
L_CURLY@[7; 8) "{"
WHITESPACE@[8; 13) "\n "
FN_DEF@[13; 26)
BLOCK@[123; 125)
L_CURLY@[123; 124) "{"
R_CURLY@[124; 125) "}"
- WHITESPACE@[125; 130) "\n "
- FN_DEF@[130; 155)
- FN_KW@[130; 132) "fn"
- WHITESPACE@[132; 133) " "
- NAME@[133; 134)
- IDENT@[133; 134) "f"
- PARAM_LIST@[134; 152)
- L_PAREN@[134; 135) "("
- ATTR@[135; 146)
- POUND@[135; 136) "#"
- TOKEN_TREE@[136; 146)
- L_BRACK@[136; 137) "["
- IDENT@[137; 145) "must_use"
- R_BRACK@[145; 146) "]"
- WHITESPACE@[146; 147) " "
- SELF_PARAM@[147; 151)
- SELF_KW@[147; 151) "self"
- R_PAREN@[151; 152) ")"
- WHITESPACE@[152; 153) " "
- BLOCK@[153; 155)
- L_CURLY@[153; 154) "{"
- R_CURLY@[154; 155) "}"
- WHITESPACE@[155; 160) "\n "
- FN_DEF@[160; 182)
- FN_KW@[160; 162) "fn"
- WHITESPACE@[162; 163) " "
- NAME@[163; 165)
- IDENT@[163; 165) "g1"
- PARAM_LIST@[165; 179)
- L_PAREN@[165; 166) "("
- ATTR@[166; 173)
- POUND@[166; 167) "#"
- TOKEN_TREE@[167; 173)
- L_BRACK@[167; 168) "["
- IDENT@[168; 172) "attr"
- R_BRACK@[172; 173) "]"
- WHITESPACE@[173; 174) " "
- SELF_PARAM@[174; 178)
- SELF_KW@[174; 178) "self"
- R_PAREN@[178; 179) ")"
- WHITESPACE@[179; 180) " "
- BLOCK@[180; 182)
- L_CURLY@[180; 181) "{"
- R_CURLY@[181; 182) "}"
- WHITESPACE@[182; 187) "\n "
- FN_DEF@[187; 210)
- FN_KW@[187; 189) "fn"
- WHITESPACE@[189; 190) " "
- NAME@[190; 192)
- IDENT@[190; 192) "g2"
- PARAM_LIST@[192; 207)
- L_PAREN@[192; 193) "("
- ATTR@[193; 200)
- POUND@[193; 194) "#"
- TOKEN_TREE@[194; 200)
- L_BRACK@[194; 195) "["
- IDENT@[195; 199) "attr"
- R_BRACK@[199; 200) "]"
- WHITESPACE@[200; 201) " "
- SELF_PARAM@[201; 206)
- AMP@[201; 202) "&"
- SELF_KW@[202; 206) "self"
- R_PAREN@[206; 207) ")"
- WHITESPACE@[207; 208) " "
- BLOCK@[208; 210)
- L_CURLY@[208; 209) "{"
- R_CURLY@[209; 210) "}"
- WHITESPACE@[210; 215) "\n "
- FN_DEF@[215; 246)
- FN_KW@[215; 217) "fn"
- WHITESPACE@[217; 218) " "
- NAME@[218; 220)
- IDENT@[218; 220) "g3"
- TYPE_PARAM_LIST@[220; 224)
- L_ANGLE@[220; 221) "<"
- LIFETIME_PARAM@[221; 223)
- LIFETIME@[221; 223) "\'a"
- R_ANGLE@[223; 224) ">"
- PARAM_LIST@[224; 243)
- L_PAREN@[224; 225) "("
- ATTR@[225; 232)
- POUND@[225; 226) "#"
- TOKEN_TREE@[226; 232)
- L_BRACK@[226; 227) "["
- IDENT@[227; 231) "attr"
- R_BRACK@[231; 232) "]"
- WHITESPACE@[232; 233) " "
- SELF_PARAM@[233; 242)
- AMP@[233; 234) "&"
- MUT_KW@[234; 237) "mut"
- WHITESPACE@[237; 238) " "
- SELF_KW@[238; 242) "self"
- R_PAREN@[242; 243) ")"
- WHITESPACE@[243; 244) " "
- BLOCK@[244; 246)
- L_CURLY@[244; 245) "{"
- R_CURLY@[245; 246) "}"
- WHITESPACE@[246; 251) "\n "
- FN_DEF@[251; 281)
- FN_KW@[251; 253) "fn"
- WHITESPACE@[253; 254) " "
- NAME@[254; 256)
- IDENT@[254; 256) "g4"
- TYPE_PARAM_LIST@[256; 260)
- L_ANGLE@[256; 257) "<"
- LIFETIME_PARAM@[257; 259)
- LIFETIME@[257; 259) "\'a"
- R_ANGLE@[259; 260) ">"
- PARAM_LIST@[260; 278)
- L_PAREN@[260; 261) "("
- ATTR@[261; 268)
- POUND@[261; 262) "#"
- TOKEN_TREE@[262; 268)
- L_BRACK@[262; 263) "["
- IDENT@[263; 267) "attr"
- R_BRACK@[267; 268) "]"
- WHITESPACE@[268; 269) " "
- SELF_PARAM@[269; 277)
- AMP@[269; 270) "&"
- LIFETIME@[270; 272) "\'a"
- WHITESPACE@[272; 273) " "
- SELF_KW@[273; 277) "self"
- R_PAREN@[277; 278) ")"
- WHITESPACE@[278; 279) " "
- BLOCK@[279; 281)
- L_CURLY@[279; 280) "{"
- R_CURLY@[280; 281) "}"
- WHITESPACE@[281; 286) "\n "
- FN_DEF@[286; 320)
- FN_KW@[286; 288) "fn"
- WHITESPACE@[288; 289) " "
- NAME@[289; 291)
- IDENT@[289; 291) "g5"
- TYPE_PARAM_LIST@[291; 295)
- L_ANGLE@[291; 292) "<"
- LIFETIME_PARAM@[292; 294)
- LIFETIME@[292; 294) "\'a"
- R_ANGLE@[294; 295) ">"
- PARAM_LIST@[295; 317)
- L_PAREN@[295; 296) "("
- ATTR@[296; 303)
- POUND@[296; 297) "#"
- TOKEN_TREE@[297; 303)
- L_BRACK@[297; 298) "["
- IDENT@[298; 302) "attr"
- R_BRACK@[302; 303) "]"
- WHITESPACE@[303; 304) " "
- SELF_PARAM@[304; 316)
- AMP@[304; 305) "&"
- LIFETIME@[305; 307) "\'a"
- WHITESPACE@[307; 308) " "
- MUT_KW@[308; 311) "mut"
- WHITESPACE@[311; 312) " "
- SELF_KW@[312; 316) "self"
- R_PAREN@[316; 317) ")"
- WHITESPACE@[317; 318) " "
- BLOCK@[318; 320)
- L_CURLY@[318; 319) "{"
- R_CURLY@[319; 320) "}"
- WHITESPACE@[320; 321) "\n"
- R_CURLY@[321; 322) "}"
- WHITESPACE@[322; 323) "\n"
+ WHITESPACE@[125; 126) "\n"
+ R_CURLY@[126; 127) "}"
+ WHITESPACE@[127; 128) "\n"
impl S {
fn a(self: &Self) {}
fn b(mut self: Box<Self>) {}
- fn c(#[attr] self: Self) {}
- fn d(#[attr] self: Rc<Self>) {}
}
-SOURCE_FILE@[0; 137)
- IMPL_BLOCK@[0; 136)
+SOURCE_FILE@[0; 69)
+ IMPL_BLOCK@[0; 68)
IMPL_KW@[0; 4) "impl"
WHITESPACE@[4; 5) " "
PATH_TYPE@[5; 6)
NAME_REF@[5; 6)
IDENT@[5; 6) "S"
WHITESPACE@[6; 7) " "
- ITEM_LIST@[7; 136)
+ ITEM_LIST@[7; 68)
L_CURLY@[7; 8) "{"
WHITESPACE@[8; 13) "\n "
FN_DEF@[13; 33)
BLOCK@[64; 66)
L_CURLY@[64; 65) "{"
R_CURLY@[65; 66) "}"
- WHITESPACE@[66; 71) "\n "
- FN_DEF@[71; 98)
- FN_KW@[71; 73) "fn"
- WHITESPACE@[73; 74) " "
- NAME@[74; 75)
- IDENT@[74; 75) "c"
- PARAM_LIST@[75; 95)
- L_PAREN@[75; 76) "("
- ATTR@[76; 83)
- POUND@[76; 77) "#"
- TOKEN_TREE@[77; 83)
- L_BRACK@[77; 78) "["
- IDENT@[78; 82) "attr"
- R_BRACK@[82; 83) "]"
- WHITESPACE@[83; 84) " "
- SELF_PARAM@[84; 94)
- SELF_KW@[84; 88) "self"
- COLON@[88; 89) ":"
- WHITESPACE@[89; 90) " "
- PATH_TYPE@[90; 94)
- PATH@[90; 94)
- PATH_SEGMENT@[90; 94)
- NAME_REF@[90; 94)
- IDENT@[90; 94) "Self"
- R_PAREN@[94; 95) ")"
- WHITESPACE@[95; 96) " "
- BLOCK@[96; 98)
- L_CURLY@[96; 97) "{"
- R_CURLY@[97; 98) "}"
- WHITESPACE@[98; 103) "\n "
- FN_DEF@[103; 134)
- FN_KW@[103; 105) "fn"
- WHITESPACE@[105; 106) " "
- NAME@[106; 107)
- IDENT@[106; 107) "d"
- PARAM_LIST@[107; 131)
- L_PAREN@[107; 108) "("
- ATTR@[108; 115)
- POUND@[108; 109) "#"
- TOKEN_TREE@[109; 115)
- L_BRACK@[109; 110) "["
- IDENT@[110; 114) "attr"
- R_BRACK@[114; 115) "]"
- WHITESPACE@[115; 116) " "
- SELF_PARAM@[116; 130)
- SELF_KW@[116; 120) "self"
- COLON@[120; 121) ":"
- WHITESPACE@[121; 122) " "
- PATH_TYPE@[122; 130)
- PATH@[122; 130)
- PATH_SEGMENT@[122; 130)
- NAME_REF@[122; 124)
- IDENT@[122; 124) "Rc"
- TYPE_ARG_LIST@[124; 130)
- L_ANGLE@[124; 125) "<"
- TYPE_ARG@[125; 129)
- PATH_TYPE@[125; 129)
- PATH@[125; 129)
- PATH_SEGMENT@[125; 129)
- NAME_REF@[125; 129)
- IDENT@[125; 129) "Self"
- R_ANGLE@[129; 130) ">"
- R_PAREN@[130; 131) ")"
- WHITESPACE@[131; 132) " "
- BLOCK@[132; 134)
- L_CURLY@[132; 133) "{"
- R_CURLY@[133; 134) "}"
- WHITESPACE@[134; 135) "\n"
- R_CURLY@[135; 136) "}"
- WHITESPACE@[136; 137) "\n"
+ WHITESPACE@[66; 67) "\n"
+ R_CURLY@[67; 68) "}"
+ WHITESPACE@[68; 69) "\n"
fn foo<F: FnMut(&mut Foo<'a>)>(){}
-fn foo<F: FnMut(#[attr] &mut Foo<'a>)>(){}
-SOURCE_FILE@[0; 78)
+SOURCE_FILE@[0; 35)
FN_DEF@[0; 34)
FN_KW@[0; 2) "fn"
WHITESPACE@[2; 3) " "
L_CURLY@[32; 33) "{"
R_CURLY@[33; 34) "}"
WHITESPACE@[34; 35) "\n"
- FN_DEF@[35; 77)
- FN_KW@[35; 37) "fn"
- WHITESPACE@[37; 38) " "
- NAME@[38; 41)
- IDENT@[38; 41) "foo"
- TYPE_PARAM_LIST@[41; 73)
- L_ANGLE@[41; 42) "<"
- TYPE_PARAM@[42; 72)
- NAME@[42; 43)
- IDENT@[42; 43) "F"
- COLON@[43; 44) ":"
- WHITESPACE@[44; 45) " "
- TYPE_BOUND_LIST@[45; 72)
- TYPE_BOUND@[45; 72)
- PATH_TYPE@[45; 72)
- PATH@[45; 72)
- PATH_SEGMENT@[45; 72)
- NAME_REF@[45; 50)
- IDENT@[45; 50) "FnMut"
- PARAM_LIST@[50; 72)
- L_PAREN@[50; 51) "("
- ATTR@[51; 58)
- POUND@[51; 52) "#"
- TOKEN_TREE@[52; 58)
- L_BRACK@[52; 53) "["
- IDENT@[53; 57) "attr"
- R_BRACK@[57; 58) "]"
- WHITESPACE@[58; 59) " "
- PARAM@[59; 71)
- REFERENCE_TYPE@[59; 71)
- AMP@[59; 60) "&"
- MUT_KW@[60; 63) "mut"
- WHITESPACE@[63; 64) " "
- PATH_TYPE@[64; 71)
- PATH@[64; 71)
- PATH_SEGMENT@[64; 71)
- NAME_REF@[64; 67)
- IDENT@[64; 67) "Foo"
- TYPE_ARG_LIST@[67; 71)
- L_ANGLE@[67; 68) "<"
- LIFETIME_ARG@[68; 70)
- LIFETIME@[68; 70) "\'a"
- R_ANGLE@[70; 71) ">"
- R_PAREN@[71; 72) ")"
- R_ANGLE@[72; 73) ">"
- PARAM_LIST@[73; 75)
- L_PAREN@[73; 74) "("
- R_PAREN@[74; 75) ")"
- BLOCK@[75; 77)
- L_CURLY@[75; 76) "{"
- R_CURLY@[76; 77) "}"
- WHITESPACE@[77; 78) "\n"
fn b(x: i32) {}
fn c(x: i32, ) {}
fn d(x: i32, y: ()) {}
-fn g1(#[attr1] #[attr2] pat: Type) {}
-fn g2(#[attr1] x: u8) {}
-SOURCE_FILE@[0; 130)
+SOURCE_FILE@[0; 67)
FN_DEF@[0; 9)
FN_KW@[0; 2) "fn"
WHITESPACE@[2; 3) " "
L_CURLY@[64; 65) "{"
R_CURLY@[65; 66) "}"
WHITESPACE@[66; 67) "\n"
- FN_DEF@[67; 104)
- FN_KW@[67; 69) "fn"
- WHITESPACE@[69; 70) " "
- NAME@[70; 72)
- IDENT@[70; 72) "g1"
- PARAM_LIST@[72; 101)
- L_PAREN@[72; 73) "("
- ATTR@[73; 81)
- POUND@[73; 74) "#"
- TOKEN_TREE@[74; 81)
- L_BRACK@[74; 75) "["
- IDENT@[75; 80) "attr1"
- R_BRACK@[80; 81) "]"
- WHITESPACE@[81; 82) " "
- ATTR@[82; 90)
- POUND@[82; 83) "#"
- TOKEN_TREE@[83; 90)
- L_BRACK@[83; 84) "["
- IDENT@[84; 89) "attr2"
- R_BRACK@[89; 90) "]"
- WHITESPACE@[90; 91) " "
- PARAM@[91; 100)
- BIND_PAT@[91; 94)
- NAME@[91; 94)
- IDENT@[91; 94) "pat"
- COLON@[94; 95) ":"
- WHITESPACE@[95; 96) " "
- PATH_TYPE@[96; 100)
- PATH@[96; 100)
- PATH_SEGMENT@[96; 100)
- NAME_REF@[96; 100)
- IDENT@[96; 100) "Type"
- R_PAREN@[100; 101) ")"
- WHITESPACE@[101; 102) " "
- BLOCK@[102; 104)
- L_CURLY@[102; 103) "{"
- R_CURLY@[103; 104) "}"
- WHITESPACE@[104; 105) "\n"
- FN_DEF@[105; 129)
- FN_KW@[105; 107) "fn"
- WHITESPACE@[107; 108) " "
- NAME@[108; 110)
- IDENT@[108; 110) "g2"
- PARAM_LIST@[110; 126)
- L_PAREN@[110; 111) "("
- ATTR@[111; 119)
- POUND@[111; 112) "#"
- TOKEN_TREE@[112; 119)
- L_BRACK@[112; 113) "["
- IDENT@[113; 118) "attr1"
- R_BRACK@[118; 119) "]"
- WHITESPACE@[119; 120) " "
- PARAM@[120; 125)
- BIND_PAT@[120; 121)
- NAME@[120; 121)
- IDENT@[120; 121) "x"
- COLON@[121; 122) ":"
- WHITESPACE@[122; 123) " "
- PATH_TYPE@[123; 125)
- PATH@[123; 125)
- PATH_SEGMENT@[123; 125)
- NAME_REF@[123; 125)
- IDENT@[123; 125) "u8"
- R_PAREN@[125; 126) ")"
- WHITESPACE@[126; 127) " "
- BLOCK@[127; 129)
- L_CURLY@[127; 128) "{"
- R_CURLY@[128; 129) "}"
- WHITESPACE@[129; 130) "\n"
trait Foo {
fn bar(_: u64, mut x: i32);
- fn bar(#[attr] _: u64, #[attr] mut x: i32);
}
-SOURCE_FILE@[0; 94)
- TRAIT_DEF@[0; 93)
+SOURCE_FILE@[0; 46)
+ TRAIT_DEF@[0; 45)
TRAIT_KW@[0; 5) "trait"
WHITESPACE@[5; 6) " "
NAME@[6; 9)
IDENT@[6; 9) "Foo"
WHITESPACE@[9; 10) " "
- ITEM_LIST@[10; 93)
+ ITEM_LIST@[10; 45)
L_CURLY@[10; 11) "{"
WHITESPACE@[11; 16) "\n "
FN_DEF@[16; 43)
IDENT@[38; 41) "i32"
R_PAREN@[41; 42) ")"
SEMI@[42; 43) ";"
- WHITESPACE@[43; 48) "\n "
- FN_DEF@[48; 91)
- FN_KW@[48; 50) "fn"
- WHITESPACE@[50; 51) " "
- NAME@[51; 54)
- IDENT@[51; 54) "bar"
- PARAM_LIST@[54; 90)
- L_PAREN@[54; 55) "("
- ATTR@[55; 62)
- POUND@[55; 56) "#"
- TOKEN_TREE@[56; 62)
- L_BRACK@[56; 57) "["
- IDENT@[57; 61) "attr"
- R_BRACK@[61; 62) "]"
- WHITESPACE@[62; 63) " "
- PARAM@[63; 69)
- PLACEHOLDER_PAT@[63; 64)
- UNDERSCORE@[63; 64) "_"
- COLON@[64; 65) ":"
- WHITESPACE@[65; 66) " "
- PATH_TYPE@[66; 69)
- PATH@[66; 69)
- PATH_SEGMENT@[66; 69)
- NAME_REF@[66; 69)
- IDENT@[66; 69) "u64"
- COMMA@[69; 70) ","
- WHITESPACE@[70; 71) " "
- ATTR@[71; 78)
- POUND@[71; 72) "#"
- TOKEN_TREE@[72; 78)
- L_BRACK@[72; 73) "["
- IDENT@[73; 77) "attr"
- R_BRACK@[77; 78) "]"
- WHITESPACE@[78; 79) " "
- PARAM@[79; 89)
- BIND_PAT@[79; 84)
- MUT_KW@[79; 82) "mut"
- WHITESPACE@[82; 83) " "
- NAME@[83; 84)
- IDENT@[83; 84) "x"
- COLON@[84; 85) ":"
- WHITESPACE@[85; 86) " "
- PATH_TYPE@[86; 89)
- PATH@[86; 89)
- PATH_SEGMENT@[86; 89)
- NAME_REF@[86; 89)
- IDENT@[86; 89) "i32"
- R_PAREN@[89; 90) ")"
- SEMI@[90; 91) ";"
- WHITESPACE@[91; 92) "\n"
- R_CURLY@[92; 93) "}"
- WHITESPACE@[93; 94) "\n"
+ WHITESPACE@[43; 44) "\n"
+ R_CURLY@[44; 45) "}"
+ WHITESPACE@[45; 46) "\n"
extern "C" { fn printf(format: *const i8, ...) -> i32; }
-extern "C" { fn printf(format: *const i8, #[attr] ...) -> i32; }
-SOURCE_FILE@[0; 122)
+SOURCE_FILE@[0; 57)
EXTERN_BLOCK@[0; 56)
ABI@[0; 10)
EXTERN_KW@[0; 6) "extern"
WHITESPACE@[54; 55) " "
R_CURLY@[55; 56) "}"
WHITESPACE@[56; 57) "\n"
- EXTERN_BLOCK@[57; 121)
- ABI@[57; 67)
- EXTERN_KW@[57; 63) "extern"
- WHITESPACE@[63; 64) " "
- STRING@[64; 67) "\"C\""
- WHITESPACE@[67; 68) " "
- EXTERN_ITEM_LIST@[68; 121)
- L_CURLY@[68; 69) "{"
- WHITESPACE@[69; 70) " "
- FN_DEF@[70; 119)
- FN_KW@[70; 72) "fn"
- WHITESPACE@[72; 73) " "
- NAME@[73; 79)
- IDENT@[73; 79) "printf"
- PARAM_LIST@[79; 111)
- L_PAREN@[79; 80) "("
- PARAM@[80; 97)
- BIND_PAT@[80; 86)
- NAME@[80; 86)
- IDENT@[80; 86) "format"
- COLON@[86; 87) ":"
- WHITESPACE@[87; 88) " "
- POINTER_TYPE@[88; 97)
- STAR@[88; 89) "*"
- CONST_KW@[89; 94) "const"
- WHITESPACE@[94; 95) " "
- PATH_TYPE@[95; 97)
- PATH@[95; 97)
- PATH_SEGMENT@[95; 97)
- NAME_REF@[95; 97)
- IDENT@[95; 97) "i8"
- COMMA@[97; 98) ","
- WHITESPACE@[98; 99) " "
- ATTR@[99; 106)
- POUND@[99; 100) "#"
- TOKEN_TREE@[100; 106)
- L_BRACK@[100; 101) "["
- IDENT@[101; 105) "attr"
- R_BRACK@[105; 106) "]"
- WHITESPACE@[106; 107) " "
- DOTDOTDOT@[107; 110) "..."
- R_PAREN@[110; 111) ")"
- WHITESPACE@[111; 112) " "
- RET_TYPE@[112; 118)
- THIN_ARROW@[112; 114) "->"
- WHITESPACE@[114; 115) " "
- PATH_TYPE@[115; 118)
- PATH@[115; 118)
- PATH_SEGMENT@[115; 118)
- NAME_REF@[115; 118)
- IDENT@[115; 118) "i32"
- SEMI@[118; 119) ";"
- WHITESPACE@[119; 120) " "
- R_CURLY@[120; 121) "}"
- WHITESPACE@[121; 122) "\n"
--- /dev/null
+fn f(#[must_use] self) {}
--- /dev/null
+SOURCE_FILE@[0; 26)
+ FN_DEF@[0; 25)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 4)
+ IDENT@[3; 4) "f"
+ PARAM_LIST@[4; 22)
+ L_PAREN@[4; 5) "("
+ ATTR@[5; 16)
+ POUND@[5; 6) "#"
+ TOKEN_TREE@[6; 16)
+ L_BRACK@[6; 7) "["
+ IDENT@[7; 15) "must_use"
+ R_BRACK@[15; 16) "]"
+ WHITESPACE@[16; 17) " "
+ SELF_PARAM@[17; 21)
+ SELF_KW@[17; 21) "self"
+ R_PAREN@[21; 22) ")"
+ WHITESPACE@[22; 23) " "
+ BLOCK@[23; 25)
+ L_CURLY@[23; 24) "{"
+ R_CURLY@[24; 25) "}"
+ WHITESPACE@[25; 26) "\n"
--- /dev/null
+fn f(#[attr1] pat: Type) {}
--- /dev/null
+SOURCE_FILE@[0; 28)
+ FN_DEF@[0; 27)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 4)
+ IDENT@[3; 4) "f"
+ PARAM_LIST@[4; 24)
+ L_PAREN@[4; 5) "("
+ ATTR@[5; 13)
+ POUND@[5; 6) "#"
+ TOKEN_TREE@[6; 13)
+ L_BRACK@[6; 7) "["
+ IDENT@[7; 12) "attr1"
+ R_BRACK@[12; 13) "]"
+ WHITESPACE@[13; 14) " "
+ PARAM@[14; 23)
+ BIND_PAT@[14; 17)
+ NAME@[14; 17)
+ IDENT@[14; 17) "pat"
+ COLON@[17; 18) ":"
+ WHITESPACE@[18; 19) " "
+ PATH_TYPE@[19; 23)
+ PATH@[19; 23)
+ PATH_SEGMENT@[19; 23)
+ NAME_REF@[19; 23)
+ IDENT@[19; 23) "Type"
+ R_PAREN@[23; 24) ")"
+ WHITESPACE@[24; 25) " "
+ BLOCK@[25; 27)
+ L_CURLY@[25; 26) "{"
+ R_CURLY@[26; 27) "}"
+ WHITESPACE@[27; 28) "\n"
--- /dev/null
+fn g1(#[attr1] #[attr2] pat: Type) {}
+fn g2(#[attr1] x: u8) {}
+
+extern "C" { fn printf(format: *const i8, #[attr] ...) -> i32; }
+
+fn foo<F: FnMut(#[attr] &mut Foo<'a>)>(){}
+
+trait Foo {
+ fn bar(#[attr] _: u64, # [attr] mut x: i32);
+}
+
+impl S {
+ fn f(#[must_use] self) {}
+ fn g1(#[attr] self) {}
+ fn g2(#[attr] &self) {}
+ fn g3<'a>(#[attr] &mut self) {}
+ fn g4<'a>(#[attr] &'a self) {}
+ fn g5<'a>(#[attr] &'a mut self) {}
+ fn c(#[attr] self: Self) {}
+ fn d(#[attr] self: Rc<Self>) {}
+}
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 519)
+ FN_DEF@[0; 37)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 5)
+ IDENT@[3; 5) "g1"
+ PARAM_LIST@[5; 34)
+ L_PAREN@[5; 6) "("
+ ATTR@[6; 14)
+ POUND@[6; 7) "#"
+ TOKEN_TREE@[7; 14)
+ L_BRACK@[7; 8) "["
+ IDENT@[8; 13) "attr1"
+ R_BRACK@[13; 14) "]"
+ WHITESPACE@[14; 15) " "
+ ATTR@[15; 23)
+ POUND@[15; 16) "#"
+ TOKEN_TREE@[16; 23)
+ L_BRACK@[16; 17) "["
+ IDENT@[17; 22) "attr2"
+ R_BRACK@[22; 23) "]"
+ WHITESPACE@[23; 24) " "
+ PARAM@[24; 33)
+ BIND_PAT@[24; 27)
+ NAME@[24; 27)
+ IDENT@[24; 27) "pat"
+ COLON@[27; 28) ":"
+ WHITESPACE@[28; 29) " "
+ PATH_TYPE@[29; 33)
+ PATH@[29; 33)
+ PATH_SEGMENT@[29; 33)
+ NAME_REF@[29; 33)
+ IDENT@[29; 33) "Type"
+ R_PAREN@[33; 34) ")"
+ WHITESPACE@[34; 35) " "
+ BLOCK@[35; 37)
+ L_CURLY@[35; 36) "{"
+ R_CURLY@[36; 37) "}"
+ WHITESPACE@[37; 38) "\n"
+ FN_DEF@[38; 62)
+ FN_KW@[38; 40) "fn"
+ WHITESPACE@[40; 41) " "
+ NAME@[41; 43)
+ IDENT@[41; 43) "g2"
+ PARAM_LIST@[43; 59)
+ L_PAREN@[43; 44) "("
+ ATTR@[44; 52)
+ POUND@[44; 45) "#"
+ TOKEN_TREE@[45; 52)
+ L_BRACK@[45; 46) "["
+ IDENT@[46; 51) "attr1"
+ R_BRACK@[51; 52) "]"
+ WHITESPACE@[52; 53) " "
+ PARAM@[53; 58)
+ BIND_PAT@[53; 54)
+ NAME@[53; 54)
+ IDENT@[53; 54) "x"
+ COLON@[54; 55) ":"
+ WHITESPACE@[55; 56) " "
+ PATH_TYPE@[56; 58)
+ PATH@[56; 58)
+ PATH_SEGMENT@[56; 58)
+ NAME_REF@[56; 58)
+ IDENT@[56; 58) "u8"
+ R_PAREN@[58; 59) ")"
+ WHITESPACE@[59; 60) " "
+ BLOCK@[60; 62)
+ L_CURLY@[60; 61) "{"
+ R_CURLY@[61; 62) "}"
+ WHITESPACE@[62; 64) "\n\n"
+ EXTERN_BLOCK@[64; 128)
+ ABI@[64; 74)
+ EXTERN_KW@[64; 70) "extern"
+ WHITESPACE@[70; 71) " "
+ STRING@[71; 74) "\"C\""
+ WHITESPACE@[74; 75) " "
+ EXTERN_ITEM_LIST@[75; 128)
+ L_CURLY@[75; 76) "{"
+ WHITESPACE@[76; 77) " "
+ FN_DEF@[77; 126)
+ FN_KW@[77; 79) "fn"
+ WHITESPACE@[79; 80) " "
+ NAME@[80; 86)
+ IDENT@[80; 86) "printf"
+ PARAM_LIST@[86; 118)
+ L_PAREN@[86; 87) "("
+ PARAM@[87; 104)
+ BIND_PAT@[87; 93)
+ NAME@[87; 93)
+ IDENT@[87; 93) "format"
+ COLON@[93; 94) ":"
+ WHITESPACE@[94; 95) " "
+ POINTER_TYPE@[95; 104)
+ STAR@[95; 96) "*"
+ CONST_KW@[96; 101) "const"
+ WHITESPACE@[101; 102) " "
+ PATH_TYPE@[102; 104)
+ PATH@[102; 104)
+ PATH_SEGMENT@[102; 104)
+ NAME_REF@[102; 104)
+ IDENT@[102; 104) "i8"
+ COMMA@[104; 105) ","
+ WHITESPACE@[105; 106) " "
+ ATTR@[106; 113)
+ POUND@[106; 107) "#"
+ TOKEN_TREE@[107; 113)
+ L_BRACK@[107; 108) "["
+ IDENT@[108; 112) "attr"
+ R_BRACK@[112; 113) "]"
+ WHITESPACE@[113; 114) " "
+ DOTDOTDOT@[114; 117) "..."
+ R_PAREN@[117; 118) ")"
+ WHITESPACE@[118; 119) " "
+ RET_TYPE@[119; 125)
+ THIN_ARROW@[119; 121) "->"
+ WHITESPACE@[121; 122) " "
+ PATH_TYPE@[122; 125)
+ PATH@[122; 125)
+ PATH_SEGMENT@[122; 125)
+ NAME_REF@[122; 125)
+ IDENT@[122; 125) "i32"
+ SEMI@[125; 126) ";"
+ WHITESPACE@[126; 127) " "
+ R_CURLY@[127; 128) "}"
+ WHITESPACE@[128; 130) "\n\n"
+ FN_DEF@[130; 172)
+ FN_KW@[130; 132) "fn"
+ WHITESPACE@[132; 133) " "
+ NAME@[133; 136)
+ IDENT@[133; 136) "foo"
+ TYPE_PARAM_LIST@[136; 168)
+ L_ANGLE@[136; 137) "<"
+ TYPE_PARAM@[137; 167)
+ NAME@[137; 138)
+ IDENT@[137; 138) "F"
+ COLON@[138; 139) ":"
+ WHITESPACE@[139; 140) " "
+ TYPE_BOUND_LIST@[140; 167)
+ TYPE_BOUND@[140; 167)
+ PATH_TYPE@[140; 167)
+ PATH@[140; 167)
+ PATH_SEGMENT@[140; 167)
+ NAME_REF@[140; 145)
+ IDENT@[140; 145) "FnMut"
+ PARAM_LIST@[145; 167)
+ L_PAREN@[145; 146) "("
+ ATTR@[146; 153)
+ POUND@[146; 147) "#"
+ TOKEN_TREE@[147; 153)
+ L_BRACK@[147; 148) "["
+ IDENT@[148; 152) "attr"
+ R_BRACK@[152; 153) "]"
+ WHITESPACE@[153; 154) " "
+ PARAM@[154; 166)
+ REFERENCE_TYPE@[154; 166)
+ AMP@[154; 155) "&"
+ MUT_KW@[155; 158) "mut"
+ WHITESPACE@[158; 159) " "
+ PATH_TYPE@[159; 166)
+ PATH@[159; 166)
+ PATH_SEGMENT@[159; 166)
+ NAME_REF@[159; 162)
+ IDENT@[159; 162) "Foo"
+ TYPE_ARG_LIST@[162; 166)
+ L_ANGLE@[162; 163) "<"
+ LIFETIME_ARG@[163; 165)
+ LIFETIME@[163; 165) "\'a"
+ R_ANGLE@[165; 166) ">"
+ R_PAREN@[166; 167) ")"
+ R_ANGLE@[167; 168) ">"
+ PARAM_LIST@[168; 170)
+ L_PAREN@[168; 169) "("
+ R_PAREN@[169; 170) ")"
+ BLOCK@[170; 172)
+ L_CURLY@[170; 171) "{"
+ R_CURLY@[171; 172) "}"
+ WHITESPACE@[172; 174) "\n\n"
+ TRAIT_DEF@[174; 236)
+ TRAIT_KW@[174; 179) "trait"
+ WHITESPACE@[179; 180) " "
+ NAME@[180; 183)
+ IDENT@[180; 183) "Foo"
+ WHITESPACE@[183; 184) " "
+ ITEM_LIST@[184; 236)
+ L_CURLY@[184; 185) "{"
+ WHITESPACE@[185; 190) "\n "
+ FN_DEF@[190; 234)
+ FN_KW@[190; 192) "fn"
+ WHITESPACE@[192; 193) " "
+ NAME@[193; 196)
+ IDENT@[193; 196) "bar"
+ PARAM_LIST@[196; 233)
+ L_PAREN@[196; 197) "("
+ ATTR@[197; 204)
+ POUND@[197; 198) "#"
+ TOKEN_TREE@[198; 204)
+ L_BRACK@[198; 199) "["
+ IDENT@[199; 203) "attr"
+ R_BRACK@[203; 204) "]"
+ WHITESPACE@[204; 205) " "
+ PARAM@[205; 211)
+ PLACEHOLDER_PAT@[205; 206)
+ UNDERSCORE@[205; 206) "_"
+ COLON@[206; 207) ":"
+ WHITESPACE@[207; 208) " "
+ PATH_TYPE@[208; 211)
+ PATH@[208; 211)
+ PATH_SEGMENT@[208; 211)
+ NAME_REF@[208; 211)
+ IDENT@[208; 211) "u64"
+ COMMA@[211; 212) ","
+ WHITESPACE@[212; 213) " "
+ ATTR@[213; 221)
+ POUND@[213; 214) "#"
+ WHITESPACE@[214; 215) " "
+ TOKEN_TREE@[215; 221)
+ L_BRACK@[215; 216) "["
+ IDENT@[216; 220) "attr"
+ R_BRACK@[220; 221) "]"
+ WHITESPACE@[221; 222) " "
+ PARAM@[222; 232)
+ BIND_PAT@[222; 227)
+ MUT_KW@[222; 225) "mut"
+ WHITESPACE@[225; 226) " "
+ NAME@[226; 227)
+ IDENT@[226; 227) "x"
+ COLON@[227; 228) ":"
+ WHITESPACE@[228; 229) " "
+ PATH_TYPE@[229; 232)
+ PATH@[229; 232)
+ PATH_SEGMENT@[229; 232)
+ NAME_REF@[229; 232)
+ IDENT@[229; 232) "i32"
+ R_PAREN@[232; 233) ")"
+ SEMI@[233; 234) ";"
+ WHITESPACE@[234; 235) "\n"
+ R_CURLY@[235; 236) "}"
+ WHITESPACE@[236; 238) "\n\n"
+ IMPL_BLOCK@[238; 519)
+ IMPL_KW@[238; 242) "impl"
+ WHITESPACE@[242; 243) " "
+ PATH_TYPE@[243; 244)
+ PATH@[243; 244)
+ PATH_SEGMENT@[243; 244)
+ NAME_REF@[243; 244)
+ IDENT@[243; 244) "S"
+ WHITESPACE@[244; 245) " "
+ ITEM_LIST@[245; 519)
+ L_CURLY@[245; 246) "{"
+ WHITESPACE@[246; 252) "\n "
+ FN_DEF@[252; 277)
+ FN_KW@[252; 254) "fn"
+ WHITESPACE@[254; 255) " "
+ NAME@[255; 256)
+ IDENT@[255; 256) "f"
+ PARAM_LIST@[256; 274)
+ L_PAREN@[256; 257) "("
+ ATTR@[257; 268)
+ POUND@[257; 258) "#"
+ TOKEN_TREE@[258; 268)
+ L_BRACK@[258; 259) "["
+ IDENT@[259; 267) "must_use"
+ R_BRACK@[267; 268) "]"
+ WHITESPACE@[268; 269) " "
+ SELF_PARAM@[269; 273)
+ SELF_KW@[269; 273) "self"
+ R_PAREN@[273; 274) ")"
+ WHITESPACE@[274; 275) " "
+ BLOCK@[275; 277)
+ L_CURLY@[275; 276) "{"
+ R_CURLY@[276; 277) "}"
+ WHITESPACE@[277; 283) "\n "
+ FN_DEF@[283; 305)
+ FN_KW@[283; 285) "fn"
+ WHITESPACE@[285; 286) " "
+ NAME@[286; 288)
+ IDENT@[286; 288) "g1"
+ PARAM_LIST@[288; 302)
+ L_PAREN@[288; 289) "("
+ ATTR@[289; 296)
+ POUND@[289; 290) "#"
+ TOKEN_TREE@[290; 296)
+ L_BRACK@[290; 291) "["
+ IDENT@[291; 295) "attr"
+ R_BRACK@[295; 296) "]"
+ WHITESPACE@[296; 297) " "
+ SELF_PARAM@[297; 301)
+ SELF_KW@[297; 301) "self"
+ R_PAREN@[301; 302) ")"
+ WHITESPACE@[302; 303) " "
+ BLOCK@[303; 305)
+ L_CURLY@[303; 304) "{"
+ R_CURLY@[304; 305) "}"
+ WHITESPACE@[305; 311) "\n "
+ FN_DEF@[311; 334)
+ FN_KW@[311; 313) "fn"
+ WHITESPACE@[313; 314) " "
+ NAME@[314; 316)
+ IDENT@[314; 316) "g2"
+ PARAM_LIST@[316; 331)
+ L_PAREN@[316; 317) "("
+ ATTR@[317; 324)
+ POUND@[317; 318) "#"
+ TOKEN_TREE@[318; 324)
+ L_BRACK@[318; 319) "["
+ IDENT@[319; 323) "attr"
+ R_BRACK@[323; 324) "]"
+ WHITESPACE@[324; 325) " "
+ SELF_PARAM@[325; 330)
+ AMP@[325; 326) "&"
+ SELF_KW@[326; 330) "self"
+ R_PAREN@[330; 331) ")"
+ WHITESPACE@[331; 332) " "
+ BLOCK@[332; 334)
+ L_CURLY@[332; 333) "{"
+ R_CURLY@[333; 334) "}"
+ WHITESPACE@[334; 340) "\n "
+ FN_DEF@[340; 371)
+ FN_KW@[340; 342) "fn"
+ WHITESPACE@[342; 343) " "
+ NAME@[343; 345)
+ IDENT@[343; 345) "g3"
+ TYPE_PARAM_LIST@[345; 349)
+ L_ANGLE@[345; 346) "<"
+ LIFETIME_PARAM@[346; 348)
+ LIFETIME@[346; 348) "\'a"
+ R_ANGLE@[348; 349) ">"
+ PARAM_LIST@[349; 368)
+ L_PAREN@[349; 350) "("
+ ATTR@[350; 357)
+ POUND@[350; 351) "#"
+ TOKEN_TREE@[351; 357)
+ L_BRACK@[351; 352) "["
+ IDENT@[352; 356) "attr"
+ R_BRACK@[356; 357) "]"
+ WHITESPACE@[357; 358) " "
+ SELF_PARAM@[358; 367)
+ AMP@[358; 359) "&"
+ MUT_KW@[359; 362) "mut"
+ WHITESPACE@[362; 363) " "
+ SELF_KW@[363; 367) "self"
+ R_PAREN@[367; 368) ")"
+ WHITESPACE@[368; 369) " "
+ BLOCK@[369; 371)
+ L_CURLY@[369; 370) "{"
+ R_CURLY@[370; 371) "}"
+ WHITESPACE@[371; 377) "\n "
+ FN_DEF@[377; 407)
+ FN_KW@[377; 379) "fn"
+ WHITESPACE@[379; 380) " "
+ NAME@[380; 382)
+ IDENT@[380; 382) "g4"
+ TYPE_PARAM_LIST@[382; 386)
+ L_ANGLE@[382; 383) "<"
+ LIFETIME_PARAM@[383; 385)
+ LIFETIME@[383; 385) "\'a"
+ R_ANGLE@[385; 386) ">"
+ PARAM_LIST@[386; 404)
+ L_PAREN@[386; 387) "("
+ ATTR@[387; 394)
+ POUND@[387; 388) "#"
+ TOKEN_TREE@[388; 394)
+ L_BRACK@[388; 389) "["
+ IDENT@[389; 393) "attr"
+ R_BRACK@[393; 394) "]"
+ WHITESPACE@[394; 395) " "
+ SELF_PARAM@[395; 403)
+ AMP@[395; 396) "&"
+ LIFETIME@[396; 398) "\'a"
+ WHITESPACE@[398; 399) " "
+ SELF_KW@[399; 403) "self"
+ R_PAREN@[403; 404) ")"
+ WHITESPACE@[404; 405) " "
+ BLOCK@[405; 407)
+ L_CURLY@[405; 406) "{"
+ R_CURLY@[406; 407) "}"
+ WHITESPACE@[407; 413) "\n "
+ FN_DEF@[413; 447)
+ FN_KW@[413; 415) "fn"
+ WHITESPACE@[415; 416) " "
+ NAME@[416; 418)
+ IDENT@[416; 418) "g5"
+ TYPE_PARAM_LIST@[418; 422)
+ L_ANGLE@[418; 419) "<"
+ LIFETIME_PARAM@[419; 421)
+ LIFETIME@[419; 421) "\'a"
+ R_ANGLE@[421; 422) ">"
+ PARAM_LIST@[422; 444)
+ L_PAREN@[422; 423) "("
+ ATTR@[423; 430)
+ POUND@[423; 424) "#"
+ TOKEN_TREE@[424; 430)
+ L_BRACK@[424; 425) "["
+ IDENT@[425; 429) "attr"
+ R_BRACK@[429; 430) "]"
+ WHITESPACE@[430; 431) " "
+ SELF_PARAM@[431; 443)
+ AMP@[431; 432) "&"
+ LIFETIME@[432; 434) "\'a"
+ WHITESPACE@[434; 435) " "
+ MUT_KW@[435; 438) "mut"
+ WHITESPACE@[438; 439) " "
+ SELF_KW@[439; 443) "self"
+ R_PAREN@[443; 444) ")"
+ WHITESPACE@[444; 445) " "
+ BLOCK@[445; 447)
+ L_CURLY@[445; 446) "{"
+ R_CURLY@[446; 447) "}"
+ WHITESPACE@[447; 453) "\n "
+ FN_DEF@[453; 480)
+ FN_KW@[453; 455) "fn"
+ WHITESPACE@[455; 456) " "
+ NAME@[456; 457)
+ IDENT@[456; 457) "c"
+ PARAM_LIST@[457; 477)
+ L_PAREN@[457; 458) "("
+ ATTR@[458; 465)
+ POUND@[458; 459) "#"
+ TOKEN_TREE@[459; 465)
+ L_BRACK@[459; 460) "["
+ IDENT@[460; 464) "attr"
+ R_BRACK@[464; 465) "]"
+ WHITESPACE@[465; 466) " "
+ SELF_PARAM@[466; 476)
+ SELF_KW@[466; 470) "self"
+ COLON@[470; 471) ":"
+ WHITESPACE@[471; 472) " "
+ PATH_TYPE@[472; 476)
+ PATH@[472; 476)
+ PATH_SEGMENT@[472; 476)
+ NAME_REF@[472; 476)
+ IDENT@[472; 476) "Self"
+ R_PAREN@[476; 477) ")"
+ WHITESPACE@[477; 478) " "
+ BLOCK@[478; 480)
+ L_CURLY@[478; 479) "{"
+ R_CURLY@[479; 480) "}"
+ WHITESPACE@[480; 486) "\n "
+ FN_DEF@[486; 517)
+ FN_KW@[486; 488) "fn"
+ WHITESPACE@[488; 489) " "
+ NAME@[489; 490)
+ IDENT@[489; 490) "d"
+ PARAM_LIST@[490; 514)
+ L_PAREN@[490; 491) "("
+ ATTR@[491; 498)
+ POUND@[491; 492) "#"
+ TOKEN_TREE@[492; 498)
+ L_BRACK@[492; 493) "["
+ IDENT@[493; 497) "attr"
+ R_BRACK@[497; 498) "]"
+ WHITESPACE@[498; 499) " "
+ SELF_PARAM@[499; 513)
+ SELF_KW@[499; 503) "self"
+ COLON@[503; 504) ":"
+ WHITESPACE@[504; 505) " "
+ PATH_TYPE@[505; 513)
+ PATH@[505; 513)
+ PATH_SEGMENT@[505; 513)
+ NAME_REF@[505; 507)
+ IDENT@[505; 507) "Rc"
+ TYPE_ARG_LIST@[507; 513)
+ L_ANGLE@[507; 508) "<"
+ TYPE_ARG@[508; 512)
+ PATH_TYPE@[508; 512)
+ PATH@[508; 512)
+ PATH_SEGMENT@[508; 512)
+ NAME_REF@[508; 512)
+ IDENT@[508; 512) "Self"
+ R_ANGLE@[512; 513) ">"
+ R_PAREN@[513; 514) ")"
+ WHITESPACE@[514; 515) " "
+ BLOCK@[515; 517)
+ L_CURLY@[515; 516) "{"
+ R_CURLY@[516; 517) "}"
+ WHITESPACE@[517; 518) "\n"
+ R_CURLY@[518; 519) "}"