diff options
| author | Michael Sullivan <sully@msully.net> | 2012-08-02 15:52:25 -0700 |
|---|---|---|
| committer | Michael Sullivan <sully@msully.net> | 2012-08-02 16:02:30 -0700 |
| commit | 2fe299d1a53355c9bb78b9067bd2d18bd4eb94e7 (patch) | |
| tree | 39464d3cdfd3f2d9f75a2fc4f49e72454b61e475 /src/rustc/middle | |
| parent | 97452c0ca16238a2de5503aca07db26ff9e8ba63 (diff) | |
Extend ast_map to know about method declarations in traits.
Diffstat (limited to 'src/rustc/middle')
| -rw-r--r-- | src/rustc/middle/trans/base.rs | 8 | ||||
| -rw-r--r-- | src/rustc/middle/trans/impl.rs | 2 | ||||
| -rw-r--r-- | src/rustc/middle/ty.rs | 4 |
3 files changed, 13 insertions, 1 deletions
diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs index eaee22ee677..6d1645ae766 100644 --- a/src/rustc/middle/trans/base.rs +++ b/src/rustc/middle/trans/base.rs @@ -2111,6 +2111,9 @@ fn monomorphic_fn(ccx: @crate_ctxt, fn_id: ast::def_id, } ast_map::node_ctor(nm, _, ct, _, pt) { (pt, nm, ct.span) } ast_map::node_dtor(_, dtor, _, pt) {(pt, @~"drop", dtor.span)} + ast_map::node_trait_method(*) { + ccx.tcx.sess.bug(~"Can't monomorphize a trait method") + } ast_map::node_expr(*) { ccx.tcx.sess.bug(~"Can't monomorphize an expr") } @@ -2207,6 +2210,9 @@ fn monomorphic_fn(ccx: @crate_ctxt, fn_id: ast::def_id, ast_map::node_expr(*) { ccx.tcx.sess.bug(~"Can't monomorphize an expr") } + ast_map::node_trait_method(*) { + ccx.tcx.sess.bug(~"Can't monomorphize a trait method") + } ast_map::node_export(*) { ccx.tcx.sess.bug(~"Can't monomorphize an export") } @@ -2418,7 +2424,7 @@ fn trans_local_var(cx: block, def: ast::def) -> local_var_result { return {val: slf, kind: lv_owned}; } _ { - cx.sess().unimpl(fmt!{"unsupported def type in trans_local_def: %?", + cx.sess().unimpl(fmt!{"unsupported def type in trans_local_var: %?", def}); } } diff --git a/src/rustc/middle/trans/impl.rs b/src/rustc/middle/trans/impl.rs index 6f254f867f6..363b9ece7ad 100644 --- a/src/rustc/middle/trans/impl.rs +++ b/src/rustc/middle/trans/impl.rs @@ -185,6 +185,8 @@ fn resolve_vtables_in_fn_ctxt(fcx: fn_ctxt, vts: typeck::vtable_res) @vec::map(*vts, |d| resolve_vtable_in_fn_ctxt(fcx, d)) } +// Apply the typaram substitutions in the fn_ctxt to a vtable. This should +// eliminate any vtable_params. fn resolve_vtable_in_fn_ctxt(fcx: fn_ctxt, vt: typeck::vtable_origin) -> typeck::vtable_origin { alt vt { diff --git a/src/rustc/middle/ty.rs b/src/rustc/middle/ty.rs index 004a2da5d92..afb18c605c4 100644 --- a/src/rustc/middle/ty.rs +++ b/src/rustc/middle/ty.rs @@ -2759,6 +2759,10 @@ fn item_path(cx: ctxt, id: ast::def_id) -> ast_map::path { ast_map::node_method(method, _, path) { vec::append_one(*path, ast_map::path_name(method.ident)) } + ast_map::node_trait_method(trait_method, _, path) { + let method = ast_util::trait_method_to_ty_method(*trait_method); + vec::append_one(*path, ast_map::path_name(method.ident)) + } ast_map::node_variant(variant, _, path) { vec::append_one(vec::init(*path), |
