about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorRafael Ávila de Espíndola <respindola@mozilla.com>2011-03-03 16:43:47 -0500
committerRafael Ávila de Espíndola <respindola@mozilla.com>2011-03-03 16:44:15 -0500
commitda8058ff836a4e9a30e36ef96449dfef576b13e4 (patch)
tree1ed51af917456ed5c41df82d7228d0c103cadf53 /src/comp
parentfae6870d05683e372dd13ec9849dab0b55a66fb8 (diff)
downloadrust-da8058ff836a4e9a30e36ef96449dfef576b13e4.tar.gz
rust-da8058ff836a4e9a30e36ef96449dfef576b13e4.zip
Handle native types in calls.
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/middle/trans.rs5
-rw-r--r--src/comp/middle/ty.rs10
2 files changed, 13 insertions, 2 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index f47aed2d8c5..7e463ae9646 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -1445,6 +1445,7 @@ fn make_drop_glue(@block_ctxt cx, ValueRef v, @ty.t t) -> result {
                                        bind drop_ty(_, _, _));
 
             } else if (ty.type_is_scalar(t) ||
+                       ty.type_is_native(t) ||
                        ty.type_is_nil(t)) {
                 ret res(cx, C_nil());
             }
@@ -1927,7 +1928,7 @@ fn copy_ty(@block_ctxt cx,
            ValueRef dst,
            ValueRef src,
            @ty.t t) -> result {
-    if (ty.type_is_scalar(t)) {
+    if (ty.type_is_scalar(t) || ty.type_is_native(t)) {
         ret res(cx, cx.build.Store(src, dst));
 
     } else if (ty.type_is_nil(t)) {
@@ -3795,7 +3796,7 @@ fn trans_expr(@block_ctxt cx, @ast.expr e) -> result {
 fn load_scalar_or_boxed(@block_ctxt cx,
                         ValueRef v,
                         @ty.t t) -> ValueRef {
-    if (ty.type_is_scalar(t) || ty.type_is_boxed(t)) {
+    if (ty.type_is_scalar(t) || ty.type_is_boxed(t) || ty.type_is_native(t)) {
         ret cx.build.Load(v);
     } else {
         ret v;
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs
index 771136da447..c85892f2a90 100644
--- a/src/comp/middle/ty.rs
+++ b/src/comp/middle/ty.rs
@@ -465,6 +465,16 @@ fn type_is_scalar(@t ty) -> bool {
     fail;
 }
 
+// FIXME: should we just return true for native types in
+// type_is_scalar?
+fn type_is_native(@t ty) -> bool {
+    alt (ty.struct) {
+        case (ty_native) { ret true; }
+        case (_) { ret false; }
+    }
+    fail;
+}
+
 fn type_has_dynamic_size(@t ty) -> bool {
     alt (ty.struct) {
         case (ty_tup(?ts)) {