summary refs log tree commit diff
path: root/src/rustc
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-05-17 17:20:58 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-05-17 17:20:58 -0700
commit37abcda42b5060eafd65bf9fe6a6861efa5f0c15 (patch)
tree579f85e9a5db71def3c6b656fe1fe878aa749956 /src/rustc
parent7f45ba4744cec88bfac0b1672b13409aa5ebb42f (diff)
downloadrust-37abcda42b5060eafd65bf9fe6a6861efa5f0c15.tar.gz
rust-37abcda42b5060eafd65bf9fe6a6861efa5f0c15.zip
rustc: Make type_is_pod class-aware
Diffstat (limited to 'src/rustc')
-rw-r--r--src/rustc/middle/ty.rs7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/rustc/middle/ty.rs b/src/rustc/middle/ty.rs
index 0501a6fa815..3b8fe334dc4 100644
--- a/src/rustc/middle/ty.rs
+++ b/src/rustc/middle/ty.rs
@@ -1686,6 +1686,13 @@ fn type_is_pod(cx: ctxt, ty: t) -> bool {
       ty_constr(subt, _) { result = type_is_pod(cx, subt); }
       ty_param(_, _) { result = false; }
       ty_opaque_closure_ptr(_) { result = true; }
+      ty_class(did, substs) {
+        result = vec::any(lookup_class_fields(cx, did)) { |f|
+            let fty = ty::lookup_item_type(cx, f.id);
+            let sty = subst(cx, substs, fty.ty);
+            type_is_pod(cx, sty)
+        };
+      }
       _ { cx.sess.bug("unexpected type in type_is_pod"); }
     }