diff options
| author | Marijn Haverbeke <marijnh@gmail.com> | 2012-03-08 12:15:02 +0100 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2012-03-15 08:59:29 +0100 |
| commit | 5e647d799e36f6f9b11c495ba4900bf43483d4cf (patch) | |
| tree | 55b1ea22c9d0abea6464e33313054bf46136778b /src/rustc/metadata/decoder.rs | |
| parent | 75e6fb4feb4e17dd15394450c96e76b5f801f90d (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.rs | 13 |
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)); } |
