diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2012-09-25 11:44:23 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2012-09-25 11:44:23 -0700 |
| commit | ac822a52be47579ffa59d5ca3e125680a79545d0 (patch) | |
| tree | 5ef280226f9e0f3dcdf3dbc2c766743f4cbcec35 /src/rustc | |
| parent | dbc00ced3a09a7a8c32d69a89b9e073252cca39d (diff) | |
| download | rust-ac822a52be47579ffa59d5ca3e125680a79545d0.tar.gz rust-ac822a52be47579ffa59d5ca3e125680a79545d0.zip | |
rustc: Stop using shape code for logging
Diffstat (limited to 'src/rustc')
| -rw-r--r-- | src/rustc/middle/lang_items.rs | 7 | ||||
| -rw-r--r-- | src/rustc/middle/trans/base.rs | 6 | ||||
| -rw-r--r-- | src/rustc/middle/trans/callee.rs | 20 | ||||
| -rw-r--r-- | src/rustc/middle/trans/controlflow.rs | 6 |
4 files changed, 28 insertions, 11 deletions
diff --git a/src/rustc/middle/lang_items.rs b/src/rustc/middle/lang_items.rs index 87201f5a4da..ea22e3a7809 100644 --- a/src/rustc/middle/lang_items.rs +++ b/src/rustc/middle/lang_items.rs @@ -46,7 +46,8 @@ struct LanguageItems { mut str_eq_fn: Option<def_id>, mut uniq_str_eq_fn: Option<def_id>, - mut annihilate_fn: Option<def_id> + mut annihilate_fn: Option<def_id>, + mut log_type_fn: Option<def_id> } mod LanguageItems { @@ -76,7 +77,8 @@ mod LanguageItems { str_eq_fn: None, uniq_str_eq_fn: None, - annihilate_fn: None + annihilate_fn: None, + log_type_fn: None } } } @@ -111,6 +113,7 @@ fn LanguageItemCollector(crate: @crate, session: session, item_refs.insert(~"str_eq", &mut items.str_eq_fn); item_refs.insert(~"uniq_str_eq", &mut items.uniq_str_eq_fn); item_refs.insert(~"annihilate", &mut items.annihilate_fn); + item_refs.insert(~"log_type", &mut items.log_type_fn); LanguageItemCollector { crate: crate, diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs index 964b418b765..65a788991bf 100644 --- a/src/rustc/middle/trans/base.rs +++ b/src/rustc/middle/trans/base.rs @@ -2005,12 +2005,6 @@ fn create_main_wrapper(ccx: @crate_ctxt, sp: span, main_llfn: ValueRef, } Call(bcx, main_llfn, args); - // Call the box annihilator. - // XXX: Crashes. - //let did = bcx.tcx().lang_items.annihilate_fn.get(); - //let bcx = callee::trans_rtcall_or_lang_call(bcx, did, ~[], - // expr::Ignore); - build_return(bcx); finish_fn(fcx, lltop); return llfdecl; diff --git a/src/rustc/middle/trans/callee.rs b/src/rustc/middle/trans/callee.rs index 308ff75c82e..1903469ee22 100644 --- a/src/rustc/middle/trans/callee.rs +++ b/src/rustc/middle/trans/callee.rs @@ -290,6 +290,26 @@ fn trans_rtcall_or_lang_call(bcx: block, did: ast::def_id, args: ~[ValueRef], ArgVals(args), dest, DontAutorefArg); } +fn trans_rtcall_or_lang_call_with_type_params(bcx: block, + did: ast::def_id, + args: ~[ValueRef], + type_params: ~[ty::t], + dest: expr::Dest) -> block { + let fty; + if did.crate == ast::local_crate { + fty = ty::node_id_to_type(bcx.tcx(), did.node); + } else { + fty = csearch::get_type(bcx.tcx(), did).ty; + } + + let rty = ty::ty_fn_ret(fty); + return callee::trans_call_inner( + bcx, None, fty, rty, + |bcx| trans_fn_ref_with_vtables_to_callee(bcx, did, 0, type_params, + None), + ArgVals(args), dest, DontAutorefArg); +} + fn body_contains_ret(body: ast::blk) -> bool { let cx = {mut found: false}; visit::visit_block(body, cx, visit::mk_vt(@{ diff --git a/src/rustc/middle/trans/controlflow.rs b/src/rustc/middle/trans/controlflow.rs index 9570f37df75..5d8b0fbbbe1 100644 --- a/src/rustc/middle/trans/controlflow.rs +++ b/src/rustc/middle/trans/controlflow.rs @@ -190,12 +190,12 @@ fn trans_log(log_ex: @ast::expr, // Translate the value to be logged let val_datum = unpack_datum!(bcx, expr::trans_to_datum(bcx, e)); - let tydesc = get_tydesc_simple(ccx, val_datum.ty); // Call the polymorphic log function let val = val_datum.to_ref_llval(bcx); - let val = PointerCast(bcx, val, T_ptr(T_i8())); - Call(bcx, ccx.upcalls.log_type, [tydesc, val, level]); + let did = bcx.tcx().lang_items.log_type_fn.get(); + let bcx = callee::trans_rtcall_or_lang_call_with_type_params( + bcx, did, ~[level, val], ~[val_datum.ty], expr::Ignore); bcx } } |
