aboutsummaryrefslogtreecommitdiff
path: root/src/comp
diff options
context:
space:
mode:
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) {