summary refs log tree commit diff
path: root/src/rustc
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-09-25 11:44:23 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-09-25 11:44:23 -0700
commitac822a52be47579ffa59d5ca3e125680a79545d0 (patch)
tree5ef280226f9e0f3dcdf3dbc2c766743f4cbcec35 /src/rustc
parentdbc00ced3a09a7a8c32d69a89b9e073252cca39d (diff)
downloadrust-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.rs7
-rw-r--r--src/rustc/middle/trans/base.rs6
-rw-r--r--src/rustc/middle/trans/callee.rs20
-rw-r--r--src/rustc/middle/trans/controlflow.rs6
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
         }
     }