diff options
| author | Tom Lee <github@tomlee.co> | 2013-05-08 23:13:53 -0700 |
|---|---|---|
| committer | Tom Lee <github@tomlee.co> | 2013-05-09 23:00:03 -0700 |
| commit | 9042e1e8de522ffa48ce6a543130bc72ea04d517 (patch) | |
| tree | b591d257f9a3ea58d7e93cda76ec9db13dd08f94 | |
| parent | ad8e236f32fccf6ec99025e2ba77f79b4c98d399 (diff) | |
| download | rust-9042e1e8de522ffa48ce6a543130bc72ea04d517.tar.gz rust-9042e1e8de522ffa48ce6a543130bc72ea04d517.zip | |
Include static methods on traits in reexports.
| -rw-r--r-- | src/librustc/metadata/encoder.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 6c02ece9289..d2b56863d1a 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -363,6 +363,47 @@ fn encode_path(ecx: @EncodeContext, ebml_w.end_tag(); } +fn encode_reexported_static_method(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + exp: &middle::resolve::Export2, + m: @ty::method) { + debug!("(encode static trait method) reexport '%s::%s'", + *exp.name, *ecx.tcx.sess.str_of(m.ident)); + ebml_w.start_tag(tag_items_data_item_reexport); + ebml_w.start_tag(tag_items_data_item_reexport_def_id); + ebml_w.wr_str(def_to_str(m.def_id)); + ebml_w.end_tag(); + ebml_w.start_tag(tag_items_data_item_reexport_name); + ebml_w.wr_str(*exp.name + "::" + *ecx.tcx.sess.str_of(m.ident)); + ebml_w.end_tag(); + ebml_w.end_tag(); +} + +fn encode_reexported_static_methods(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + mod_path: &[ast_map::path_elt], + exp: &middle::resolve::Export2) { + match ecx.tcx.trait_methods_cache.find(&exp.def_id) { + Some(methods) => { + match ecx.tcx.items.find(&exp.def_id.node) { + Some(&ast_map::node_item(_, path)) => { + if mod_path != *path { + for methods.each |&m| { + if m.self_ty == ast::sty_static { + encode_reexported_static_method(ecx, + ebml_w, + exp, m); + } + } + } + } + _ => {} + } + } + _ => {} + } +} + fn encode_info_for_mod(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, md: &_mod, @@ -413,6 +454,7 @@ fn encode_info_for_mod(ecx: @EncodeContext, ebml_w.wr_str(*exp.name); ebml_w.end_tag(); ebml_w.end_tag(); + encode_reexported_static_methods(ecx, ebml_w, path, exp); } } None => { |
