From daac7a8b130f8f2dfbdeaf38ff39541adfd74736 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Wed, 22 Dec 2010 18:02:16 -0800 Subject: rustc: Add a type_has_dynamic_size predicate --- src/comp/middle/ty.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/comp') 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) { -- cgit v1.2.3