diff options
| author | Michael Sullivan <sully@msully.net> | 2013-07-11 15:08:43 -0700 |
|---|---|---|
| committer | Michael Sullivan <sully@msully.net> | 2013-07-11 15:51:10 -0700 |
| commit | 186f6faf1e6f4b507d97fefcb02fd8a7cf8d716f (patch) | |
| tree | b5b0c24a133e581034649a3498699e5d68d61a2b /src/libsyntax | |
| parent | 1bbb4348806dab6d9b4c280d4cfd324645969eca (diff) | |
| download | rust-186f6faf1e6f4b507d97fefcb02fd8a7cf8d716f.tar.gz rust-186f6faf1e6f4b507d97fefcb02fd8a7cf8d716f.zip | |
Get cross crate static default methods working. Closes #7569.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/ast_map.rs | 13 | ||||
| -rw-r--r-- | src/libsyntax/ast_util.rs | 6 |
3 files changed, 12 insertions, 9 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 8c37c1510cf..b6275ed186c 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1033,7 +1033,7 @@ pub enum foreign_item_ { #[deriving(Eq, Encodable, Decodable,IterBytes)] pub enum inlined_item { ii_item(@item), - ii_method(def_id /* impl id */, @method), + ii_method(def_id /* impl id */, bool /* is provided */, @method), ii_foreign(@foreign_item), } diff --git a/src/libsyntax/ast_map.rs b/src/libsyntax/ast_map.rs index 59020e9d183..e7eedcaa62e 100644 --- a/src/libsyntax/ast_map.rs +++ b/src/libsyntax/ast_map.rs @@ -165,8 +165,8 @@ pub fn map_decoded_item(diag: @span_handler, i.vis, // Wrong but OK @path)); } - ii_method(impl_did, m) => { - map_method(impl_did, @path, m, cx); + ii_method(impl_did, is_provided, m) => { + map_method(impl_did, @path, m, is_provided, cx); } } @@ -207,8 +207,11 @@ pub fn map_pat(pat: @pat, (cx,v): (@mut Ctx, visit::vt<@mut Ctx>)) { } pub fn map_method(impl_did: def_id, impl_path: @path, - m: @method, cx: @mut Ctx) { - cx.map.insert(m.id, node_method(m, impl_did, impl_path)); + m: @method, is_provided: bool, cx: @mut Ctx) { + let entry = if is_provided { + node_trait_method(@provided(m), impl_did, impl_path) + } else { node_method(m, impl_did, impl_path) }; + cx.map.insert(m.id, entry); cx.map.insert(m.self_id, node_local(special_idents::self_)); } @@ -219,7 +222,7 @@ pub fn map_item(i: @item, (cx, v): (@mut Ctx, visit::vt<@mut Ctx>)) { item_impl(_, _, _, ref ms) => { let impl_did = ast_util::local_def(i.id); for ms.iter().advance |m| { - map_method(impl_did, extend(cx, i.ident), *m, cx); + map_method(impl_did, extend(cx, i.ident), *m, false, cx); } } item_enum(ref enum_definition, _) => { diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index 78be8e6f180..d87955a484c 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -298,7 +298,7 @@ impl inlined_item_utils for inlined_item { match *self { ii_item(i) => /* FIXME (#2543) */ copy i.ident, ii_foreign(i) => /* FIXME (#2543) */ copy i.ident, - ii_method(_, m) => /* FIXME (#2543) */ copy m.ident, + ii_method(_, _, m) => /* FIXME (#2543) */ copy m.ident, } } @@ -306,7 +306,7 @@ impl inlined_item_utils for inlined_item { match *self { ii_item(i) => i.id, ii_foreign(i) => i.id, - ii_method(_, m) => m.id, + ii_method(_, _, m) => m.id, } } @@ -314,7 +314,7 @@ impl inlined_item_utils for inlined_item { match *self { ii_item(i) => (v.visit_item)(i, (e, v)), ii_foreign(i) => (v.visit_foreign_item)(i, (e, v)), - ii_method(_, m) => visit::visit_method_helper(m, (e, v)), + ii_method(_, _, m) => visit::visit_method_helper(m, (e, v)), } } } |
