diff options
-rw-r--r-- | src/parser/grammar/mod.rs | 14 | ||||
-rw-r--r-- | tests/data/parser/inline/0055_self_param.rs | 3 | ||||
-rw-r--r-- | tests/data/parser/inline/0055_self_param.txt | 79 |
3 files changed, 61 insertions, 35 deletions
diff --git a/src/parser/grammar/mod.rs b/src/parser/grammar/mod.rs index b8847fb68..53ef28181 100644 --- a/src/parser/grammar/mod.rs +++ b/src/parser/grammar/mod.rs | |||
@@ -126,15 +126,19 @@ fn fn_value_parameters(p: &mut Parser) { | |||
126 | // impl S { | 126 | // impl S { |
127 | // fn a(self) {} | 127 | // fn a(self) {} |
128 | // fn b(&self,) {} | 128 | // fn b(&self,) {} |
129 | // fn c(&mut self, x: i32) {} | 129 | // fn c(&'a self,) {} |
130 | // fn d(&'a mut self, x: i32) {} | ||
130 | // } | 131 | // } |
131 | fn self_param(p: &mut Parser) { | 132 | fn self_param(p: &mut Parser) { |
132 | let la1 = p.nth(1); | 133 | let la1 = p.nth(1); |
133 | let la2 = p.nth(2); | 134 | let la2 = p.nth(2); |
134 | let n_toks = match (p.current(), la1, la2) { | 135 | let la3 = p.nth(3); |
135 | (SELF_KW, _, _) => 1, | 136 | let n_toks = match (p.current(), la1, la2, la3) { |
136 | (AMPERSAND, SELF_KW, _) => 2, | 137 | (SELF_KW, _, _, _) => 1, |
137 | (AMPERSAND, MUT_KW, SELF_KW) => 3, | 138 | (AMPERSAND, SELF_KW, _, _) => 2, |
139 | (AMPERSAND, MUT_KW, SELF_KW, _) => 3, | ||
140 | (AMPERSAND, LIFETIME, SELF_KW, _) => 3, | ||
141 | (AMPERSAND, LIFETIME, MUT_KW, SELF_KW) => 4, | ||
138 | _ => return, | 142 | _ => return, |
139 | }; | 143 | }; |
140 | let m = p.start(); | 144 | let m = p.start(); |
diff --git a/tests/data/parser/inline/0055_self_param.rs b/tests/data/parser/inline/0055_self_param.rs index 2890c27e2..7bb1ca50c 100644 --- a/tests/data/parser/inline/0055_self_param.rs +++ b/tests/data/parser/inline/0055_self_param.rs | |||
@@ -1,5 +1,6 @@ | |||
1 | impl S { | 1 | impl S { |
2 | fn a(self) {} | 2 | fn a(self) {} |
3 | fn b(&self,) {} | 3 | fn b(&self,) {} |
4 | fn c(&mut self, x: i32) {} | 4 | fn c(&'a self,) {} |
5 | fn d(&'a mut self, x: i32) {} | ||
5 | } | 6 | } |
diff --git a/tests/data/parser/inline/0055_self_param.txt b/tests/data/parser/inline/0055_self_param.txt index 70aa81207..9ea55f589 100644 --- a/tests/data/parser/inline/0055_self_param.txt +++ b/tests/data/parser/inline/0055_self_param.txt | |||
@@ -1,5 +1,5 @@ | |||
1 | FILE@[0; 80) | 1 | FILE@[0; 106) |
2 | IMPL_ITEM@[0; 80) | 2 | IMPL_ITEM@[0; 106) |
3 | IMPL_KW@[0; 4) | 3 | IMPL_KW@[0; 4) |
4 | PATH_TYPE@[4; 7) | 4 | PATH_TYPE@[4; 7) |
5 | PATH@[4; 7) | 5 | PATH@[4; 7) |
@@ -42,36 +42,57 @@ FILE@[0; 80) | |||
42 | L_CURLY@[44; 45) | 42 | L_CURLY@[44; 45) |
43 | R_CURLY@[45; 46) | 43 | R_CURLY@[45; 46) |
44 | WHITESPACE@[46; 51) | 44 | WHITESPACE@[46; 51) |
45 | FN_ITEM@[51; 78) | 45 | FN_ITEM@[51; 74) |
46 | FN_KW@[51; 53) | 46 | FN_KW@[51; 53) |
47 | NAME@[53; 55) | 47 | NAME@[53; 55) |
48 | WHITESPACE@[53; 54) | 48 | WHITESPACE@[53; 54) |
49 | IDENT@[54; 55) "c" | 49 | IDENT@[54; 55) "c" |
50 | PARAM_LIST@[55; 75) | 50 | PARAM_LIST@[55; 67) |
51 | L_PAREN@[55; 56) | 51 | L_PAREN@[55; 56) |
52 | SELF_PARAM@[56; 65) | 52 | SELF_PARAM@[56; 64) |
53 | AMPERSAND@[56; 57) | 53 | AMPERSAND@[56; 57) |
54 | MUT_KW@[57; 60) | 54 | LIFETIME@[57; 59) "'a" |
55 | WHITESPACE@[60; 61) | 55 | WHITESPACE@[59; 60) |
56 | SELF_KW@[61; 65) | 56 | SELF_KW@[60; 64) |
57 | COMMA@[65; 66) | 57 | COMMA@[64; 65) |
58 | VALUE_PARAMETER@[66; 73) | 58 | R_PAREN@[65; 66) |
59 | BIND_PAT@[66; 68) | 59 | WHITESPACE@[66; 67) |
60 | NAME@[66; 68) | 60 | BLOCK@[67; 74) |
61 | WHITESPACE@[66; 67) | 61 | L_CURLY@[67; 68) |
62 | IDENT@[67; 68) "x" | 62 | R_CURLY@[68; 69) |
63 | COLON@[68; 69) | 63 | WHITESPACE@[69; 74) |
64 | PATH_TYPE@[69; 73) | 64 | FN_ITEM@[74; 104) |
65 | PATH@[69; 73) | 65 | FN_KW@[74; 76) |
66 | PATH_SEGMENT@[69; 73) | 66 | NAME@[76; 78) |
67 | NAME_REF@[69; 73) | 67 | WHITESPACE@[76; 77) |
68 | WHITESPACE@[69; 70) | 68 | IDENT@[77; 78) "d" |
69 | IDENT@[70; 73) "i32" | 69 | PARAM_LIST@[78; 101) |
70 | R_PAREN@[73; 74) | 70 | L_PAREN@[78; 79) |
71 | WHITESPACE@[74; 75) | 71 | SELF_PARAM@[79; 91) |
72 | BLOCK@[75; 78) | 72 | AMPERSAND@[79; 80) |
73 | L_CURLY@[75; 76) | 73 | LIFETIME@[80; 82) "'a" |
74 | R_CURLY@[76; 77) | 74 | WHITESPACE@[82; 83) |
75 | WHITESPACE@[77; 78) | 75 | MUT_KW@[83; 86) |
76 | R_CURLY@[78; 79) | 76 | WHITESPACE@[86; 87) |
77 | WHITESPACE@[79; 80) | 77 | SELF_KW@[87; 91) |
78 | COMMA@[91; 92) | ||
79 | VALUE_PARAMETER@[92; 99) | ||
80 | BIND_PAT@[92; 94) | ||
81 | NAME@[92; 94) | ||
82 | WHITESPACE@[92; 93) | ||
83 | IDENT@[93; 94) "x" | ||
84 | COLON@[94; 95) | ||
85 | PATH_TYPE@[95; 99) | ||
86 | PATH@[95; 99) | ||
87 | PATH_SEGMENT@[95; 99) | ||
88 | NAME_REF@[95; 99) | ||
89 | WHITESPACE@[95; 96) | ||
90 | IDENT@[96; 99) "i32" | ||
91 | R_PAREN@[99; 100) | ||
92 | WHITESPACE@[100; 101) | ||
93 | BLOCK@[101; 104) | ||
94 | L_CURLY@[101; 102) | ||
95 | R_CURLY@[102; 103) | ||
96 | WHITESPACE@[103; 104) | ||
97 | R_CURLY@[104; 105) | ||
98 | WHITESPACE@[105; 106) | ||