Skip to content

Commit 364e497

Browse files
committed
---
yaml --- r: 5031 b: refs/heads/master c: b623ddf h: refs/heads/master i: 5029: 77d1157 5027: f831bc4 5023: 62eb3f1 v: v3
1 parent f0a1c0b commit 364e497

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 4db388ea6c3ae6049d0684a4d3b7d7d428b35b95
2+
refs/heads/master: b623ddfb7e2fb4f90faad454a5c9e6cc072cd0fe

trunk/src/comp/middle/resolve.rs

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ fn resolve_crate(sess: session, amap: &ast_map::map, crate: @ast::crate) ->
153153
map_crate(e, crate);
154154
resolve_imports(*e);
155155
check_for_collisions(e, *crate);
156+
check_bad_exports(e);
156157
resolve_names(e, crate);
157158
ret {def_map: e.def_map, ext_map: e.ext_map};
158159
}
@@ -960,9 +961,7 @@ fn lookup_in_local_mod(e: &env, node_id: node_id, sp: &span, id: &ident,
960961
let info = e.mod_map.get(node_id);
961962
if dr == outside && !ast_util::is_exported(id, option::get(info.m)) {
962963
// if we're in a native mod, then dr==inside, so info.m is some _mod
963-
964964
ret none::<def>; // name is not visible
965-
966965
}
967966
alt info.index.find(id) {
968967
none. { }
@@ -1430,6 +1429,40 @@ fn ensure_unique<T>(e: &env, sp: &span, elts: &[T], id: fn(&T) -> ident,
14301429
for elt: T in elts { add_name(ch, sp, id(elt)); }
14311430
}
14321431
1432+
fn check_bad_exports(e: &@env) {
1433+
fn lookup_glob_any(e: &env, info: &@indexed_mod, sp: &span,
1434+
ident: &ident) -> bool {
1435+
ret !option::is_none(lookup_glob_in_mod(e, info, sp, ident,
1436+
ns_module, inside)) ||
1437+
!option::is_none(lookup_glob_in_mod(e, info, sp, ident,
1438+
ns_value, inside)) ||
1439+
!option::is_none(lookup_glob_in_mod(e, info, sp, ident,
1440+
ns_type, inside));
1441+
}
1442+
1443+
for each @{val, _} in e.mod_map.items() {
1444+
alt val.m {
1445+
some(m) {
1446+
for vi in m.view_items {
1447+
alt vi.node {
1448+
ast::view_item_export(idents, _) {
1449+
for ident in idents {
1450+
if !val.index.contains_key(ident) &&
1451+
!lookup_glob_any(*e, val, vi.span, ident) {
1452+
e.sess.span_warn(vi.span, ~"exported item " +
1453+
ident + ~" is not defined");
1454+
}
1455+
}
1456+
}
1457+
_ {}
1458+
}
1459+
}
1460+
}
1461+
none. {}
1462+
}
1463+
}
1464+
}
1465+
14331466
// Local Variables:
14341467
// mode: rust
14351468
// fill-column: 78;

0 commit comments

Comments
 (0)