about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2011-12-12 13:36:29 +0100
committerMarijn Haverbeke <marijnh@gmail.com>2011-12-12 13:36:29 +0100
commite47f8fc709763581ec2ce4ea052b50cb89a9c4d7 (patch)
treec71679e0349fd13b6149bdc5ccba7f256b068139 /src
parent163c42baf8275839b4305101a463f1e89060519d (diff)
downloadrust-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.rs18
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>;