aboutsummaryrefslogtreecommitdiff
path: root/src/parser/event_parser/grammar/items.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser/event_parser/grammar/items.rs')
-rw-r--r--src/parser/event_parser/grammar/items.rs65
1 files changed, 34 insertions, 31 deletions
diff --git a/src/parser/event_parser/grammar/items.rs b/src/parser/event_parser/grammar/items.rs
index f96f4cc9c..4514f0dab 100644
--- a/src/parser/event_parser/grammar/items.rs
+++ b/src/parser/event_parser/grammar/items.rs
@@ -7,7 +7,7 @@ pub(super) fn mod_contents(p: &mut Parser) {
7 } 7 }
8} 8}
9 9
10fn item(p: &mut Parser){ 10fn item(p: &mut Parser) {
11 let attrs_start = p.mark(); 11 let attrs_start = p.mark();
12 attributes::outer_attributes(p); 12 attributes::outer_attributes(p);
13 visibility(p); 13 visibility(p);
@@ -51,7 +51,7 @@ fn struct_item(p: &mut Parser) {
51 fn struct_inner(p: &mut Parser) { 51 fn struct_inner(p: &mut Parser) {
52 if !p.expect(IDENT) { 52 if !p.expect(IDENT) {
53 p.finish(); 53 p.finish();
54 return 54 return;
55 } 55 }
56 generic_parameters(p); 56 generic_parameters(p);
57 match p.current() { 57 match p.current() {
@@ -60,31 +60,31 @@ fn struct_item(p: &mut Parser) {
60 match p.current() { 60 match p.current() {
61 SEMI => { 61 SEMI => {
62 p.bump(); 62 p.bump();
63 return 63 return;
64 } 64 }
65 L_CURLY => named_fields(p), 65 L_CURLY => named_fields(p),
66 _ => { //TODO: special case `(` error message 66 _ => { //TODO: special case `(` error message
67 p.error() 67 p.error()
68 .message("expected `;` or `{`") 68 .message("expected `;` or `{`")
69 .emit(); 69 .emit();
70 return 70 return;
71 } 71 }
72 } 72 }
73 } 73 }
74 SEMI => { 74 SEMI => {
75 p.bump(); 75 p.bump();
76 return 76 return;
77 } 77 }
78 L_CURLY => named_fields(p), 78 L_CURLY => named_fields(p),
79 L_PAREN => { 79 L_PAREN => {
80 tuple_fields(p); 80 tuple_fields(p);
81 p.expect(SEMI); 81 p.expect(SEMI);
82 }, 82 }
83 _ => { 83 _ => {
84 p.error() 84 p.error()
85 .message("expected `;`, `{`, or `(`") 85 .message("expected `;`, `{`, or `(`")
86 .emit(); 86 .emit();
87 return 87 return;
88 } 88 }
89 } 89 }
90 } 90 }
@@ -108,7 +108,7 @@ fn named_fields(p: &mut Parser) {
108 108
109fn tuple_fields(p: &mut Parser) { 109fn tuple_fields(p: &mut Parser) {
110 if !p.expect(L_PAREN) { 110 if !p.expect(L_PAREN) {
111 return 111 return;
112 } 112 }
113 comma_list(p, R_PAREN, |p| { 113 comma_list(p, R_PAREN, |p| {
114 tuple_field(p); 114 tuple_field(p);
@@ -124,11 +124,9 @@ fn tuple_fields(p: &mut Parser) {
124 } 124 }
125} 125}
126 126
127fn generic_parameters(_: &mut Parser) { 127fn generic_parameters(_: &mut Parser) {}
128}
129 128
130fn where_clause(_: &mut Parser) { 129fn where_clause(_: &mut Parser) {}
131}
132 130
133fn extern_crate_item(p: &mut Parser) { 131fn extern_crate_item(p: &mut Parser) {
134 p.start(EXTERN_CRATE_ITEM); 132 p.start(EXTERN_CRATE_ITEM);
@@ -168,24 +166,29 @@ fn use_item(p: &mut Parser) {
168 p.expect(SEMI); 166 p.expect(SEMI);
169 p.finish(); 167 p.finish();
170 168
171 fn use_tree(p: &mut Parser) -> bool{ 169 fn use_tree(p: &mut Parser) -> bool {
172 if node_if(p, STAR, USE_TREE, |_| ()) { 170 let la = p.raw_lookahead(1);
173 return true 171 match (p.current(), la) {
174 } 172 (STAR, _) => {
175 if node_if(p, [COLONCOLON, STAR], USE_TREE, |_| ()) { 173 p.start(USE_TREE);
176 return true 174 p.bump();
177 } 175 }
178 if [COLONCOLON, L_CURLY].is_ahead(p) || L_CURLY.is_ahead(p) { 176 (COLONCOLON, STAR) => {
179 node(p, USE_TREE, |p| { 177 p.start(USE_TREE);
180 p.eat(COLONCOLON); 178 p.bump();
179 p.bump();
180 }
181 (L_CURLY, _) | (COLONCOLON, L_CURLY) => {
182 p.start(USE_TREE);
183 if p.at(COLONCOLON) {
184 p.bump();
185 }
181 p.curly_block(|p| { 186 p.curly_block(|p| {
182 comma_list(p, EOF, use_tree); 187 comma_list(p, EOF, use_tree);
183 }); 188 });
184 }); 189 }
185 return true; 190 _ if paths::is_path_start(p) => {
186 } 191 p.start(USE_TREE);
187 if paths::is_path_start(p) {
188 node(p, USE_TREE, |p| {
189 paths::use_path(p); 192 paths::use_path(p);
190 match p.current() { 193 match p.current() {
191 AS_KW => { 194 AS_KW => {
@@ -212,15 +215,15 @@ fn use_item(p: &mut Parser) {
212 } 215 }
213 _ => (), 216 _ => (),
214 } 217 }
215 }); 218 }
216 return true; 219 _ => return false,
217 } 220 }
218 false 221 p.finish();
222 return true;
219 } 223 }
220} 224}
221 225
222 226
223
224fn fn_item(p: &mut Parser) { 227fn fn_item(p: &mut Parser) {
225 p.start(FN_ITEM); 228 p.start(FN_ITEM);
226 229