about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2012-01-12 09:28:29 -0800
committerNiko Matsakis <niko@alum.mit.edu>2012-01-12 13:47:38 -0800
commit263f4c58a0c9409f257d45ae03d4b19700ef232b (patch)
treeaf164d0b5f13701880e15c6c6fb6701c064eb006 /src/comp
parente55aa6e5ef60369710d8b2e6f512b2ef84a8c548 (diff)
downloadrust-263f4c58a0c9409f257d45ae03d4b19700ef232b.tar.gz
rust-263f4c58a0c9409f257d45ae03d4b19700ef232b.zip
add tydescs into shape, rewrite walk_fn_contents()
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/middle/trans.rs9
-rw-r--r--src/comp/middle/trans_closure.rs10
2 files changed, 5 insertions, 14 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index 12d0e416b00..dd064a60800 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -959,9 +959,9 @@ fn trans_stack_local_derived_tydesc(cx: @block_ctxt, llsz: ValueRef,
     ret llmyroottydesc;
 }
 
-// Objects and closures store their type parameters differently (in the object
-// or closure itself rather than in the type descriptor).
-tag ty_param_storage { tps_normal; tps_obj(uint); tps_fn(uint); }
+// Objects store their type parameters differently (in the object itself
+// rather than in the type descriptor).
+tag ty_param_storage { tps_normal; tps_obj(uint); }
 
 fn get_derived_tydesc(cx: @block_ctxt, t: ty::t, escapes: bool,
                       storage: ty_param_storage,
@@ -980,7 +980,7 @@ fn get_derived_tydesc(cx: @block_ctxt, t: ty::t, escapes: bool,
     let is_obj_body;
     alt storage {
         tps_normal. { is_obj_body = false; }
-        tps_obj(_) | tps_fn(_) { is_obj_body = true; }
+        tps_obj(_) { is_obj_body = true; }
     }
 
     bcx_ccx(cx).stats.n_derived_tydescs += 1u;
@@ -1028,7 +1028,6 @@ fn get_derived_tydesc(cx: @block_ctxt, t: ty::t, escapes: bool,
     alt storage {
       tps_normal. { obj_params = 0u; }
       tps_obj(np) { obj_params = np; }
-      tps_fn(np) { obj_params = 0x80000000u | np; }
     }
 
     let v;
diff --git a/src/comp/middle/trans_closure.rs b/src/comp/middle/trans_closure.rs
index 3319969f8bd..4bd82d8b803 100644
--- a/src/comp/middle/trans_closure.rs
+++ b/src/comp/middle/trans_closure.rs
@@ -314,16 +314,8 @@ fn store_environment(
         let bound_tydesc = GEPi(bcx, llbox, [0, abi::cbox_elt_tydesc]);
         let ti = none;
 
-        // NDM I believe this is the correct value,
-        // but using it exposes bugs and limitations
-        // in the shape code.  Therefore, I am using
-        // tps_normal, which is what we used before.
-        //
-        // let tps = tps_fn(vec::len(lltyparams));
-
-        let tps = tps_normal;
         let {result:closure_td, _} =
-            trans::get_tydesc(bcx, cbox_ty, true, tps, ti);
+            trans::get_tydesc(bcx, cbox_ty, true, tps_normal, ti);
         trans::lazily_emit_tydesc_glue(bcx, abi::tydesc_field_take_glue, ti);
         trans::lazily_emit_tydesc_glue(bcx, abi::tydesc_field_drop_glue, ti);
         trans::lazily_emit_tydesc_glue(bcx, abi::tydesc_field_free_glue, ti);