@@ -397,18 +397,27 @@ fn item_impl_methods(cdata: cmd, item: ebml::doc, base_tps: uint)
397
397
}
398
398
399
399
fn get_impls_for_mod( cdata: cmd, m_id: ast:: node_id,
400
- name: option < ast:: ident > )
400
+ name: option < ast:: ident > ,
401
+ get_cdata: fn ( ast:: crate_num) -> cmd)
401
402
-> @[ @middle:: resolve:: _impl] {
402
403
let data = cdata. data;
403
404
let mod_item = lookup_item( m_id, data) ;
404
405
let mut result = [ ] ;
405
406
ebml:: tagged_docs( mod_item, tag_mod_impl) { |doc|
406
- let did = translate_def_id( cdata, parse_def_id( ebml:: doc_data( doc) ) ) ;
407
- let item = lookup_item( did. node, data) , nm = item_name( item) ;
407
+ let did = parse_def_id( ebml:: doc_data( doc) ) ;
408
+ let local_did = translate_def_id( cdata, did) ;
409
+ // The impl may be defined in a different crate. Ask the caller
410
+ // to give us the metadata
411
+ let impl_cdata = get_cdata( local_did. crate ) ;
412
+ let impl_data = impl_cdata. data;
413
+ let item = lookup_item( local_did. node, impl_data) ;
414
+ let nm = item_name( item) ;
408
415
if alt name { some( n) { n == nm } none { true } } {
409
416
let base_tps = item_ty_param_count( item) ;
410
- result += [ @{ did: did, ident: nm,
411
- methods: item_impl_methods( cdata, item, base_tps) } ] ;
417
+ result += [ @{
418
+ did: local_did, ident: nm,
419
+ methods: item_impl_methods( impl_cdata, item, base_tps)
420
+ } ] ;
412
421
}
413
422
}
414
423
@result
0 commit comments