about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2013-03-28 11:29:21 -0700
committerPatrick Walton <pcwalton@mimiga.net>2013-03-28 11:30:01 -0700
commit0a002d79b47340cc518ae4c0879a34c037c8411a (patch)
tree5abc7366866fa6f17189bf8ef814f4955c9e776c
parent09dc38eda54537c0c10b8a89852c714e3e14f57a (diff)
downloadrust-0a002d79b47340cc518ae4c0879a34c037c8411a.tar.gz
rust-0a002d79b47340cc518ae4c0879a34c037c8411a.zip
librustc: Remove common fields and nested enums from the language
-rw-r--r--src/librustc/metadata/encoder.rs3
-rw-r--r--src/librustc/middle/resolve.rs12
-rw-r--r--src/librustc/middle/trans/base.rs11
-rw-r--r--src/librustc/middle/trans/monomorphize.rs2
-rw-r--r--src/librustc/middle/ty.rs3
-rw-r--r--src/librustc/middle/typeck/check/mod.rs10
-rw-r--r--src/librustc/middle/typeck/collect.rs9
-rw-r--r--src/libsyntax/ast.rs2
-rw-r--r--src/libsyntax/ext/auto_encode.rs4
-rw-r--r--src/libsyntax/ext/deriving/clone.rs2
-rw-r--r--src/libsyntax/ext/deriving/eq.rs2
-rw-r--r--src/libsyntax/ext/deriving/iter_bytes.rs2
-rw-r--r--src/libsyntax/ext/deriving/mod.rs8
-rw-r--r--src/libsyntax/ext/pipes/pipec.rs2
-rw-r--r--src/libsyntax/fold.rs14
-rw-r--r--src/libsyntax/parse/parser.rs79
-rw-r--r--src/libsyntax/print/pprust.rs3
-rw-r--r--src/libsyntax/visit.rs3
-rw-r--r--src/test/run-pass/common-fields-trivial.rs24
19 files changed, 36 insertions, 159 deletions
diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs
index 419fe98f3d5..778b915190b 100644
--- a/src/librustc/metadata/encoder.rs
+++ b/src/librustc/metadata/encoder.rs
@@ -286,8 +286,7 @@ fn encode_enum_variant_info(ecx: @EncodeContext, ebml_w: writer::Encoder,
                     if args.len() > 0 && generics.ty_params.len() == 0 => {
                 encode_symbol(ecx, ebml_w, variant.node.id);
             }
-            ast::tuple_variant_kind(_) | ast::struct_variant_kind(_) |
-            ast::enum_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/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs
index 0c9c7a73902..10d3de6b131 100644
--- a/src/librustc/middle/resolve.rs
+++ b/src/librustc/middle/resolve.rs
@@ -37,7 +37,7 @@ use syntax::ast::{expr_binary, expr_break, expr_cast, expr_field};
 use syntax::ast::{expr_fn_block, expr_index, expr_method_call, expr_path};
 use syntax::ast::{def_prim_ty, def_region, def_self, def_ty, def_ty_param};
 use syntax::ast::{def_upvar, def_use, def_variant, div, eq};
-use syntax::ast::{enum_variant_kind, expr, expr_again, expr_assign_op};
+use syntax::ast::{expr, expr_again, expr_assign_op};
 use syntax::ast::{expr_index, expr_loop};
 use syntax::ast::{expr_path, expr_struct, expr_unary, fn_decl};
 use syntax::ast::{foreign_item, foreign_item_const, foreign_item_fn, ge};
@@ -1383,16 +1383,6 @@ pub impl Resolver {
                                   variant.span);
                 self.structs.insert(local_def(variant.node.id));
             }
-            enum_variant_kind(ref enum_definition) => {
-                child.define_type(privacy,
-                                  def_ty(local_def(variant.node.id)),
-                                  variant.span);
-                for (*enum_definition).variants.each |variant| {
-                    self.build_reduced_graph_for_variant(*variant, item_id,
-                                                         parent_privacy,
-                                                         parent, visitor);
-                }
-            }
         }
     }
 
diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs
index cfbd59073fe..9e83552a600 100644
--- a/src/librustc/middle/trans/base.rs
+++ b/src/librustc/middle/trans/base.rs
@@ -2051,14 +2051,6 @@ pub fn trans_enum_def(ccx: @CrateContext, enum_definition: ast::enum_def,
                 trans_struct_def(ccx, struct_def, path,
                                  variant.node.id);
             }
