about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSeo Sanghyeon <sanxiyn@gmail.com>2015-12-12 00:01:08 +0900
committerSeo Sanghyeon <sanxiyn@gmail.com>2015-12-12 00:01:08 +0900
commit87405751ae4517b4258bdd5b07077d81bdc1287e (patch)
tree6ab8103c83543e59403bfe60ea63acde53205bb7
parent81dd3824ff4f4f85db2a092dab78e5e6c05f96cc (diff)
downloadrust-87405751ae4517b4258bdd5b07077d81bdc1287e.tar.gz
rust-87405751ae4517b4258bdd5b07077d81bdc1287e.zip
Include type name in symbol for methods
-rw-r--r--src/librustc/front/map/collector.rs2
-rw-r--r--src/librustc/front/map/definitions.rs7
-rw-r--r--src/test/run-make/symbols-include-type-name/Makefile9
-rw-r--r--src/test/run-make/symbols-include-type-name/lib.rs19
4 files changed, 31 insertions, 6 deletions
diff --git a/src/librustc/front/map/collector.rs b/src/librustc/front/map/collector.rs
index 17f75074ef2..e85b0ec77cb 100644
--- a/src/librustc/front/map/collector.rs
+++ b/src/librustc/front/map/collector.rs
@@ -122,7 +122,7 @@ impl<'ast> Visitor<'ast> for NodeCollector<'ast> {
         // Pick the def data. This need not be unique, but the more
         // information we encapsulate into
         let def_data = match i.node {
-            ItemDefaultImpl(..) | ItemImpl(..) => DefPathData::Impl,
+            ItemDefaultImpl(..) | ItemImpl(..) => DefPathData::Impl(i.name),
             ItemEnum(..) | ItemStruct(..) | ItemTrait(..) => DefPathData::Type(i.name),
             ItemExternCrate(..) | ItemMod(..) => DefPathData::Mod(i.name),
             ItemStatic(..) | ItemConst(..) | ItemFn(..) => DefPathData::Value(i.name),
diff --git a/src/librustc/front/map/definitions.rs b/src/librustc/front/map/definitions.rs
index 0f0d59e70b0..e903fcf6a56 100644
--- a/src/librustc/front/map/definitions.rs
+++ b/src/librustc/front/map/definitions.rs
@@ -73,7 +73,7 @@ pub enum DefPathData {
     Misc,
 
     // Different kinds of items and item-like things:
-    Impl,
+    Impl(ast::Name),
     Type(ast::Name),
     Mod(ast::Name),
     Value(ast::Name),
@@ -177,6 +177,7 @@ impl DefPathData {
     pub fn as_interned_str(&self) -> InternedString {
         use self::DefPathData::*;
         match *self {
+            Impl(name) |
             Type(name) |
             Mod(name) |
             Value(name) |
@@ -212,10 +213,6 @@ impl DefPathData {
                 InternedString::new("?")
             }
 
-            Impl => {
-                InternedString::new("<impl>")
-            }
-
             ClosureExpr => {
                 InternedString::new("<closure>")
             }
diff --git a/src/test/run-make/symbols-include-type-name/Makefile b/src/test/run-make/symbols-include-type-name/Makefile
new file mode 100644
index 00000000000..1add39e0cc3
--- /dev/null
+++ b/src/test/run-make/symbols-include-type-name/Makefile
@@ -0,0 +1,9 @@
+-include ../tools.mk
+
+# Check that symbol names for methods include type names, instead of <impl>.
+
+OUT=$(TMPDIR)/lib.s
+
+all:
+	$(RUSTC) --crate-type staticlib --emit asm lib.rs
+	grep Def $(OUT)
diff --git a/src/test/run-make/symbols-include-type-name/lib.rs b/src/test/run-make/symbols-include-type-name/lib.rs
new file mode 100644
index 00000000000..1c478ed2598
--- /dev/null
+++ b/src/test/run-make/symbols-include-type-name/lib.rs
@@ -0,0 +1,19 @@
+// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+pub struct Def {
+    pub id: i32,
+}
+
+impl Def {
+    pub fn new(id: i32) -> Def {
+        Def { id: id }
+    }
+}