diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-01-12 09:28:29 -0800 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-01-12 13:47:38 -0800 |
| commit | 263f4c58a0c9409f257d45ae03d4b19700ef232b (patch) | |
| tree | af164d0b5f13701880e15c6c6fb6701c064eb006 /src/comp | |
| parent | e55aa6e5ef60369710d8b2e6f512b2ef84a8c548 (diff) | |
| download | rust-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.rs | 9 | ||||
| -rw-r--r-- | src/comp/middle/trans_closure.rs | 10 |
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); |
