about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-03-16 10:41:00 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-03-16 14:02:02 -0700
commitf6a792585b6311ea6cc9f73f8735116bf8246f5b (patch)
treea2b6acb9d9b31f231ee722d3604d565ea5a9f382
parent3db8ae0bdc3f2c2d59a936973974a13451bb129d (diff)
downloadrust-f6a792585b6311ea6cc9f73f8735116bf8246f5b.tar.gz
rust-f6a792585b6311ea6cc9f73f8735116bf8246f5b.zip
rustc: Give a better error message when references involving the caller region fail to unify
-rw-r--r--src/rustc/util/ppaux.rs14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/rustc/util/ppaux.rs b/src/rustc/util/ppaux.rs
index 885ac9d7fbe..8e2e71aeeb3 100644
--- a/src/rustc/util/ppaux.rs
+++ b/src/rustc/util/ppaux.rs
@@ -13,7 +13,19 @@ import driver::session::session;
 fn region_to_str(cx: ctxt, region: region) -> str {
     alt region {
       re_named(_)   { "<name>" }    // TODO: include name
-      re_caller(_)  { "<caller>" }
+      re_caller(def_id) {
+        if def_id.crate == ast::local_crate {
+            alt cx.items.get(def_id.node) {
+              ast_map::node_item(item, path) {
+                #fmt("<caller of %s::%s>", ast_map::path_to_str(*path),
+                     item.ident)
+              }
+              _ { "<caller>" }
+            }
+        } else {
+            "<caller>"
+        }
+      }
       re_block(node_id) {
         alt cx.items.get(node_id) {
             ast_map::node_block(blk) {