about summary refs log tree commit diff
path: root/src/rustc/middle
diff options
context:
space:
mode:
authorMichael Sullivan <sully@msully.net>2012-08-02 15:52:25 -0700
committerMichael Sullivan <sully@msully.net>2012-08-02 16:02:30 -0700
commit2fe299d1a53355c9bb78b9067bd2d18bd4eb94e7 (patch)
tree39464d3cdfd3f2d9f75a2fc4f49e72454b61e475 /src/rustc/middle
parent97452c0ca16238a2de5503aca07db26ff9e8ba63 (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.rs8
-rw-r--r--src/rustc/middle/trans/impl.rs2
-rw-r--r--src/rustc/middle/ty.rs4
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),