-            ast::enum_variant_kind(ref enum_definition) => {
-                trans_enum_def(ccx,
-                               *enum_definition,
-                               id,
-                               path,
-                               vi,
-                               &mut *i);
-            }
         }
     }
 }
@@ -2513,9 +2505,6 @@ pub fn get_item_val(ccx: @CrateContext, id: ast::node_id) -> ValueRef {
                 ast::struct_variant_kind(_) => {
                     fail!(~"struct variant kind unexpected in get_item_val")
                 }
-                ast::enum_variant_kind(_) => {
-                    fail!(~"enum variant kind unexpected in get_item_val")
-                }
             }
             set_inline_hint(llfn);
             llfn
diff --git a/src/librustc/middle/trans/monomorphize.rs b/src/librustc/middle/trans/monomorphize.rs
index 0a7024b161e..ed07b7e9f7f 100644
--- a/src/librustc/middle/trans/monomorphize.rs
+++ b/src/librustc/middle/trans/monomorphize.rs
@@ -204,8 +204,6 @@ pub fn monomorphic_fn(ccx: @CrateContext,
             }
             ast::struct_variant_kind(_) =>
                 ccx.tcx.sess.bug(~"can't monomorphize struct variants"),
-            ast::enum_variant_kind(_) =>
-                ccx.tcx.sess.bug(~"can't monomorphize enum variants")
         }
         d
       }
diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs
index 58db934160b..d7f71bae85b 100644
--- a/src/librustc/middle/ty.rs
+++ b/src/librustc/middle/ty.rs
@@ -3873,9 +3873,6 @@ pub fn enum_variants(cx: ctxt, id: ast::def_id) -> @~[VariantInfo] {
                     ast::struct_variant_kind(_) => {
                         fail!(~"struct variant kinds unimpl in enum_variants")
                     }
-                    ast::enum_variant_kind(_) => {
-                        fail!(~"enum variant kinds unimpl in enum_variants")
-                    }
                 }
             })
           }
diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs
index dcf75955509..28f8a8f50b4 100644
--- a/src/librustc/middle/typeck/check/mod.rs
+++ b/src/librustc/middle/typeck/check/mod.rs
@@ -3066,16 +3066,6 @@ pub fn check_enum_variants(ccx: @mut CrateCtxt,
                         ccx.tcx, local_def(v.node.id)).map(|cf|
                             ty::node_id_to_type(ccx.tcx, cf.id.node)));
                 }
-                ast::enum_variant_kind(_) => {
-                    arg_tys = None;
-                    do_check(ccx,
-                             sp,
-                             vs,
-                             id,
-                             &mut *disr_vals,
-                             &mut *disr_val,
-                             &mut *variants);
-                }
             }
 
             match arg_tys {
diff --git a/src/librustc/middle/typeck/collect.rs b/src/librustc/middle/typeck/collect.rs
index 573285c357e..0f84975c89c 100644
--- a/src/librustc/middle/typeck/collect.rs
+++ b/src/librustc/middle/typeck/collect.rs
@@ -202,15 +202,6 @@ pub fn get_enum_variant_types(ccx: &CrateCtxt,
                     |f| ty::node_id_to_type(ccx.tcx, f.node.id));
                 result_ty = Some(ty::mk_ctor_fn(tcx, input_tys, enum_ty));
             }
