Skip to content

Commit 30e243a

Browse files
committed
libsyntax: Give a nice error message when view items are used anywhere other than the top of a module.
This is a step on the way to parsing "extern mod foo;"
1 parent 81e6bb1 commit 30e243a

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

src/libsyntax/parse/parser.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3119,6 +3119,30 @@ class parser {
31193119
return iovi_item(self.mk_item(lo, self.last_span.hi, ident, item_,
31203120
visibility,
31213121
maybe_append(attrs, extra_attrs)));
3122+
} else if self.eat_keyword(~"use") {
3123+
let view_item = self.parse_use();
3124+
return iovi_view_item(@{
3125+
node: view_item,
3126+
attrs: attrs,
3127+
vis: visibility,
3128+
span: mk_sp(lo, self.last_span.hi)
3129+
});
3130+
} else if self.eat_keyword(~"import") {
3131+
let view_paths = self.parse_view_paths();
3132+
return iovi_view_item(@{
3133+
node: view_item_import(view_paths),
3134+
attrs: attrs,
3135+
vis: visibility,
3136+
span: mk_sp(lo, self.last_span.hi)
3137+
});
3138+
} else if self.eat_keyword(~"export") {
3139+
let view_paths = self.parse_view_paths();
3140+
return iovi_view_item(@{
3141+
node: view_item_export(view_paths),
3142+
attrs: attrs,
3143+
vis: visibility,
3144+
span: mk_sp(lo, self.last_span.hi)
3145+
});
31223146
} else if !self.is_any_keyword(copy self.token)
31233147
&& self.look_ahead(1) == token::NOT
31243148
&& is_plain_ident(self.look_ahead(2)) {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
use std;
2+
3+
fn f() {
4+
}
5+
6+
import std::io::println; //~ ERROR view items must be declared at the top
7+
8+
fn main() {
9+
}
10+

0 commit comments

Comments
 (0)