aboutsummaryrefslogtreecommitdiff
path: root/src/comp/middle/ty.rs
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2011-01-19 16:29:14 -0800
committerGraydon Hoare <[email protected]>2011-01-19 16:29:14 -0800
commit9d3ebd6a57b51f02788331f56681e8f593d82e60 (patch)
treef3c6ea5aeafedbd73c966b80d6901474b77e6302 /src/comp/middle/ty.rs
parentLook at the type params of an item_ty when resolving. (diff)
downloadrust-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.rs23
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; }