diff options
| author | Patrick Walton <[email protected]> | 2010-12-22 18:02:16 -0800 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2010-12-22 18:02:48 -0800 |
| commit | daac7a8b130f8f2dfbdeaf38ff39541adfd74736 (patch) | |
| tree | 5551ed6d7444478c5ddc5e4dba85848ba4ab6e89 /src/comp | |
| parent | Copy body tydesc and args into obj bodies. (diff) | |
| download | rust-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.rs | 21 |
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) { |