diff options
| author | Graydon Hoare <[email protected]> | 2011-01-19 16:29:14 -0800 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2011-01-19 16:29:14 -0800 |
| commit | 9d3ebd6a57b51f02788331f56681e8f593d82e60 (patch) | |
| tree | f3c6ea5aeafedbd73c966b80d6901474b77e6302 /src/comp/middle/ty.rs | |
| parent | Look at the type params of an item_ty when resolving. (diff) | |
| download | rust-9d3ebd6a57b51f02788331f56681e8f593d82e60.tar.xz rust-9d3ebd6a57b51f02788331f56681e8f593d82e60.zip | |
Implement dynamic GEP enough to permit expr_field to work on tup(T,T,T).
Diffstat (limited to 'src/comp/middle/ty.rs')
| -rw-r--r-- | src/comp/middle/ty.rs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs index 531e3f85..182e2521 100644 --- a/src/comp/middle/ty.rs +++ b/src/comp/middle/ty.rs @@ -361,6 +361,29 @@ fn type_is_structural(@t ty) -> bool { fail; } +fn type_is_tup_like(@t ty) -> bool { + alt (ty.struct) { + case (ty_tup(_)) { ret true; } + case (ty_rec(_)) { ret true; } + case (ty_tag(_)) { ret true; } + case (_) { ret false; } + } + fail; +} + +fn get_element_type(@t ty, uint i) -> @t { + check (type_is_tup_like(ty)); + alt (ty.struct) { + case (ty_tup(?tys)) { + ret tys.(i); + } + case (ty_rec(?flds)) { + ret flds.(i).ty; + } + } + fail; +} + fn type_is_boxed(@t ty) -> bool { alt (ty.struct) { case (ty_str) { ret true; } |