about summary refs log tree commit diff
path: root/src/rustc
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-08-07 18:54:44 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-08-07 18:55:19 -0700
commit5ce3281a624c0620f1b6f4e21c15e4a6a17a1dc5 (patch)
tree148f8334840c3005d551c1d0b5d83be953422945 /src/rustc
parent8c95feda3961efaffe4461d775b029f92a1744c4 (diff)
downloadrust-5ce3281a624c0620f1b6f4e21c15e4a6a17a1dc5.tar.gz
rust-5ce3281a624c0620f1b6f4e21c15e4a6a17a1dc5.zip
rustc: Parse variant structs; add a trivial test case
Diffstat (limited to 'src/rustc')
-rw-r--r--src/rustc/metadata/encoder.rs2
-rw-r--r--src/rustc/middle/trans/base.rs11
-rw-r--r--src/rustc/middle/ty.rs2
-rw-r--r--src/rustc/middle/typeck/check.rs2
-rw-r--r--src/rustc/middle/typeck/collect.rs2
5 files changed, 12 insertions, 7 deletions
diff --git a/src/rustc/metadata/encoder.rs b/src/rustc/metadata/encoder.rs
index a0e9c875f06..07d12a12866 100644
--- a/src/rustc/metadata/encoder.rs
+++ b/src/rustc/metadata/encoder.rs
@@ -398,7 +398,7 @@ fn encode_enum_variant_info(ecx: @encode_ctxt, ebml_w: ebml::writer,
                     if args.len() > 0 && ty_params.len() == 0 => {
                 encode_symbol(ecx, ebml_w, variant.node.id);
             }
-            ast::tuple_variant_kind(_) | ast::struct_variant_kind => {}
+            ast::tuple_variant_kind(_) | ast::struct_variant_kind(_) => {}
         }
         encode_discriminant(ecx, ebml_w, variant.node.id);
         if vi[i].disr_val != disr_val {
diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs
index 2c7885a3f0c..fd13d8fa1ef 100644
--- a/src/rustc/middle/trans/base.rs
+++ b/src/rustc/middle/trans/base.rs
@@ -2187,7 +2187,8 @@ fn monomorphic_fn(ccx: @crate_ctxt, fn_id: ast::def_id,
                                    this_tv.disr_val, (*tvs).len() == 1u,
                                    psubsts, d);
             }
-            ast::struct_variant_kind => {}
+            ast::struct_variant_kind(_) =>
+                ccx.tcx.sess.bug(~"can't monomorphize struct variants")
         }
         d
       }
@@ -4894,9 +4895,13 @@ fn trans_item(ccx: @crate_ctxt, item: ast::item) {
                                            vi[i].disr_val, degen,
                                            none, llfn);
                     }
-                    ast::tuple_variant_kind(_) | ast::struct_variant_kind => {
+                    ast::tuple_variant_kind(_) => {
                         // Nothing to do.
                     }
+                    ast::struct_variant_kind(struct_def) => {
+                        trans_struct_def(ccx, struct_def, tps, path,
+                                         variant.node.name, variant.node.id);
+                    }
                 }
                 i += 1;
             }
@@ -5210,7 +5215,7 @@ fn get_item_val(ccx: @crate_ctxt, id: ast::node_id) -> ValueRef {
                       }
                     };
                 }
-                ast::struct_variant_kind => {
+                ast::struct_variant_kind(_) => {
                     fail ~"struct unexpected in get_item_val"
                 }
             }
diff --git a/src/rustc/middle/ty.rs b/src/rustc/middle/ty.rs
index aa33f355f22..ad7824fabe5 100644
--- a/src/rustc/middle/ty.rs
+++ b/src/rustc/middle/ty.rs
@@ -2868,7 +2868,7 @@ fn enum_variants(cx: ctxt, id: ast::def_id) -> @~[variant_info] {
                           disr_val: disr_val
                          }
                     }
-                    ast::struct_variant_kind =>
+                    ast::struct_variant_kind(_) =>
                         fail ~"struct variant kinds unimpl in enum_variants"
                 }
             })
diff --git a/src/rustc/middle/typeck/check.rs b/src/rustc/middle/typeck/check.rs
index 0c59559db76..ec7e642c09d 100644
--- a/src/rustc/middle/typeck/check.rs
+++ b/src/rustc/middle/typeck/check.rs
@@ -2081,7 +2081,7 @@ fn check_enum_variants(ccx: @crate_ctxt,
         match v.node.kind {
             ast::tuple_variant_kind(args) if args.len() > 0u =>
                 arg_tys = ty::ty_fn_args(ctor_ty).map(|a| a.ty),
-            ast::tuple_variant_kind(_) | ast::struct_variant_kind =>
+            ast::tuple_variant_kind(_) | ast::struct_variant_kind(_) =>
                 arg_tys = ~[]
         };
         vec::push(variants, @{args: arg_tys, ctor_ty: ctor_ty,
diff --git a/src/rustc/middle/typeck/collect.rs b/src/rustc/middle/typeck/collect.rs
index abbe5eb40ee..64021f216c3 100644
--- a/src/rustc/middle/typeck/collect.rs
+++ b/src/rustc/middle/typeck/collect.rs
@@ -131,7 +131,7 @@ fn get_enum_variant_types(ccx: @crate_ctxt,
                                             output: enum_ty,
                                             ret_style: ast::return_val});
             }
-            ast::tuple_variant_kind(_) | ast::struct_variant_kind =>
+            ast::tuple_variant_kind(_) | ast::struct_variant_kind(_) =>
                 result_ty = enum_ty
         };
         let tpt = {bounds: ty_param_bounds(ccx, ty_params),