提交 9e4943c9 编写于 作者: G Graydon Hoare

Parse, add to AST, and otherwise ignore 'export' view items. Need to add support to resolve.

上级 d33110eb
......@@ -279,6 +279,7 @@
tag view_item_ {
view_item_use(ident, vec[@meta_item], def_id);
view_item_import(ident, vec[ident], def_id, option.t[def]);
view_item_export(ident);
}
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,_,_,_)) {
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 @@ fn peeking_at_item(parser p) -> bool {
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()) {
case (token.USE) {
ret parse_use(p);
......@@ -2195,23 +2204,26 @@ fn peeking_at_item(parser p) -> bool {
case (token.IMPORT) {
ret parse_import(p);
}
case (token.EXPORT) {
ret parse_export(p);
}
}
}
fn is_use_or_import(token.token t) -> bool {
if (t == token.USE) {
ret true;
}
if (t == token.IMPORT) {
ret true;
fn is_view_item(token.token t) -> bool {
alt (t) {
case (token.USE) { ret true; }
case (token.IMPORT) { ret true; }
case (token.EXPORT) { ret true; }
case (_) {}
}
ret false;
}
impure fn parse_view(parser p, ast.mod_index index) -> vec[@ast.view_item] {
let vec[@ast.view_item] items = vec();
while (is_use_or_import(p.peek())) {
auto item = parse_use_or_import(p);
while (is_view_item(p.peek())) {
auto item = parse_view_item(p);
items += vec(item);
ast.index_view_item(index, item);
......@@ -2305,12 +2317,17 @@ fn is_use_or_import(token.token t) -> bool {
}
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));
}
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));
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册