diff options
| author | Marijn Haverbeke <marijnh@gmail.com> | 2011-12-12 13:36:29 +0100 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2011-12-12 13:36:29 +0100 |
| commit | e47f8fc709763581ec2ce4ea052b50cb89a9c4d7 (patch) | |
| tree | c71679e0349fd13b6149bdc5ccba7f256b068139 /src | |
| parent | 163c42baf8275839b4305101a463f1e89060519d (diff) | |
| download | rust-e47f8fc709763581ec2ce4ea052b50cb89a9c4d7.tar.gz rust-e47f8fc709763581ec2ce4ea052b50cb89a9c4d7.zip | |
Handle external-crate case when printing full unresolved paths
Closes #1283
Diffstat (limited to 'src')
| -rw-r--r-- | src/comp/middle/resolve.rs | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/comp/middle/resolve.rs b/src/comp/middle/resolve.rs index 4a8795d9d5e..84f7007f2e4 100644 --- a/src/comp/middle/resolve.rs +++ b/src/comp/middle/resolve.rs @@ -2,7 +2,7 @@ import syntax::{ast, ast_util, codemap}; import syntax::ast::*; import ast::{ident, fn_ident, def, def_id, node_id}; -import syntax::ast_util::local_def; +import syntax::ast_util::{local_def, def_id_of_def}; import metadata::{csearch, cstore}; import driver::session::session; @@ -609,7 +609,15 @@ fn unresolved_err(e: env, cx: ctxt, sp: span, name: ident, kind: str) { } } in_mod(def) { - path = e.mod_map.get(ast_util::def_id_of_def(def).node).path + path; + let did = def_id_of_def(def); + if did.crate == ast::local_crate { + path = e.mod_map.get(did.node).path + path; + } else { + let paths = e.ext_map.get(did); + if vec::len(paths) > 0u { + path = str::connect(paths, "::") + "::" + path; + } + } } } e.sess.span_err(sp, mk_unresolved_msg(path, kind)); @@ -783,7 +791,7 @@ fn lookup_in_scope(e: env, sc: scopes, sp: span, name: ident, ns: namespace) while i > 0u { i -= 1u; df = - ast::def_upvar(ast_util::def_id_of_def(df), @df, + ast::def_upvar(def_id_of_def(df), @df, closing[i]); fnd = some(df); } @@ -997,7 +1005,7 @@ fn lookup_in_mod_strict(e: env, m: def, sp: span, name: ident, fn lookup_in_mod(e: env, m: def, sp: span, name: ident, ns: namespace, dr: dir) -> option::t<def> { - let defid = ast_util::def_id_of_def(m); + let defid = def_id_of_def(m); if defid.crate != ast::local_crate { // examining a module in an external crate let cached = e.ext_cache.find({did: defid, ident: name, ns: ns}); @@ -1277,7 +1285,7 @@ fn ns_for_def(d: def) -> namespace { fn lookup_external(e: env, cnum: int, ids: [ident], ns: namespace) -> option::t<def> { for d: def in csearch::lookup_defs(e.sess.get_cstore(), cnum, ids) { - e.ext_map.insert(ast_util::def_id_of_def(d), ids); + e.ext_map.insert(def_id_of_def(d), ids); if ns == ns_for_def(d) { ret some(d); } } ret none::<def>; |
