Skip to content

Commit f7a6147

Browse files
committed
Box EnumKind
1 parent 4716ce7 commit f7a6147

File tree

19 files changed

+32
-27
lines changed

19 files changed

+32
-27
lines changed

compiler/rustc_ast/src/ast.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2694,6 +2694,9 @@ pub struct ConstKind(pub Defaultness, pub P<Ty>, pub Option<P<Expr>>);
26942694
#[derive(Clone, Encodable, Decodable, Debug)]
26952695
pub struct StructUnionKind(pub VariantData, pub Generics);
26962696

2697+
#[derive(Clone, Encodable, Decodable, Debug)]
2698+
pub struct EnumKind(pub EnumDef, pub Generics);
2699+
26972700
#[derive(Clone, Encodable, Decodable, Debug)]
26982701
pub enum ItemKind {
26992702
/// An `extern crate` item, with the optional *original* crate name if the crate was renamed.
@@ -2733,7 +2736,7 @@ pub enum ItemKind {
27332736
/// An enum definition (`enum`).
27342737
///
27352738
/// E.g., `enum Foo<A, B> { C<A>, D<B> }`.
2736-
Enum(EnumDef, Generics),
2739+
Enum(Box<EnumKind>),
27372740
/// A struct definition (`struct`).
27382741
///
27392742
/// E.g., `struct Foo<A> { x: A }`.
@@ -2802,7 +2805,7 @@ impl ItemKind {
28022805
match self {
28032806
Self::Fn(box FnKind(_, _, generics, _))
28042807
| Self::TyAlias(box TyAliasKind(_, generics, ..))
2805-
| Self::Enum(_, generics)
2808+
| Self::Enum(box EnumKind(_, generics))
28062809
| Self::Struct(box StructUnionKind(_, generics))
28072810
| Self::Union(box StructUnionKind(_, generics))
28082811
| Self::Trait(box TraitKind(_, _, generics, ..))

compiler/rustc_ast/src/mut_visit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -926,7 +926,7 @@ pub fn noop_visit_item_kind<T: MutVisitor>(kind: &mut ItemKind, vis: &mut T) {
926926
visit_bounds(bounds, vis);
927927
visit_opt(ty, |ty| vis.visit_ty(ty));
928928
}
929-
ItemKind::Enum(EnumDef { variants }, generics) => {
929+
ItemKind::Enum(box EnumKind(EnumDef { variants }, generics)) => {
930930
variants.flat_map_in_place(|variant| vis.flat_map_variant(variant));
931931
vis.visit_generics(generics);
932932
}

compiler/rustc_ast/src/token.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -805,7 +805,7 @@ impl Nonterminal {
805805

806806
let name = item.ident.name;
807807
if name == sym::ProceduralMasqueradeDummyType || name == sym::ProcMacroHack {
808-
if let ast::ItemKind::Enum(enum_def, _) = &item.kind {
808+
if let ast::ItemKind::Enum(box ast::EnumKind(enum_def, _)) = &item.kind {
809809
if let [variant] = &*enum_def.variants {
810810
return variant.ident.name == sym::Input;
811811
}

compiler/rustc_ast/src/visit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ pub fn walk_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a Item) {
308308
walk_list!(visitor, visit_param_bound, bounds);
309309
walk_list!(visitor, visit_ty, ty);
310310
}
311-
ItemKind::Enum(ref enum_definition, ref generics) => {
311+
ItemKind::Enum(box EnumKind(ref enum_definition, ref generics)) => {
312312
visitor.visit_generics(generics);
313313
visitor.visit_enum_def(enum_definition, generics, item.id, item.span)
314314
}

compiler/rustc_ast_lowering/src/item.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
355355
let generics = self.lower_generics(generics, ImplTraitContext::disallowed());
356356
hir::ItemKind::TyAlias(ty, generics)
357357
}
358-
ItemKind::Enum(ref enum_definition, ref generics) => hir::ItemKind::Enum(
358+
ItemKind::Enum(box EnumKind(ref enum_definition, ref generics)) => hir::ItemKind::Enum(
359359
hir::EnumDef {
360360
variants: self.arena.alloc_from_iter(
361361
enum_definition.variants.iter().map(|x| self.lower_variant(x)),

compiler/rustc_ast_lowering/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
500500
match item.kind {
501501
ItemKind::Struct(box StructUnionKind(_, ref generics))
502502
| ItemKind::Union(box StructUnionKind(_, ref generics))
503-
| ItemKind::Enum(_, ref generics)
503+
| ItemKind::Enum(box EnumKind(_, ref generics))
504504
| ItemKind::TyAlias(box TyAliasKind(_, ref generics, ..))
505505
| ItemKind::Trait(box TraitKind(_, _, ref generics, ..)) => {
506506
let def_id = self.lctx.resolver.local_def_id(item.id);

compiler/rustc_ast_passes/src/ast_validation.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1019,7 +1019,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
10191019
self.extern_mod = old_item;
10201020
return; // Avoid visiting again.
10211021
}
1022-
ItemKind::Enum(ref def, _) => {
1022+
ItemKind::Enum(box EnumKind(ref def, _)) => {
10231023
for variant in &def.variants {
10241024
self.invalid_visibility(&variant.vis, None);
10251025
for field in variant.data.fields() {

compiler/rustc_ast_passes/src/feature_gate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
345345
}
346346
}
347347

348-
ast::ItemKind::Enum(ast::EnumDef { ref variants, .. }, ..) => {
348+
ast::ItemKind::Enum(box ast::EnumKind(ast::EnumDef { ref variants, .. }, ..)) => {
349349
for variant in variants {
350350
match (&variant.data, &variant.disr_expr) {
351351
(ast::VariantData::Unit(..), _) => {}

compiler/rustc_ast_pretty/src/pprust/state.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1179,7 +1179,7 @@ impl<'a> State<'a> {
11791179
let ty = ty.as_deref();
11801180
self.print_associated_type(item.ident, generics, bounds, ty, &item.vis, def);
11811181
}
1182-
ast::ItemKind::Enum(ref enum_definition, ref params) => {
1182+
ast::ItemKind::Enum(box ast::EnumKind(ref enum_definition, ref params)) => {
11831183
self.print_enum_def(enum_definition, params, item.ident, item.span, &item.vis);
11841184
}
11851185
ast::ItemKind::Struct(box ast::StructUnionKind(ref struct_def, ref generics)) => {

compiler/rustc_builtin_macros/src/deriving/clone.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ use crate::deriving::path_std;
44

55
use rustc_ast::ptr::P;
66
use rustc_ast::{
7-
self as ast, Expr, GenericArg, Generics, ItemKind, MetaItem, StructUnionKind, VariantData,
7+
self as ast, EnumKind, Expr, GenericArg, Generics, ItemKind, MetaItem, StructUnionKind,
8+
VariantData,
89
};
910
use rustc_expand::base::{Annotatable, ExtCtxt};
1011
use rustc_span::symbol::{kw, sym, Ident, Symbol};
@@ -37,7 +38,7 @@ pub fn expand_deriving_clone(
3738
match *item {
3839
Annotatable::Item(ref annitem) => match annitem.kind {
3940
ItemKind::Struct(box StructUnionKind(_, Generics { ref params, .. }))
40-
| ItemKind::Enum(_, Generics { ref params, .. }) => {
41+
| ItemKind::Enum(box EnumKind(_, Generics { ref params, .. })) => {
4142
let container_id = cx.current_expansion.id.expn_data().parent;
4243
if cx.resolver.has_derive_copy(container_id)
4344
&& !params

compiler/rustc_builtin_macros/src/deriving/generic/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ impl<'a> TraitDef<'a> {
403403
});
404404
let has_no_type_params = match item.kind {
405405
ast::ItemKind::Struct(box ast::StructUnionKind(_, ref generics))
406-
| ast::ItemKind::Enum(_, ref generics)
406+
| ast::ItemKind::Enum(box ast::EnumKind(_, ref generics))
407407
| ast::ItemKind::Union(box ast::StructUnionKind(_, ref generics)) => !generics
408408
.params
409409
.iter()
@@ -426,7 +426,7 @@ impl<'a> TraitDef<'a> {
426426
from_scratch,
427427
use_temporaries,
428428
),
429-
ast::ItemKind::Enum(ref enum_def, ref generics) => {
429+
ast::ItemKind::Enum(box ast::EnumKind(ref enum_def, ref generics)) => {
430430
// We ignore `use_temporaries` here, because
431431
// `repr(packed)` enums cause an error later on.
432432
//
@@ -1739,7 +1739,7 @@ where
17391739
pub fn is_type_without_fields(item: &Annotatable) -> bool {
17401740
if let Annotatable::Item(ref item) = *item {
17411741
match item.kind {
1742-
ast::ItemKind::Enum(ref enum_def, _) => {
1742+
ast::ItemKind::Enum(box ast::EnumKind(ref enum_def, _)) => {
17431743
enum_def.variants.iter().all(|v| v.data.fields().is_empty())
17441744
}
17451745
ast::ItemKind::Struct(box ast::StructUnionKind(ref variant_data, _)) => {

compiler/rustc_builtin_macros/src/deriving/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use rustc_ast as ast;
44
use rustc_ast::ptr::P;
5-
use rustc_ast::{ImplKind, ItemKind, MetaItem, StructUnionKind};
5+
use rustc_ast::{EnumKind, ImplKind, ItemKind, MetaItem, StructUnionKind};
66
use rustc_expand::base::{Annotatable, ExpandResult, ExtCtxt, MultiItemModifier};
77
use rustc_span::symbol::{sym, Ident, Symbol};
88
use rustc_span::Span;
@@ -122,7 +122,7 @@ fn inject_impl_of_structural_trait(
122122

123123
let generics = match item.kind {
124124
ItemKind::Struct(box StructUnionKind(_, ref generics))
125-
| ItemKind::Enum(_, ref generics) => generics,
125+
| ItemKind::Enum(box EnumKind(_, ref generics)) => generics,
126126
// Do not inject `impl Structural for Union`. (`PartialEq` does not
127127
// support unions, so we will see error downstream.)
128128
ItemKind::Union(..) => return,

compiler/rustc_expand/src/config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ impl<'a> StripUnconfigured<'a> {
459459
| ast::ItemKind::Union(box ast::StructUnionKind(def, _generics)) => {
460460
self.configure_variant_data(def)
461461
}
462-
ast::ItemKind::Enum(ast::EnumDef { variants }, _generics) => {
462+
ast::ItemKind::Enum(box ast::EnumKind(ast::EnumDef { variants }, _generics)) => {
463463
variants.flat_map_in_place(|variant| self.configure(variant));
464464
for variant in variants {
465465
self.configure_variant_data(&mut variant.data);

compiler/rustc_parse/src/parser/item.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1094,7 +1094,7 @@ impl<'a> Parser<'a> {
10941094

10951095
let enum_definition =
10961096
EnumDef { variants: variants.into_iter().filter_map(|v| v).collect() };
1097-
Ok((id, ItemKind::Enum(enum_definition, generics)))
1097+
Ok((id, ItemKind::Enum(box EnumKind(enum_definition, generics))))
10981098
}
10991099

11001100
fn parse_enum_variant(&mut self) -> PResult<'a, Option<Variant>> {

compiler/rustc_resolve/src/build_reduced_graph.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
800800
self.r.define(parent, ident, TypeNS, (res, vis, sp, expansion));
801801
}
802802

803-
ItemKind::Enum(_, _) => {
803+
ItemKind::Enum(_) => {
804804
let module_kind = ModuleKind::Def(DefKind::Enum, def_id, ident.name);
805805
let module = self.r.new_module(
806806
parent,

compiler/rustc_resolve/src/late.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -945,7 +945,7 @@ impl<'a: 'ast, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> {
945945
});
946946
}
947947

948-
ItemKind::Enum(_, ref generics)
948+
ItemKind::Enum(box EnumKind(_, ref generics))
949949
| ItemKind::Struct(box StructUnionKind(_, ref generics))
950950
| ItemKind::Union(box StructUnionKind(_, ref generics)) => {
951951
self.resolve_adt(item, generics);

src/tools/clippy/clippy_lints/src/enum_variants.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use crate::utils::{camel_case, is_present_in_source};
44
use crate::utils::{span_lint, span_lint_and_help};
5-
use rustc_ast::ast::{EnumDef, Item, ItemKind, VisibilityKind};
5+
use rustc_ast::ast::{EnumDef, EnumKind, Item, ItemKind, VisibilityKind};
66
use rustc_lint::{EarlyContext, EarlyLintPass, Lint};
77
use rustc_session::{declare_tool_lint, impl_lint_pass};
88
use rustc_span::source_map::Span;
@@ -315,7 +315,7 @@ impl EarlyLintPass for EnumVariantNames {
315315
}
316316
}
317317
}
318-
if let ItemKind::Enum(ref def, _) = item.kind {
318+
if let ItemKind::Enum(box EnumKind(ref def, _)) = item.kind {
319319
let lint = match item.vis.kind {
320320
VisibilityKind::Public => PUB_ENUM_VARIANT_NAMES,
321321
_ => ENUM_VARIANT_NAMES,

src/tools/clippy/clippy_lints/src/manual_non_exhaustive.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
use crate::utils::{meets_msrv, snippet_opt, span_lint_and_then};
22
use if_chain::if_chain;
33
use rustc_ast::ast::{
4-
Attribute, Item, ItemKind, StructField, StructUnionKind, Variant, VariantData, VisibilityKind,
4+
Attribute, EnumKind, Item, ItemKind, StructField, StructUnionKind, Variant, VariantData,
5+
VisibilityKind,
56
};
67
use rustc_attr as attr;
78
use rustc_errors::Applicability;
@@ -81,7 +82,7 @@ impl EarlyLintPass for ManualNonExhaustive {
8182
}
8283

8384
match &item.kind {
84-
ItemKind::Enum(def, _) => {
85+
ItemKind::Enum(box EnumKind(def, _)) => {
8586
check_manual_non_exhaustive_enum(cx, item, &def.variants);
8687
}
8788
ItemKind::Struct(box StructUnionKind(variant_data, _)) => {

src/tools/clippy/clippy_lints/src/utils/ast_utils.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,8 @@ pub fn eq_item_kind(l: &ItemKind, r: &ItemKind) -> bool {
253253
&& eq_generics(lg, rg)
254254
&& over(lb, rb, |l, r| eq_generic_bound(l, r))
255255
&& both(lt, rt, |l, r| eq_ty(l, r))
256-
},
257-
(Enum(le, lg), Enum(re, rg)) => {
256+
}
257+
(Enum(box EnumKind(le, lg)), Enum(box EnumKind(re, rg))) => {
258258
over(&le.variants, &re.variants, |l, r| eq_variant(l, r)) && eq_generics(lg, rg)
259259
}
260260
(Struct(box StructUnionKind(lv, lg)), Struct(box StructUnionKind(rv, rg)))

0 commit comments

Comments
 (0)