From e02716e6d3a65bde24f49207274a74a22790a201 Mon Sep 17 00:00:00 2001 From: Tom Lee Date: Sat, 11 May 2013 21:46:30 -0700 Subject: [PATCH] Reexport static trait methods on traits in the same module. --- src/librustc/metadata/encoder.rs | 6 ++++-- .../auxiliary/mod_trait_with_static_methods_lib.rs | 10 ++++++++++ .../run-pass/trait_with_static_methods_cross_crate.rs | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 8c21998768e..78adee4b4f2 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -386,8 +386,10 @@ fn encode_reexported_static_methods(ecx: @EncodeContext, 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 { + Some(&ast_map::node_item(item, path)) => { + let interner = ecx.tcx.sess.parse_sess.interner; + let original_name = ecx.tcx.sess.str_of(item.ident); + if mod_path != *path || *exp.name != *original_name { for methods.each |&m| { if m.explicit_self == ast::sty_static { encode_reexported_static_method(ecx, diff --git a/src/test/auxiliary/mod_trait_with_static_methods_lib.rs b/src/test/auxiliary/mod_trait_with_static_methods_lib.rs index 2099c6a2f2f..3591ff79318 100644 --- a/src/test/auxiliary/mod_trait_with_static_methods_lib.rs +++ b/src/test/auxiliary/mod_trait_with_static_methods_lib.rs @@ -9,6 +9,15 @@ // except according to those terms. pub use sub_foo::Foo; +pub use Baz = self::Bar; + +pub trait Bar { + pub fn bar() -> Self; +} + +impl Bar for int { + pub fn bar() -> int { 84 } +} pub mod sub_foo { pub trait Foo { @@ -18,4 +27,5 @@ pub trait Foo { impl Foo for int { pub fn foo() -> int { 42 } } + } diff --git a/src/test/run-pass/trait_with_static_methods_cross_crate.rs b/src/test/run-pass/trait_with_static_methods_cross_crate.rs index 20dcbf3267b..4402881c43d 100644 --- a/src/test/run-pass/trait_with_static_methods_cross_crate.rs +++ b/src/test/run-pass/trait_with_static_methods_cross_crate.rs @@ -13,7 +13,9 @@ extern mod mod_trait_with_static_methods_lib; use mod_trait_with_static_methods_lib::Foo; +use mod_trait_with_static_methods_lib::Baz; pub fn main() { assert_eq!(42, Foo::foo()); + assert_eq!(84, Baz::bar()); } -- GitLab