diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-01-28 10:02:15 +0000 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-01-28 10:02:15 +0000 |
commit | 37ee4c4c2afc1df536f50a776ac16dab69a67058 (patch) | |
tree | d5fa1fb60be28d819300eb4aec9df0dfe6200303 | |
parent | 469654e08867b60c8a499fb3751a1c26e0b90397 (diff) | |
parent | 0663c24222ebb2da10c26f690ad508e7b1fae8f9 (diff) |
Merge #23
23: Simplify item parsing r=matklad a=matklad
-rw-r--r-- | src/parser/event_parser/grammar/items.rs | 9 | ||||
-rw-r--r-- | src/parser/event_parser/grammar/mod.rs | 2 | ||||
-rw-r--r-- | tests/data/parser/err/0007_stray_curly_in_file.rs | 9 | ||||
-rw-r--r-- | tests/data/parser/err/0007_stray_curly_in_file.txt | 28 |
4 files changed, 44 insertions, 4 deletions
diff --git a/src/parser/event_parser/grammar/items.rs b/src/parser/event_parser/grammar/items.rs index e569e5047..0638e3093 100644 --- a/src/parser/event_parser/grammar/items.rs +++ b/src/parser/event_parser/grammar/items.rs | |||
@@ -1,8 +1,8 @@ | |||
1 | use super::*; | 1 | use super::*; |
2 | 2 | ||
3 | pub(super) fn mod_contents(p: &mut Parser) { | 3 | pub(super) fn mod_contents(p: &mut Parser, stop_on_r_curly: bool) { |
4 | attributes::inner_attributes(p); | 4 | attributes::inner_attributes(p); |
5 | while !p.at(EOF) { | 5 | while !p.at(EOF) && !(stop_on_r_curly && p.at(R_CURLY)) { |
6 | item(p); | 6 | item(p); |
7 | } | 7 | } |
8 | } | 8 | } |
@@ -152,7 +152,10 @@ fn mod_item(p: &mut Parser) { | |||
152 | p.bump(); | 152 | p.bump(); |
153 | 153 | ||
154 | if p.expect(IDENT) && !p.eat(SEMI) { | 154 | if p.expect(IDENT) && !p.eat(SEMI) { |
155 | p.curly_block(mod_contents); | 155 | if p.expect(L_CURLY) { |
156 | mod_contents(p, true); | ||
157 | p.expect(R_CURLY); | ||
158 | } | ||
156 | } | 159 | } |
157 | } | 160 | } |
158 | 161 | ||
diff --git a/src/parser/event_parser/grammar/mod.rs b/src/parser/event_parser/grammar/mod.rs index 82f8b7f3e..b87f3ca8a 100644 --- a/src/parser/event_parser/grammar/mod.rs +++ b/src/parser/event_parser/grammar/mod.rs | |||
@@ -11,7 +11,7 @@ mod paths; | |||
11 | pub(crate) fn file(p: &mut Parser) { | 11 | pub(crate) fn file(p: &mut Parser) { |
12 | let file = p.start(); | 12 | let file = p.start(); |
13 | p.eat(SHEBANG); | 13 | p.eat(SHEBANG); |
14 | items::mod_contents(p); | 14 | items::mod_contents(p, false); |
15 | file.complete(p, FILE); | 15 | file.complete(p, FILE); |
16 | } | 16 | } |
17 | 17 | ||
diff --git a/tests/data/parser/err/0007_stray_curly_in_file.rs b/tests/data/parser/err/0007_stray_curly_in_file.rs new file mode 100644 index 000000000..dc869fb78 --- /dev/null +++ b/tests/data/parser/err/0007_stray_curly_in_file.rs | |||
@@ -0,0 +1,9 @@ | |||
1 | } | ||
2 | |||
3 | struct S; | ||
4 | |||
5 | } | ||
6 | |||
7 | fn foo(){} | ||
8 | |||
9 | } | ||
diff --git a/tests/data/parser/err/0007_stray_curly_in_file.txt b/tests/data/parser/err/0007_stray_curly_in_file.txt new file mode 100644 index 000000000..04bf17bc7 --- /dev/null +++ b/tests/data/parser/err/0007_stray_curly_in_file.txt | |||
@@ -0,0 +1,28 @@ | |||
1 | FILE@[0; 31) | ||
2 | ERROR@[0; 3) | ||
3 | err: `expected item` | ||
4 | R_CURLY@[0; 1) | ||
5 | WHITESPACE@[1; 3) | ||
6 | STRUCT_ITEM@[3; 14) | ||
7 | STRUCT_KW@[3; 9) | ||
8 | WHITESPACE@[9; 10) | ||
9 | IDENT@[10; 11) | ||
10 | SEMI@[11; 12) | ||
11 | WHITESPACE@[12; 14) | ||
12 | ERROR@[14; 17) | ||
13 | err: `expected item` | ||
14 | R_CURLY@[14; 15) | ||
15 | WHITESPACE@[15; 17) | ||
16 | FN_ITEM@[17; 29) | ||
17 | FN_KW@[17; 19) | ||
18 | WHITESPACE@[19; 20) | ||
19 | IDENT@[20; 23) | ||
20 | L_PAREN@[23; 24) | ||
21 | R_PAREN@[24; 25) | ||
22 | L_CURLY@[25; 26) | ||
23 | R_CURLY@[26; 27) | ||
24 | WHITESPACE@[27; 29) | ||
25 | ERROR@[29; 31) | ||
26 | err: `expected item` | ||
27 | R_CURLY@[29; 30) | ||
28 | WHITESPACE@[30; 31) | ||