Skip to content

Commit 19db44f

Browse files
committed
XXX: redoing Enum
1 parent e71c375 commit 19db44f

File tree

23 files changed

+96
-106
lines changed

23 files changed

+96
-106
lines changed

compiler/rustc_ast/src/ast.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2440,10 +2440,6 @@ pub struct ForeignMod {
24402440
pub items: Vec<P<ForeignItem>>,
24412441
}
24422442

2443-
#[derive(Clone, Encodable, Decodable, Debug)]
2444-
pub struct EnumDef {
2445-
pub variants: Vec<Variant>,
2446-
}
24472443
/// Enum variant.
24482444
#[derive(Clone, Encodable, Decodable, Debug)]
24492445
pub struct Variant {
@@ -2808,6 +2804,12 @@ pub struct Fn {
28082804
pub body: Option<P<Block>>,
28092805
}
28102806

2807+
#[derive(Clone, Encodable, Decodable, Debug)]
2808+
pub struct Enum {
2809+
pub variants: Vec<Variant>,
2810+
pub generics: Generics,
2811+
}
2812+
28112813
#[derive(Clone, Encodable, Decodable, Debug)]
28122814
pub enum ItemKind {
28132815
/// An `extern crate` item, with the optional *original* crate name if the crate was renamed.
@@ -2849,7 +2851,7 @@ pub enum ItemKind {
28492851
/// An enum definition (`enum`).
28502852
///
28512853
/// E.g., `enum Foo<A, B> { C<A>, D<B> }`.
2852-
Enum(EnumDef, Box<Generics>),
2854+
Enum(Box<Enum>),
28532855
/// A struct definition (`struct`).
28542856
///
28552857
/// E.g., `struct Foo<A> { x: A }`.
@@ -2915,7 +2917,7 @@ impl ItemKind {
29152917
match self {
29162918
Self::Fn(box Fn { generics, .. })
29172919
| Self::TyAlias(box TyAlias { generics, .. })
2918-
| Self::Enum(_, box generics)
2920+
| Self::Enum(box Enum { generics, .. })
29192921
| Self::Struct(_, box generics)
29202922
| Self::Union(_, box generics)
29212923
| Self::Trait(box Trait { generics, .. })

compiler/rustc_ast/src/mut_visit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1048,7 +1048,7 @@ pub fn noop_visit_item_kind<T: MutVisitor>(kind: &mut ItemKind, vis: &mut T) {
10481048
visit_bounds(bounds, vis);
10491049
visit_opt(ty, |ty| vis.visit_ty(ty));
10501050
}
1051-
ItemKind::Enum(EnumDef { variants }, generics) => {
1051+
ItemKind::Enum(box Enum { variants, generics }) => {
10521052
variants.flat_map_in_place(|variant| vis.flat_map_variant(variant));
10531053
vis.visit_generics(generics);
10541054
}

compiler/rustc_ast/src/visit.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,6 @@ pub trait Visitor<'ast>: Sized {
177177
fn visit_field_def(&mut self, s: &'ast FieldDef) {
178178
walk_field_def(self, s)
179179
}
180-
fn visit_enum_def(&mut self, enum_definition: &'ast EnumDef) {
181-
walk_enum_def(self, enum_definition)
182-
}
183180
fn visit_variant(&mut self, v: &'ast Variant) {
184181
walk_variant(self, v)
185182
}
@@ -326,9 +323,9 @@ pub fn walk_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a Item) {
326323
walk_list!(visitor, visit_param_bound, bounds, BoundKind::Bound);
327324
walk_list!(visitor, visit_ty, ty);
328325
}
329-
ItemKind::Enum(ref enum_definition, ref generics) => {
326+
ItemKind::Enum(box Enum { ref variants, ref generics }) => {
330327
visitor.visit_generics(generics);
331-
visitor.visit_enum_def(enum_definition)
328+
walk_list!(visitor, visit_variant, variants);
332329
}
333330
ItemKind::Impl(box Impl {
334331
defaultness: _,
@@ -371,10 +368,6 @@ pub fn walk_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a Item) {
371368
walk_list!(visitor, visit_attribute, &item.attrs);
372369
}
373370

374-
pub fn walk_enum_def<'a, V: Visitor<'a>>(visitor: &mut V, enum_definition: &'a EnumDef) {
375-
walk_list!(visitor, visit_variant, &enum_definition.variants);
376-
}
377-
378371
pub fn walk_variant<'a, V: Visitor<'a>>(visitor: &mut V, variant: &'a Variant)
379372
where
380373
V: Visitor<'a>,

compiler/rustc_ast_lowering/src/item.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -324,15 +324,13 @@ impl<'hir> LoweringContext<'_, 'hir> {
324324
);
325325
hir::ItemKind::TyAlias(ty, generics)
326326
}
327-
ItemKind::Enum(ref enum_definition, ref generics) => {
327+
ItemKind::Enum(box Enum { ref variants, ref generics }) => {
328328
let (generics, variants) = self.lower_generics(
329329
generics,
330330
id,
331331
ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
332332
|this| {
333-
this.arena.alloc_from_iter(
334-
enum_definition.variants.iter().map(|x| this.lower_variant(x)),
335-
)
333+
this.arena.alloc_from_iter(variants.iter().map(|x| this.lower_variant(x)))
336334
},
337335
);
338336
hir::ItemKind::Enum(hir::EnumDef { variants }, generics)

compiler/rustc_ast_passes/src/ast_validation.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,8 +1250,8 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
12501250
self.extern_mod = old_item;
12511251
return; // Avoid visiting again.
12521252
}
1253-
ItemKind::Enum(ref def, _) => {
1254-
for variant in &def.variants {
1253+
ItemKind::Enum(box Enum { ref variants, .. }) => {
1254+
for variant in variants {
12551255
self.invalid_visibility(&variant.vis, None);
12561256
for field in variant.data.fields() {
12571257
self.invalid_visibility(&field.vis, None);
@@ -1547,10 +1547,6 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
15471547
self.with_banned_assoc_ty_bound(|this| visit::walk_struct_def(this, s))
15481548
}
15491549

1550-
fn visit_enum_def(&mut self, enum_definition: &'a EnumDef) {
1551-
self.with_banned_assoc_ty_bound(|this| visit::walk_enum_def(this, enum_definition))
1552-
}
1553-
15541550
fn visit_fn(&mut self, fk: FnKind<'a>, span: Span, id: NodeId) {
15551551
// Only associated `fn`s can have `self` parameters.
15561552
let self_semantic = match fk.ctxt() {

compiler/rustc_ast_passes/src/feature_gate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
465465
}
466466
}
467467

468-
ast::ItemKind::Enum(ast::EnumDef { ref variants, .. }, ..) => {
468+
ast::ItemKind::Enum(box ast::Enum { ref variants, .. }) => {
469469
for variant in variants {
470470
match (&variant.data, &variant.disr_expr) {
471471
(ast::VariantData::Unit(..), _) => {}

compiler/rustc_ast_passes/src/node_count.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,6 @@ impl<'ast> Visitor<'ast> for NodeCounter {
9191
self.count += 1;
9292
walk_field_def(self, s)
9393
}
94-
fn visit_enum_def(&mut self, enum_definition: &EnumDef) {
95-
self.count += 1;
96-
walk_enum_def(self, enum_definition)
97-
}
9894
fn visit_variant(&mut self, v: &Variant) {
9995
self.count += 1;
10096
walk_variant(self, v)

compiler/rustc_ast_pretty/src/pprust/state/item.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,8 @@ impl<'a> State<'a> {
240240
defaultness,
241241
);
242242
}
243-
ast::ItemKind::Enum(ref enum_definition, ref params) => {
244-
self.print_enum_def(enum_definition, params, item.ident, item.span, &item.vis);
243+
ast::ItemKind::Enum(box ast::Enum { ref variants, ref generics }) => {
244+
self.print_enum(variants, generics, item.ident, item.span, &item.vis);
245245
}
246246
ast::ItemKind::Struct(ref struct_def, ref generics) => {
247247
self.head(visibility_qualified(&item.vis, "struct"));
@@ -377,9 +377,9 @@ impl<'a> State<'a> {
377377
self.ann.post(self, AnnNode::Item(item))
378378
}
379379

380-
fn print_enum_def(
380+
fn print_enum(
381381
&mut self,
382-
enum_definition: &ast::EnumDef,
382+
variants: &[ast::Variant],
383383
generics: &ast::Generics,
384384
ident: Ident,
385385
span: rustc_span::Span,
@@ -390,7 +390,7 @@ impl<'a> State<'a> {
390390
self.print_generic_params(&generics.params);
391391
self.print_where_clause(&generics.where_clause);
392392
self.space();
393-
self.print_variants(&enum_definition.variants, span)
393+
self.print_variants(variants, span)
394394
}
395395

396396
fn print_variants(&mut self, variants: &[ast::Variant], span: rustc_span::Span) {

compiler/rustc_builtin_macros/src/deriving/clone.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::deriving::generic::ty::*;
22
use crate::deriving::generic::*;
33
use crate::deriving::path_std;
44

5-
use rustc_ast::{self as ast, Generics, ItemKind, MetaItem, VariantData};
5+
use rustc_ast::{self as ast, Enum, Generics, ItemKind, MetaItem, VariantData};
66
use rustc_data_structures::fx::FxHashSet;
77
use rustc_expand::base::{Annotatable, ExtCtxt};
88
use rustc_span::symbol::{kw, sym, Ident};
@@ -34,7 +34,7 @@ pub fn expand_deriving_clone(
3434
match *item {
3535
Annotatable::Item(ref annitem) => match annitem.kind {
3636
ItemKind::Struct(_, box Generics { ref params, .. })
37-
| ItemKind::Enum(_, box Generics { ref params, .. }) => {
37+
| ItemKind::Enum(box Enum { variants: _, generics: Generics { ref params, .. } }) => {
3838
let container_id = cx.current_expansion.id.expn_data().parent.expect_local();
3939
let has_derive_copy = cx.resolver.has_derive_copy(container_id);
4040
if has_derive_copy
@@ -137,8 +137,8 @@ fn cs_clone_simple(
137137
StaticStruct(vdata, ..) => {
138138
process_variant(vdata);
139139
}
140-
StaticEnum(enum_def, ..) => {
141-
for variant in &enum_def.variants {
140+
StaticEnum(variants, ..) => {
141+
for variant in variants {
142142
process_variant(&variant.data);
143143
}
144144
}

compiler/rustc_builtin_macros/src/deriving/cmp/eq.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ fn cs_total_eq_assert(
7979
StaticStruct(vdata, ..) => {
8080
process_variant(vdata);
8181
}
82-
StaticEnum(enum_def, ..) => {
83-
for variant in &enum_def.variants {
82+
StaticEnum(variants, ..) => {
83+
for variant in variants {
8484
process_variant(&variant.data);
8585
}
8686
}

0 commit comments

Comments
 (0)