aboutsummaryrefslogtreecommitdiff
path: root/src/comp
diff options
context:
space:
mode:
authorPatrick Walton <[email protected]>2010-12-22 18:02:16 -0800
committerPatrick Walton <[email protected]>2010-12-22 18:02:48 -0800
commitdaac7a8b130f8f2dfbdeaf38ff39541adfd74736 (patch)
tree5551ed6d7444478c5ddc5e4dba85848ba4ab6e89 /src/comp
parentCopy body tydesc and args into obj bodies. (diff)
downloadrust-daac7a8b130f8f2dfbdeaf38ff39541adfd74736.tar.xz
rust-daac7a8b130f8f2dfbdeaf38ff39541adfd74736.zip
rustc: Add a type_has_dynamic_size predicate
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/middle/ty.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs
index bfcfcb67..4dbd236f 100644
--- a/src/comp/middle/ty.rs
+++ b/src/comp/middle/ty.rs
@@ -379,6 +379,27 @@ fn type_is_scalar(@t ty) -> bool {
fail;
}
+fn type_has_dynamic_size(@t ty) -> bool {
+ alt (ty.struct) {
+ case (ty_tup(?ts)) {
+ auto i = 0u;
+ while (i < _vec.len[@t](ts)) {
+ if (type_has_dynamic_size(ts.(i))) { ret true; }
+ i += 1u;
+ }
+ }
+ case (ty_rec(?fields)) {
+ auto i = 0u;
+ while (i < _vec.len[field](fields)) {
+ if (type_has_dynamic_size(fields.(i).ty)) { ret true; }
+ i += 1u;
+ }
+ }
+ case (ty_param(_)) { ret true; }
+ case (_) { /* fall through */ }
+ }
+ ret false;
+}
fn type_is_integral(@t ty) -> bool {
alt (ty.struct) {