-
-            ast::enum_variant_kind(ref enum_definition) => {
-                get_enum_variant_types(ccx,
-                                       enum_ty,
-                                       enum_definition.variants,
-                                       generics,
-                                       rp);
-                result_ty = None;
-            }
         };
 
         match result_ty {
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index 6b788810a79..7304eb20bca 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -1078,7 +1078,6 @@ pub struct variant_arg {
 pub enum variant_kind {
     tuple_variant_kind(~[variant_arg]),
     struct_variant_kind(@struct_def),
-    enum_variant_kind(enum_def)
 }
 
 #[auto_encode]
@@ -1086,7 +1085,6 @@ pub enum variant_kind {
 #[deriving(Eq)]
 pub struct enum_def {
     variants: ~[variant],
-    common: Option<@struct_def>,
 }
 
 #[auto_encode]
diff --git a/src/libsyntax/ext/auto_encode.rs b/src/libsyntax/ext/auto_encode.rs
index 2a112f106a8..d7e0e9aa550 100644
--- a/src/libsyntax/ext/auto_encode.rs
+++ b/src/libsyntax/ext/auto_encode.rs
@@ -990,8 +990,6 @@ fn mk_enum_ser_body(
                 ),
             ast::struct_variant_kind(*) =>
                 fail!(~"struct variants unimplemented"),
-            ast::enum_variant_kind(*) =>
-                fail!(~"enum variants unimplemented"),
         }
     };
 
@@ -1089,8 +1087,6 @@ fn mk_enum_deser_body(
             },
             ast::struct_variant_kind(*) =>
                 fail!(~"struct variants unimplemented"),
-            ast::enum_variant_kind(*) =>
-                fail!(~"enum variants unimplemented")
         };
 
         let pat = @ast::pat {
diff --git a/src/libsyntax/ext/deriving/clone.rs b/src/libsyntax/ext/deriving/clone.rs
index df4dd2735fc..6516bd85270 100644
--- a/src/libsyntax/ext/deriving/clone.rs
+++ b/src/libsyntax/ext/deriving/clone.rs
@@ -12,7 +12,7 @@ use core::prelude::*;
 
 use ast;
 use ast::{TraitTyParamBound, Ty, and, bind_by_ref, binop, deref, enum_def};
-use ast::{enum_variant_kind, expr, expr_match, ident, impure_fn, item, item_};
+use ast::{expr, expr_match, ident, impure_fn, item, item_};
 use ast::{item_enum, item_impl, item_struct, Generics};
 use ast::{m_imm, meta_item, method};
 use ast::{named_field, or, pat, pat_ident, pat_wild, public, pure_fn};
diff --git a/src/libsyntax/ext/deriving/eq.rs b/src/libsyntax/ext/deriving/eq.rs
index 531390035db..a1cb981e3bd 100644
--- a/src/libsyntax/ext/deriving/eq.rs
+++ b/src/libsyntax/ext/deriving/eq.rs
@@ -12,7 +12,7 @@ use core::prelude::*;
 
 use ast;
 use ast::{TraitTyParamBound, Ty, and, bind_by_ref, binop, deref, enum_def};
-use ast::{enum_variant_kind, expr, expr_match, ident, impure_fn, item, item_};
+use ast::{expr, expr_match, ident, impure_fn, item, item_};
 use ast::{item_enum, item_impl, item_struct, Generics};
 use ast::{m_imm, meta_item, method};
 use ast::{named_field, or, pat, pat_ident, pat_wild, public, pure_fn};
diff --git a/src/libsyntax/ext/deriving/iter_bytes.rs b/src/libsyntax/ext/deriving/iter_bytes.rs
index 528db0d1072..3be8bf6efb5 100644
--- a/src/libsyntax/ext/deriving/iter_bytes.rs
+++ b/src/libsyntax/ext/deriving/iter_bytes.rs
@@ -12,7 +12,7 @@ use core::prelude::*;
 
 use ast;
 use ast::{TraitTyParamBound, Ty, and, bind_by_ref, binop, deref, enum_def};
-use ast::{enum_variant_kind, expr, expr_match, ident, impure_fn, item, item_};
+use ast::{expr, expr_match, ident, impure_fn, item, item_};
 use ast::{item_enum, item_impl, item_struct, Generics};
 use ast::{m_imm, meta_item, method};
 use ast::{named_field, or, pat, pat_ident, pat_wild, public, pure_fn};
diff --git a/src/libsyntax/ext/deriving/mod.rs b/src/libsyntax/ext/deriving/mod.rs
index 21477d6e067..1b81380ec9b 100644
--- a/src/libsyntax/ext/deriving/mod.rs
+++ b/src/libsyntax/ext/deriving/mod.rs
@@ -15,7 +15,7 @@ use core::prelude::*;
 
 use ast;
 use ast::{TraitTyParamBound, Ty, and, bind_by_ref, binop, deref, enum_def};
-use ast::{enum_variant_kind, expr, expr_match, ident, impure_fn, item, item_};
+use ast::{expr, expr_match, ident, impure_fn, item, item_};
 use ast::{item_enum, item_impl, item_struct, Generics};
 use ast::{m_imm, meta_item, method};
 use ast::{named_field, or, pat, pat_ident, pat_wild, public, pure_fn};
@@ -283,9 +283,6 @@ pub fn create_enum_variant_pattern(cx: @ext_ctxt,
 
             build::mk_pat_struct(cx, span, matching_path, field_pats)
         }
-        enum_variant_kind(*) => {
-            cx.span_unimpl(span, ~"enum variants for `deriving`");
-        }
     }
 }
 
