Lifetimes in self param

This commit is contained in:
Aleksey Kladov 2018-07-31 20:48:45 +03:00
parent 599ca1ad89
commit f4c106f86a
3 changed files with 61 additions and 35 deletions

View File

@ -126,15 +126,19 @@ fn fn_value_parameters(p: &mut Parser) {
// impl S {
// fn a(self) {}
// fn b(&self,) {}
// fn c(&mut self, x: i32) {}
// fn c(&'a self,) {}
// fn d(&'a mut self, x: i32) {}
// }
fn self_param(p: &mut Parser) {
let la1 = p.nth(1);
let la2 = p.nth(2);
let n_toks = match (p.current(), la1, la2) {
(SELF_KW, _, _) => 1,
(AMPERSAND, SELF_KW, _) => 2,
(AMPERSAND, MUT_KW, SELF_KW) => 3,
let la3 = p.nth(3);
let n_toks = match (p.current(), la1, la2, la3) {
(SELF_KW, _, _, _) => 1,
(AMPERSAND, SELF_KW, _, _) => 2,
(AMPERSAND, MUT_KW, SELF_KW, _) => 3,
(AMPERSAND, LIFETIME, SELF_KW, _) => 3,
(AMPERSAND, LIFETIME, MUT_KW, SELF_KW) => 4,
_ => return,
};
let m = p.start();

View File

@ -1,5 +1,6 @@
impl S {
fn a(self) {}
fn b(&self,) {}
fn c(&mut self, x: i32) {}
fn c(&'a self,) {}
fn d(&'a mut self, x: i32) {}
}

View File

@ -1,5 +1,5 @@
FILE@[0; 80)
IMPL_ITEM@[0; 80)
FILE@[0; 106)
IMPL_ITEM@[0; 106)
IMPL_KW@[0; 4)
PATH_TYPE@[4; 7)
PATH@[4; 7)
@ -42,36 +42,57 @@ FILE@[0; 80)
L_CURLY@[44; 45)
R_CURLY@[45; 46)
WHITESPACE@[46; 51)
FN_ITEM@[51; 78)
FN_ITEM@[51; 74)
FN_KW@[51; 53)
NAME@[53; 55)
WHITESPACE@[53; 54)
IDENT@[54; 55) "c"
PARAM_LIST@[55; 75)
PARAM_LIST@[55; 67)
L_PAREN@[55; 56)
SELF_PARAM@[56; 65)
SELF_PARAM@[56; 64)
AMPERSAND@[56; 57)
MUT_KW@[57; 60)
WHITESPACE@[60; 61)
SELF_KW@[61; 65)
COMMA@[65; 66)
VALUE_PARAMETER@[66; 73)
BIND_PAT@[66; 68)
NAME@[66; 68)
WHITESPACE@[66; 67)
IDENT@[67; 68) "x"
COLON@[68; 69)
PATH_TYPE@[69; 73)
PATH@[69; 73)
PATH_SEGMENT@[69; 73)
NAME_REF@[69; 73)
WHITESPACE@[69; 70)
IDENT@[70; 73) "i32"
R_PAREN@[73; 74)
WHITESPACE@[74; 75)
BLOCK@[75; 78)
L_CURLY@[75; 76)
R_CURLY@[76; 77)
WHITESPACE@[77; 78)
R_CURLY@[78; 79)
WHITESPACE@[79; 80)
LIFETIME@[57; 59) "'a"
WHITESPACE@[59; 60)
SELF_KW@[60; 64)
COMMA@[64; 65)
R_PAREN@[65; 66)
WHITESPACE@[66; 67)
BLOCK@[67; 74)
L_CURLY@[67; 68)
R_CURLY@[68; 69)
WHITESPACE@[69; 74)
FN_ITEM@[74; 104)
FN_KW@[74; 76)
NAME@[76; 78)
WHITESPACE@[76; 77)
IDENT@[77; 78) "d"
PARAM_LIST@[78; 101)
L_PAREN@[78; 79)
SELF_PARAM@[79; 91)
AMPERSAND@[79; 80)
LIFETIME@[80; 82) "'a"
WHITESPACE@[82; 83)
MUT_KW@[83; 86)
WHITESPACE@[86; 87)
SELF_KW@[87; 91)
COMMA@[91; 92)
VALUE_PARAMETER@[92; 99)
BIND_PAT@[92; 94)
NAME@[92; 94)
WHITESPACE@[92; 93)
IDENT@[93; 94) "x"
COLON@[94; 95)
PATH_TYPE@[95; 99)
PATH@[95; 99)
PATH_SEGMENT@[95; 99)
NAME_REF@[95; 99)
WHITESPACE@[95; 96)
IDENT@[96; 99) "i32"
R_PAREN@[99; 100)
WHITESPACE@[100; 101)
BLOCK@[101; 104)
L_CURLY@[101; 102)
R_CURLY@[102; 103)
WHITESPACE@[103; 104)
R_CURLY@[104; 105)
WHITESPACE@[105; 106)