diff options
| author | Tom Lee <github@tomlee.co> | 2013-05-11 21:46:30 -0700 |
|---|---|---|
| committer | Tom Lee <github@tomlee.co> | 2013-05-19 17:07:18 -0700 |
| commit | e02716e6d3a65bde24f49207274a74a22790a201 (patch) | |
| tree | 94c84e8184ab95dd36531b9fc7ce89cd2a8f283b | |
| parent | ebdb0dee272829f2410edd51acdb12f20721ce42 (diff) | |
| download | rust-e02716e6d3a65bde24f49207274a74a22790a201.tar.gz rust-e02716e6d3a65bde24f49207274a74a22790a201.zip | |
Reexport static trait methods on traits in the same module.
| -rw-r--r-- | src/librustc/metadata/encoder.rs | 6 | ||||
| -rw-r--r-- | src/test/auxiliary/mod_trait_with_static_methods_lib.rs | 10 | ||||
| -rw-r--r-- | src/test/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 mod sub_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()); } |
