about summary refs log tree commit diff
path: root/src/rustc/metadata/decoder.rs
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2012-03-08 12:15:02 +0100
committerMarijn Haverbeke <marijnh@gmail.com>2012-03-15 08:59:29 +0100
commit5e647d799e36f6f9b11c495ba4900bf43483d4cf (patch)
tree55b1ea22c9d0abea6464e33313054bf46136778b /src/rustc/metadata/decoder.rs
parent75e6fb4feb4e17dd15394450c96e76b5f801f90d (diff)
Fix assumption that monomorphized method's impls are crate-local
Diffstat (limited to 'src/rustc/metadata/decoder.rs')
-rw-r--r--src/rustc/metadata/decoder.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/rustc/metadata/decoder.rs b/src/rustc/metadata/decoder.rs
index 1af4b3f65a2..f7120f0efc2 100644
--- a/src/rustc/metadata/decoder.rs
+++ b/src/rustc/metadata/decoder.rs
@@ -19,6 +19,7 @@ export get_enum_variants;
 export get_type;
 export get_type_param_count;
 export get_impl_iface;
+export get_impl_method;
 export lookup_def;
 export lookup_item_name;
 export get_impl_iface;
@@ -256,6 +257,18 @@ fn get_impl_iface(cdata: cmd, id: ast::node_id, tcx: ty::ctxt)
     item_impl_iface(lookup_item(id, cdata.data), tcx, cdata)
 }
 
+fn get_impl_method(cdata: cmd, id: ast::node_id, name: str) -> ast::def_id {
+    let items = ebml::get_doc(ebml::new_doc(cdata.data), tag_items);
+    let found = none;
+    ebml::tagged_docs(find_item(id, items), tag_item_method) {|mid|
+        let m_did = parse_def_id(ebml::doc_data(mid));
+        if item_name(find_item(m_did.node, items)) == name {
+            found = some(translate_def_id(cdata, m_did));
+        }
+    }
+    option::get(found)
+}
+
 fn get_symbol(data: @[u8], id: ast::node_id) -> str {
     ret item_symbol(lookup_item(id, data));
 }