@@ -293,9 +290,6 @@ pub fn variant_arg_count(cx: @ext_ctxt, span: span, variant: &variant) -> uint {
     match variant.node.kind {
         tuple_variant_kind(ref args) => args.len(),
         struct_variant_kind(ref struct_def) => struct_def.fields.len(),
-        enum_variant_kind(*) => {
-            cx.span_bug(span, ~"variant_arg_count: enum variants deprecated")
-        }
     }
 }
 
diff --git a/src/libsyntax/ext/pipes/pipec.rs b/src/libsyntax/ext/pipes/pipec.rs
index a7725eab695..99033b3b3cc 100644
--- a/src/libsyntax/ext/pipes/pipec.rs
+++ b/src/libsyntax/ext/pipes/pipec.rs
@@ -238,7 +238,7 @@ impl to_type_decls for state {
             cx.item_enum_poly(
                 name,
                 self.span,
-                ast::enum_def { variants: items_msg, common: None },
+                ast::enum_def { variants: items_msg },
                 cx.strip_bounds(&self.generics)
             )
         ]
diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs
index 279d57a291e..f0885afa580 100644
--- a/src/libsyntax/fold.rs
+++ b/src/libsyntax/fold.rs
@@ -257,9 +257,6 @@ pub fn noop_fold_item_underscore(i: &item_, fld: @ast_fold) -> item_ {
                     variants: do enum_definition.variants.map |x| {
                         fld.fold_variant(x)
                     },
-                    common: do enum_definition.common.map |x| {
-                        fold_struct_def(*x, fld)
-                    }
                 },
                 fold_generics(generics, fld))
         }
@@ -682,17 +679,6 @@ fn noop_fold_variant(v: &variant_, fld: @ast_fold) -> variant_ {
                 ctor_id: struct_def.ctor_id.map(|c| fld.new_id(*c))
             })
         }
-        enum_variant_kind(ref enum_definition) => {
-            let variants = do (*enum_definition).variants.map |x| {
-                fld.fold_variant(x)
-            };
-            let common = do (*enum_definition).common.map |x| {
-                fold_struct_def(*x, fld)
-            };
-            kind = enum_variant_kind(
-                ast::enum_def { variants: variants, common: common }
-            );
-        }
     }
 
     let fold_attribute = |x| fold_attribute_(x, fld);
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 6fe003b2eba..51a7f7fbd1c 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -19,7 +19,7 @@ use ast::{_mod, add, arg, arm, attribute, bind_by_ref, bind_infer};
 use ast::{bind_by_copy, bitand, bitor, bitxor, blk};
 use ast::{blk_check_mode, box, by_copy, by_ref};
 use ast::{crate, crate_cfg, decl, decl_item};
-use ast::{decl_local, default_blk, deref, div, enum_def, enum_variant_kind};
+use ast::{decl_local, default_blk, deref, div, enum_def};
 use ast::{expl, expr, expr_, expr_addr_of, expr_match, expr_again};
 use ast::{expr_assign, expr_assign_op, expr_binary, expr_block};
 use ast::{expr_break, expr_call, expr_cast, expr_copy, expr_do_body};
