diff options
author | Aleksey Kladov <[email protected]> | 2018-01-20 18:49:58 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2018-01-20 18:49:58 +0000 |
commit | be60d5aa6669a74e92495288f44b7f9258a8518f (patch) | |
tree | b115c6605755e903902ec2971ce2529cb87e3b8a /src/parser/event_parser/grammar/paths.rs | |
parent | 111743d82c31bcaeb3cd7abbb261c0e038c2d909 (diff) |
Drop more high-order stuff
Diffstat (limited to 'src/parser/event_parser/grammar/paths.rs')
-rw-r--r-- | src/parser/event_parser/grammar/paths.rs | 59 |
1 files changed, 29 insertions, 30 deletions
diff --git a/src/parser/event_parser/grammar/paths.rs b/src/parser/event_parser/grammar/paths.rs index 45f3cb779..f5124cfce 100644 --- a/src/parser/event_parser/grammar/paths.rs +++ b/src/parser/event_parser/grammar/paths.rs | |||
@@ -1,6 +1,6 @@ | |||
1 | use super::*; | 1 | use super::*; |
2 | 2 | ||
3 | pub (crate) fn is_path_start(p: &Parser) -> bool { | 3 | pub(crate) fn is_path_start(p: &Parser) -> bool { |
4 | AnyOf(&[IDENT, SELF_KW, SUPER_KW, COLONCOLON]).is_ahead(p) | 4 | AnyOf(&[IDENT, SELF_KW, SUPER_KW, COLONCOLON]).is_ahead(p) |
5 | } | 5 | } |
6 | 6 | ||
@@ -9,39 +9,38 @@ pub(crate) fn use_path(p: &mut Parser) { | |||
9 | return; | 9 | return; |
10 | } | 10 | } |
11 | let mut prev = p.mark(); | 11 | let mut prev = p.mark(); |
12 | node(p, PATH, |p| { | 12 | p.start(PATH); |
13 | path_segment(p, true); | 13 | path_segment(p, true); |
14 | }); | 14 | p.finish(); |
15 | repeat(p, |p| { | 15 | loop { |
16 | let curr = p.mark(); | 16 | let curr = p.mark(); |
17 | if p.current() == COLONCOLON && !items::is_use_tree_start(p.raw_lookahead(1)) { | 17 | if p.at(COLONCOLON) && !items::is_use_tree_start(p.raw_lookahead(1)) { |
18 | node(p, PATH, |p| { | 18 | p.start(PATH); |
19 | p.bump(); | 19 | p.bump(); |
20 | path_segment(p, false); | 20 | path_segment(p, false); |
21 | p.forward_parent(prev, curr); | 21 | p.forward_parent(prev, curr); |
22 | prev = curr; | 22 | prev = curr; |
23 | }); | 23 | p.finish(); |
24 | true | ||
25 | } else { | 24 | } else { |
26 | false | 25 | break; |
27 | } | 26 | } |
28 | }); | 27 | } |
29 | } | 28 | } |
30 | 29 | ||
31 | fn path_segment(p: &mut Parser, first: bool) { | 30 | fn path_segment(p: &mut Parser, first: bool) { |
32 | node(p, PATH_SEGMENT, |p| { | 31 | p.start(PATH_SEGMENT); |
33 | if first { | 32 | if first { |
34 | p.eat(COLONCOLON); | 33 | p.eat(COLONCOLON); |
34 | } | ||
35 | match p.current() { | ||
36 | IDENT | SELF_KW | SUPER_KW => { | ||
37 | p.bump(); | ||
35 | } | 38 | } |
36 | match p.current() { | 39 | _ => { |
37 | IDENT | SELF_KW | SUPER_KW => { | 40 | p.error() |
38 | p.bump(); | 41 | .message("expected identifier") |
39 | }, | 42 | .emit(); |
40 | _ => { | 43 | } |
41 | p.error() | 44 | }; |
42 | .message("expected identifier") | 45 | p.finish(); |
43 | .emit(); | 46 | } |
44 | } | ||
45 | }; | ||
46 | }) | ||
47 | } \ No newline at end of file | ||