aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-07-31 18:48:45 +0100
committerAleksey Kladov <[email protected]>2018-07-31 18:48:45 +0100
commitf4c106f86a4fbb91f36aac59a6a98fff9d3c5c40 (patch)
tree6d81877635b5b0c05553f9535322c3edb1d8639b
parent599ca1ad890f7b8e1e3919f1727c21dad353f595 (diff)
Lifetimes in self param
-rw-r--r--src/parser/grammar/mod.rs14
-rw-r--r--tests/data/parser/inline/0055_self_param.rs3
-rw-r--r--tests/data/parser/inline/0055_self_param.txt79
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 @@
1impl S { 1impl 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 @@
1FILE@[0; 80) 1FILE@[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)