From e43a3755dd062c4e0ed5727bec764e84f2fb7690 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 17 Jun 2011 12:32:07 -0700 Subject: [PATCH] rustc: Add a type_owns_heap_mem() predicate --- src/comp/middle/ty.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs index c2c46cb7e07e..a1ed4f86dddc 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); }