@@ -3788,63 +3788,42 @@ pub impl Parser {
     fn parse_enum_def(&self, generics: &ast::Generics) -> enum_def {
         let mut variants = ~[];
         let mut all_nullary = true, have_disr = false;
-        let mut common_fields = None;
-
         while *self.token != token::RBRACE {
             let variant_attrs = self.parse_outer_attributes();
             let vlo = self.span.lo;
 
-            // Is this a common field declaration?
-            if self.eat_keyword(&~"struct") {
-                if common_fields.is_some() {
-                    self.fatal(~"duplicate declaration of shared fields");
-                }
-                self.expect(&token::LBRACE);
-                common_fields = Some(self.parse_struct_def());
-                loop;
-            }
-
             let vis = self.parse_visibility();
 
-            // Is this a nested enum declaration?
             let ident, needs_comma, kind;
             let mut args = ~[], disr_expr = None;
-            if self.eat_keyword(&~"enum") {
-                ident = self.parse_ident();
-                self.expect(&token::LBRACE);
-                let nested_enum_def = self.parse_enum_def(generics);
-                kind = enum_variant_kind(nested_enum_def);
-                needs_comma = false;
-            } else {
-                ident = self.parse_ident();
-                if self.eat(&token::LBRACE) {
-                    // Parse a struct variant.
-                    all_nullary = false;
-                    kind = struct_variant_kind(self.parse_struct_def());
-                } else if *self.token == token::LPAREN {
-                    all_nullary = false;
-                    let arg_tys = self.parse_unspanned_seq(
-                        &token::LPAREN,
-                        &token::RPAREN,
-                        seq_sep_trailing_disallowed(token::COMMA),
-                        |p| p.parse_ty(false)
-                    );
-                    for arg_tys.each |ty| {
-                        args.push(ast::variant_arg {
-                            ty: *ty,
-                            id: self.get_id(),
-                        });
-                    }
-                    kind = tuple_variant_kind(args);
-                } else if self.eat(&token::EQ) {
-                    have_disr = true;
-                    disr_expr = Some(self.parse_expr());
-                    kind = tuple_variant_kind(args);
-                } else {
-                    kind = tuple_variant_kind(~[]);
+            ident = self.parse_ident();
+            if self.eat(&token::LBRACE) {
+                // Parse a struct variant.
+                all_nullary = false;
+                kind = struct_variant_kind(self.parse_struct_def());
+            } else if *self.token == token::LPAREN {
+                all_nullary = false;
+                let arg_tys = self.parse_unspanned_seq(
+                    &token::LPAREN,
+                    &token::RPAREN,
+                    seq_sep_trailing_disallowed(token::COMMA),
+                    |p| p.parse_ty(false)
+                );
+                for arg_tys.each |ty| {
+                    args.push(ast::variant_arg {
+                        ty: *ty,
+                        id: self.get_id(),
+                    });
                 }
-                needs_comma = true;
+                kind = tuple_variant_kind(args);
+            } else if self.eat(&token::EQ) {
+                have_disr = true;
+                disr_expr = Some(self.parse_expr());
+                kind = tuple_variant_kind(args);
+            } else {
+                kind = tuple_variant_kind(~[]);
             }
+            needs_comma = true;
 
             let vr = ast::variant_ {
                 name: ident,
@@ -3864,7 +3843,7 @@ pub impl Parser {
                         enum");
         }
 
-        ast::enum_def { variants: variants, common: common_fields }
+        ast::enum_def { variants: variants }
     }
 
     fn parse_item_enum(&self) -> item_info {
@@ -3892,7 +3871,7 @@ pub impl Parser {
             return (
                 id,
                 item_enum(
-                    ast::enum_def { variants: ~[variant], common: None },
+                    ast::enum_def { variants: ~[variant] },
                     generics),
                 None
             );
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index cb142ef3f54..58fbba752f5 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -785,9 +785,6 @@ pub fn print_variant(s: @ps, v: ast::variant) {
             let generics = ast_util::empty_generics();
             print_struct(s, struct_def, &generics, v.node.name, v.span);
         }
-        ast::enum_variant_kind(ref enum_definition) => {
-            print_variants(s, (*enum_definition).variants, v.span);
-        }
     }
     match v.node.disr_expr {
       Some(d) => {
diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs
index 2bdf26fba58..33b345e2d11 100644
--- a/src/libsyntax/visit.rs
+++ b/src/libsyntax/visit.rs
@@ -215,9 +215,6 @@ pub fn visit_enum_def<E>(enum_definition: ast::enum_def,
                 (v.visit_struct_def)(struct_def, vr.node.name, tps,
                                    vr.node.id, e, v);
             }
-            enum_variant_kind(ref enum_definition) => {
-                visit_enum_def((*enum_definition), tps, e, v);
-            }
         }
         // Visit the disr expr if it exists
         for vr.node.disr_expr.each |ex| { (v.visit_expr)(*ex, e, v) }
diff --git a/src/test/run-pass/common-fields-trivial.rs b/src/test/run-pass/common-fields-trivial.rs
deleted file mode 100644
index fd5079b8f54..00000000000
--- a/src/test/run-pass/common-fields-trivial.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-enum Foo {
-    struct {
-        x: int,
-        y: int,
-    }
-
-    Bar(int),
-    Baz(int)
-}
-
-pub fn main() {
-    let x = Bar(3);
-}
-