1
Fork 0

Allow multiple exports in a single export statement. Issue #817

This commit is contained in:
Brian Anderson 2011-08-16 12:09:47 -07:00
parent c95e3ab6a8
commit 67cc5b9e34
4 changed files with 31 additions and 10 deletions

View file

@ -564,7 +564,7 @@ tag view_item_ {
view_item_use(ident, [@meta_item], node_id); view_item_use(ident, [@meta_item], node_id);
view_item_import(ident, [ident], node_id); view_item_import(ident, [ident], node_id);
view_item_import_glob([ident], node_id); view_item_import_glob([ident], node_id);
view_item_export(ident, node_id); view_item_export([ident], node_id);
} }
type obj_def_ids = {ty: node_id, ctor: node_id}; type obj_def_ids = {ty: node_id, ctor: node_id};
@ -627,11 +627,11 @@ fn is_exported(i: ident, m: _mod) -> bool {
let count = 0u; let count = 0u;
for vi: @ast::view_item in m.view_items { for vi: @ast::view_item in m.view_items {
alt vi.node { alt vi.node {
ast::view_item_export(id, _) { ast::view_item_export(ids, _) {
if str::eq(i, id) { for id in ids {
// even if it's nonlocal (since it's explicit) if str::eq(i, id) {
ret true;
ret true; }
} }
count += 1u; count += 1u;
} }
@ -640,7 +640,7 @@ fn is_exported(i: ident, m: _mod) -> bool {
} }
// If there are no declared exports then // If there are no declared exports then
// everything not imported is exported // everything not imported is exported
// even if it's nonlocal (since it's explicit)
ret count == 0u && !nonlocal; ret count == 0u && !nonlocal;
} }

View file

@ -2353,8 +2353,9 @@ fn parse_import(p: &parser) -> ast::view_item_ {
} }
fn parse_export(p: &parser) -> ast::view_item_ { fn parse_export(p: &parser) -> ast::view_item_ {
let id = parse_ident(p); let ids = parse_seq_to_before_end(
ret ast::view_item_export(id, p.get_id()); token::SEMI, option::some(token::COMMA), parse_ident, p);
ret ast::view_item_export(ids, p.get_id());
} }
fn parse_view_item(p: &parser) -> @ast::view_item { fn parse_view_item(p: &parser) -> @ast::view_item {

View file

@ -1276,7 +1276,11 @@ fn print_view_item(s: &ps, item: &@ast::view_item) {
} }
word(s.s, "::*"); word(s.s, "::*");
} }
ast::view_item_export(id, _) { head(s, "export"); word(s.s, id); } ast::view_item_export(ids, _) {
head(s, "export");
commasep(s, inconsistent, ids,
fn(s: &ps, w: &str) { word(s.s, w) });
}
} }
word(s.s, ";"); word(s.s, ";");
end(s); // end inner head-block end(s); // end inner head-block

View file

@ -0,0 +1,16 @@
import m::f;
import m::g;
mod m {
export f, g;
fn f() {}
fn g() {}
}
fn main() {
f();
g();
m::f();
m::g();
}