Skip to content

Commit 9e4943c

Browse files
committed
Parse, add to AST, and otherwise ignore 'export' view items. Need to add support to resolve.
1 parent d33110e commit 9e4943c

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

src/comp/front/ast.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@ type view_item = spanned[view_item_];
279279
tag view_item_ {
280280
view_item_use(ident, vec[@meta_item], def_id);
281281
view_item_import(ident, vec[ident], def_id, option.t[def]);
282+
view_item_export(ident);
282283
}
283284

284285
type item = spanned[item_];
@@ -306,6 +307,11 @@ fn index_view_item(mod_index index, @view_item it) {
306307
case(ast.view_item_import(?def_ident,_,_,_)) {
307308
index.insert(def_ident, ast.mie_view_item(it));
308309
}
310+
case(ast.view_item_export(_)) {
311+
// NB: don't index these, they might collide with
312+
// the import or use that they're exporting. Have
313+
// to do linear search for exports.
314+
}
309315
}
310316
}
311317

src/comp/front/parser.rs

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2187,31 +2187,43 @@ impure fn parse_import(parser p) -> @ast.view_item {
21872187
fail;
21882188
}
21892189

2190-
impure fn parse_use_or_import(parser p) -> @ast.view_item {
2190+
impure fn parse_export(parser p) -> @ast.view_item {
2191+
auto lo = p.get_span();
2192+
expect(p, token.EXPORT);
2193+
auto id = parse_ident(p);
2194+
auto hi = p.get_span();
2195+
expect(p, token.SEMI);
2196+
ret @spanned(lo, hi, ast.view_item_export(id));
2197+
}
2198+
2199+
impure fn parse_view_item(parser p) -> @ast.view_item {
21912200
alt (p.peek()) {
21922201
case (token.USE) {
21932202
ret parse_use(p);
21942203
}
21952204
case (token.IMPORT) {
21962205
ret parse_import(p);
21972206
}
2207+
case (token.EXPORT) {
2208+
ret parse_export(p);
2209+
}
21982210
}
21992211
}
22002212

2201-
fn is_use_or_import(token.token t) -> bool {
2202-
if (t == token.USE) {
2203-
ret true;
2204-
}
2205-
if (t == token.IMPORT) {
2206-
ret true;
2213+
fn is_view_item(token.token t) -> bool {
2214+
alt (t) {
2215+
case (token.USE) { ret true; }
2216+
case (token.IMPORT) { ret true; }
2217+
case (token.EXPORT) { ret true; }
2218+
case (_) {}
22072219
}
22082220
ret false;
22092221
}
22102222

22112223
impure fn parse_view(parser p, ast.mod_index index) -> vec[@ast.view_item] {
22122224
let vec[@ast.view_item] items = vec();
2213-
while (is_use_or_import(p.peek())) {
2214-
auto item = parse_use_or_import(p);
2225+
while (is_view_item(p.peek())) {
2226+
auto item = parse_view_item(p);
22152227
items += vec(item);
22162228

22172229
ast.index_view_item(index, item);
@@ -2305,12 +2317,17 @@ impure fn parse_crate_directive(parser p) -> ast.crate_directive
23052317
}
23062318

23072319
case (token.USE) {
2308-
auto vi = parse_use_or_import(p);
2320+
auto vi = parse_view_item(p);
23092321
ret spanned(lo, vi.span, ast.cdir_view_item(vi));
23102322
}
23112323

23122324
case (token.IMPORT) {
2313-
auto vi = parse_use_or_import(p);
2325+
auto vi = parse_view_item(p);
2326+
ret spanned(lo, vi.span, ast.cdir_view_item(vi));
2327+
}
2328+
2329+
case (token.EXPORT) {
2330+
auto vi = parse_view_item(p);
23142331
ret spanned(lo, vi.span, ast.cdir_view_item(vi));
23152332
}
23162333

0 commit comments

Comments
 (0)