Parse, add to AST, and otherwise ignore 'export' view items. Need to add support to resolve.
This commit is contained in:
parent
d33110ebfc
commit
9e4943c922
2 changed files with 34 additions and 11 deletions
|
@ -279,6 +279,7 @@ type view_item = spanned[view_item_];
|
||||||
tag view_item_ {
|
tag view_item_ {
|
||||||
view_item_use(ident, vec[@meta_item], def_id);
|
view_item_use(ident, vec[@meta_item], def_id);
|
||||||
view_item_import(ident, vec[ident], def_id, option.t[def]);
|
view_item_import(ident, vec[ident], def_id, option.t[def]);
|
||||||
|
view_item_export(ident);
|
||||||
}
|
}
|
||||||
|
|
||||||
type item = spanned[item_];
|
type item = spanned[item_];
|
||||||
|
@ -306,6 +307,11 @@ fn index_view_item(mod_index index, @view_item it) {
|
||||||
case(ast.view_item_import(?def_ident,_,_,_)) {
|
case(ast.view_item_import(?def_ident,_,_,_)) {
|
||||||
index.insert(def_ident, ast.mie_view_item(it));
|
index.insert(def_ident, ast.mie_view_item(it));
|
||||||
}
|
}
|
||||||
|
case(ast.view_item_export(_)) {
|
||||||
|
// NB: don't index these, they might collide with
|
||||||
|
// the import or use that they're exporting. Have
|
||||||
|
// to do linear search for exports.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2187,7 +2187,16 @@ impure fn parse_import(parser p) -> @ast.view_item {
|
||||||
fail;
|
fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
impure fn parse_use_or_import(parser p) -> @ast.view_item {
|
impure fn parse_export(parser p) -> @ast.view_item {
|
||||||
|
auto lo = p.get_span();
|
||||||
|
expect(p, token.EXPORT);
|
||||||
|
auto id = parse_ident(p);
|
||||||
|
auto hi = p.get_span();
|
||||||
|
expect(p, token.SEMI);
|
||||||
|
ret @spanned(lo, hi, ast.view_item_export(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
impure fn parse_view_item(parser p) -> @ast.view_item {
|
||||||
alt (p.peek()) {
|
alt (p.peek()) {
|
||||||
case (token.USE) {
|
case (token.USE) {
|
||||||
ret parse_use(p);
|
ret parse_use(p);
|
||||||
|
@ -2195,23 +2204,26 @@ impure fn parse_use_or_import(parser p) -> @ast.view_item {
|
||||||
case (token.IMPORT) {
|
case (token.IMPORT) {
|
||||||
ret parse_import(p);
|
ret parse_import(p);
|
||||||
}
|
}
|
||||||
|
case (token.EXPORT) {
|
||||||
|
ret parse_export(p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_use_or_import(token.token t) -> bool {
|
fn is_view_item(token.token t) -> bool {
|
||||||
if (t == token.USE) {
|
alt (t) {
|
||||||
ret true;
|
case (token.USE) { ret true; }
|
||||||
}
|
case (token.IMPORT) { ret true; }
|
||||||
if (t == token.IMPORT) {
|
case (token.EXPORT) { ret true; }
|
||||||
ret true;
|
case (_) {}
|
||||||
}
|
}
|
||||||
ret false;
|
ret false;
|
||||||
}
|
}
|
||||||
|
|
||||||
impure fn parse_view(parser p, ast.mod_index index) -> vec[@ast.view_item] {
|
impure fn parse_view(parser p, ast.mod_index index) -> vec[@ast.view_item] {
|
||||||
let vec[@ast.view_item] items = vec();
|
let vec[@ast.view_item] items = vec();
|
||||||
while (is_use_or_import(p.peek())) {
|
while (is_view_item(p.peek())) {
|
||||||
auto item = parse_use_or_import(p);
|
auto item = parse_view_item(p);
|
||||||
items += vec(item);
|
items += vec(item);
|
||||||
|
|
||||||
ast.index_view_item(index, item);
|
ast.index_view_item(index, item);
|
||||||
|
@ -2305,12 +2317,17 @@ impure fn parse_crate_directive(parser p) -> ast.crate_directive
|
||||||
}
|
}
|
||||||
|
|
||||||
case (token.USE) {
|
case (token.USE) {
|
||||||
auto vi = parse_use_or_import(p);
|
auto vi = parse_view_item(p);
|
||||||
ret spanned(lo, vi.span, ast.cdir_view_item(vi));
|
ret spanned(lo, vi.span, ast.cdir_view_item(vi));
|
||||||
}
|
}
|
||||||
|
|
||||||
case (token.IMPORT) {
|
case (token.IMPORT) {
|
||||||
auto vi = parse_use_or_import(p);
|
auto vi = parse_view_item(p);
|
||||||
|
ret spanned(lo, vi.span, ast.cdir_view_item(vi));
|
||||||
|
}
|
||||||
|
|
||||||
|
case (token.EXPORT) {
|
||||||
|
auto vi = parse_view_item(p);
|
||||||
ret spanned(lo, vi.span, ast.cdir_view_item(vi));
|
ret spanned(lo, vi.span, ast.cdir_view_item(vi));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue