diff options
Diffstat (limited to 'src/parser/event_parser/grammar')
-rw-r--r-- | src/parser/event_parser/grammar/items.rs | 22 | ||||
-rw-r--r-- | src/parser/event_parser/grammar/mod.rs | 28 | ||||
-rw-r--r-- | src/parser/event_parser/grammar/paths.rs | 2 |
3 files changed, 24 insertions, 28 deletions
diff --git a/src/parser/event_parser/grammar/items.rs b/src/parser/event_parser/grammar/items.rs index 0638e3093..7fed5e83b 100644 --- a/src/parser/event_parser/grammar/items.rs +++ b/src/parser/event_parser/grammar/items.rs | |||
@@ -14,7 +14,7 @@ fn item(p: &mut Parser) { | |||
14 | let item = p.start(); | 14 | let item = p.start(); |
15 | attributes::outer_attributes(p); | 15 | attributes::outer_attributes(p); |
16 | visibility(p); | 16 | visibility(p); |
17 | let la = p.raw_lookahead(1); | 17 | let la = p.nth(1); |
18 | let item_kind = match p.current() { | 18 | let item_kind = match p.current() { |
19 | EXTERN_KW if la == CRATE_KW => { | 19 | EXTERN_KW if la == CRATE_KW => { |
20 | extern_crate_item(p); | 20 | extern_crate_item(p); |
@@ -171,7 +171,7 @@ fn use_item(p: &mut Parser) { | |||
171 | p.expect(SEMI); | 171 | p.expect(SEMI); |
172 | 172 | ||
173 | fn use_tree(p: &mut Parser) { | 173 | fn use_tree(p: &mut Parser) { |
174 | let la = p.raw_lookahead(1); | 174 | let la = p.nth(1); |
175 | let m = p.start(); | 175 | let m = p.start(); |
176 | match (p.current(), la) { | 176 | match (p.current(), la) { |
177 | (STAR, _) => { | 177 | (STAR, _) => { |
@@ -235,5 +235,21 @@ fn fn_item(p: &mut Parser) { | |||
235 | assert!(p.at(FN_KW)); | 235 | assert!(p.at(FN_KW)); |
236 | p.bump(); | 236 | p.bump(); |
237 | 237 | ||
238 | p.expect(IDENT) && p.expect(L_PAREN) && p.expect(R_PAREN) && p.curly_block(|_| ()); | 238 | p.expect(IDENT); |
239 | if p.at(L_PAREN) { | ||
240 | fn_value_parameters(p); | ||
241 | } else { | ||
242 | p.error().message("expected function arguments").emit(); | ||
243 | } | ||
244 | |||
245 | if p.at(L_CURLY) { | ||
246 | p.expect(L_CURLY); | ||
247 | p.expect(R_CURLY); | ||
248 | } | ||
249 | |||
250 | fn fn_value_parameters(p: &mut Parser) { | ||
251 | assert!(p.at(L_PAREN)); | ||
252 | p.bump(); | ||
253 | p.expect(R_PAREN); | ||
254 | } | ||
239 | } | 255 | } |
diff --git a/src/parser/event_parser/grammar/mod.rs b/src/parser/event_parser/grammar/mod.rs index b87f3ca8a..931193b5f 100644 --- a/src/parser/event_parser/grammar/mod.rs +++ b/src/parser/event_parser/grammar/mod.rs | |||
@@ -20,7 +20,7 @@ fn visibility(p: &mut Parser) { | |||
20 | let vis = p.start(); | 20 | let vis = p.start(); |
21 | p.bump(); | 21 | p.bump(); |
22 | if p.at(L_PAREN) { | 22 | if p.at(L_PAREN) { |
23 | match p.raw_lookahead(1) { | 23 | match p.nth(1) { |
24 | CRATE_KW | SELF_KW | SUPER_KW | IN_KW => { | 24 | CRATE_KW | SELF_KW | SUPER_KW | IN_KW => { |
25 | p.bump(); | 25 | p.bump(); |
26 | if p.bump() == IN_KW { | 26 | if p.bump() == IN_KW { |
@@ -57,7 +57,7 @@ impl<'p> Parser<'p> { | |||
57 | err.complete(self, ERROR); | 57 | err.complete(self, ERROR); |
58 | } | 58 | } |
59 | 59 | ||
60 | pub(crate) fn expect(&mut self, kind: SyntaxKind) -> bool { | 60 | fn expect(&mut self, kind: SyntaxKind) -> bool { |
61 | if self.at(kind) { | 61 | if self.at(kind) { |
62 | self.bump(); | 62 | self.bump(); |
63 | true | 63 | true |
@@ -77,39 +77,23 @@ impl<'p> Parser<'p> { | |||
77 | 77 | ||
78 | trait Lookahead: Copy { | 78 | trait Lookahead: Copy { |
79 | fn is_ahead(self, p: &Parser) -> bool; | 79 | fn is_ahead(self, p: &Parser) -> bool; |
80 | fn consume(p: &mut Parser); | ||
81 | } | 80 | } |
82 | 81 | ||
83 | impl Lookahead for SyntaxKind { | 82 | impl Lookahead for SyntaxKind { |
84 | fn is_ahead(self, p: &Parser) -> bool { | 83 | fn is_ahead(self, p: &Parser) -> bool { |
85 | p.current() == self | 84 | p.current() == self |
86 | } | 85 | } |
87 | |||
88 | fn consume(p: &mut Parser) { | ||
89 | p.bump(); | ||
90 | } | ||
91 | } | 86 | } |
92 | 87 | ||
93 | impl Lookahead for [SyntaxKind; 2] { | 88 | impl Lookahead for [SyntaxKind; 2] { |
94 | fn is_ahead(self, p: &Parser) -> bool { | 89 | fn is_ahead(self, p: &Parser) -> bool { |
95 | p.current() == self[0] && p.raw_lookahead(1) == self[1] | 90 | p.current() == self[0] && p.nth(1) == self[1] |
96 | } | ||
97 | |||
98 | fn consume(p: &mut Parser) { | ||
99 | p.bump(); | ||
100 | p.bump(); | ||
101 | } | 91 | } |
102 | } | 92 | } |
103 | 93 | ||
104 | impl Lookahead for [SyntaxKind; 3] { | 94 | impl Lookahead for [SyntaxKind; 3] { |
105 | fn is_ahead(self, p: &Parser) -> bool { | 95 | fn is_ahead(self, p: &Parser) -> bool { |
106 | p.current() == self[0] && p.raw_lookahead(1) == self[1] && p.raw_lookahead(2) == self[2] | 96 | p.current() == self[0] && p.nth(1) == self[1] && p.nth(2) == self[2] |
107 | } | ||
108 | |||
109 | fn consume(p: &mut Parser) { | ||
110 | p.bump(); | ||
111 | p.bump(); | ||
112 | p.bump(); | ||
113 | } | 97 | } |
114 | } | 98 | } |
115 | 99 | ||
@@ -121,8 +105,4 @@ impl<'a> Lookahead for AnyOf<'a> { | |||
121 | let curr = p.current(); | 105 | let curr = p.current(); |
122 | self.0.iter().any(|&k| k == curr) | 106 | self.0.iter().any(|&k| k == curr) |
123 | } | 107 | } |
124 | |||
125 | fn consume(p: &mut Parser) { | ||
126 | p.bump(); | ||
127 | } | ||
128 | } | 108 | } |
diff --git a/src/parser/event_parser/grammar/paths.rs b/src/parser/event_parser/grammar/paths.rs index 4e028073a..6c8a89f6c 100644 --- a/src/parser/event_parser/grammar/paths.rs +++ b/src/parser/event_parser/grammar/paths.rs | |||
@@ -12,7 +12,7 @@ pub(crate) fn use_path(p: &mut Parser) { | |||
12 | path_segment(p, true); | 12 | path_segment(p, true); |
13 | let mut qual = path.complete(p, PATH); | 13 | let mut qual = path.complete(p, PATH); |
14 | loop { | 14 | loop { |
15 | if p.at(COLONCOLON) && !items::is_use_tree_start(p.raw_lookahead(1)) { | 15 | if p.at(COLONCOLON) && !items::is_use_tree_start(p.nth(1)) { |
16 | let path = qual.precede(p); | 16 | let path = qual.precede(p); |
17 | p.bump(); | 17 | p.bump(); |
18 | path_segment(p, false); | 18 | path_segment(p, false); |