about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2011-06-17 12:32:07 -0700
committerPatrick Walton <pcwalton@mimiga.net>2011-06-17 12:32:18 -0700
commite43a3755dd062c4e0ed5727bec764e84f2fb7690 (patch)
tree4ab2c9086f0dd0b86b12c7981857858f97cdd642 /src/comp
parentdfb806b367ea87df6670568590b30aca84facd80 (diff)
downloadrust-e43a3755dd062c4e0ed5727bec764e84f2fb7690.tar.gz
rust-e43a3755dd062c4e0ed5727bec764e84f2fb7690.zip
rustc: Add a type_owns_heap_mem() predicate
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/middle/ty.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs
index c2c46cb7e07..a1ed4f86ddd 100644
--- a/src/comp/middle/ty.rs
+++ b/src/comp/middle/ty.rs
@@ -986,6 +986,39 @@ fn type_is_signed(&ctxt cx, &t ty) -> bool {
     }
 }
 
+fn type_owns_heap_mem(&ctxt cx, &t ty) -> bool {
+    alt (struct(cx, ty)) {
+        case (ty_ivec(_)) { ret true; }
+        case (ty_istr) { ret true; }
+
+        case (ty_nil) { ret false; }
+        case (ty_bot) { ret false; }
+        case (ty_bool) { ret false; }
+        case (ty_int) { ret false; }
+        case (ty_float) { ret false; }
+        case (ty_uint) { ret false; }
+        case (ty_machine(_)) { ret false; }
+        case (ty_char) { ret false; }
+        case (ty_str) { ret false; }
+        case (ty_tag(_,_)) { ret false; }
+        case (ty_box(_)) { ret false; }
+        case (ty_vec(_)) { ret false; }
+        case (ty_ptr(_)) { ret false; }
+        case (ty_port(_)) { ret false; }
+        case (ty_chan(_)) { ret false; }
+        case (ty_task) { ret false; }
+        case (ty_tup(_)) { ret false; }
+        case (ty_rec(_)) { ret false; }
+        case (ty_fn(_,_,_,_,_)) { ret false; }
+        case (ty_native_fn(_,_,_)) { ret false; }
+        case (ty_obj(_)) { ret false; }
+        case (ty_var(_)) { fail "ty_var in type_owns_heap_mem"; }
+        case (ty_param(_)) { ret false; }
+        case (ty_type) { ret false; }
+        case (ty_native) { ret false; }
+    }
+}
+
 fn type_param(&ctxt cx, &t ty) -> option::t[uint] {
     alt (struct(cx, ty)) {
         case (ty_param(?id)) { ret some[uint](id); }