Skip to content

Commit 0fc80e8

Browse files
committed
Move enum_variants into the builder
1 parent 906040e commit 0fc80e8

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

bindgen/codegen/mod.rs

+12-15
Original file line numberDiff line numberDiff line change
@@ -3275,6 +3275,8 @@ struct EnumBuilder {
32753275
repr: syn::Type,
32763276
/// The enum kind we are generating
32773277
kind: EnumBuilderKind,
3278+
/// A list of all variants this enum has.
3279+
enum_variants: Vec<EnumVariantInfo>,
32783280
}
32793281

32803282
/// A helper type to construct different enum variations.
@@ -3350,18 +3352,18 @@ impl EnumBuilder {
33503352
attrs,
33513353
repr: repr.clone(),
33523354
kind,
3355+
enum_variants: vec![],
33533356
}
33543357
}
33553358

33563359
/// Add a variant to this enum.
33573360
fn with_variant(
3358-
self,
3361+
mut self,
33593362
ctx: &BindgenContext,
33603363
variant: &EnumVariant,
33613364
variant_doc: proc_macro2::TokenStream,
33623365
mangling_prefix: Option<&str>,
33633366
rust_ty: &syn::Type,
3364-
enum_variants: &mut Vec<EnumVariantInfo>,
33653367
is_ty_named: bool,
33663368
) -> Self {
33673369
let variant_name = ctx.rust_mangle(variant.name());
@@ -3378,7 +3380,7 @@ impl EnumBuilder {
33783380
match self.kind {
33793381
EnumBuilderKind::Rust { .. } => {
33803382
let name = ctx.rust_ident(variant_name);
3381-
enum_variants.push(EnumVariantInfo {
3383+
self.enum_variants.push(EnumVariantInfo {
33823384
variant_name: name,
33833385
variant_doc,
33843386
value: expr,
@@ -3397,7 +3399,7 @@ impl EnumBuilder {
33973399
None => variant_name,
33983400
})
33993401
};
3400-
enum_variants.push(EnumVariantInfo {
3402+
self.enum_variants.push(EnumVariantInfo {
34013403
variant_name: variant_ident,
34023404
variant_doc,
34033405
value: quote! { #rust_ty ( #expr )},
@@ -3415,7 +3417,7 @@ impl EnumBuilder {
34153417
};
34163418

34173419
let ident = ctx.rust_ident(constant_name);
3418-
enum_variants.push(EnumVariantInfo {
3420+
self.enum_variants.push(EnumVariantInfo {
34193421
variant_name: ident,
34203422
variant_doc,
34213423
value: quote! { #expr },
@@ -3425,7 +3427,7 @@ impl EnumBuilder {
34253427
}
34263428
EnumBuilderKind::ModuleConsts { .. } => {
34273429
let name = ctx.rust_ident(variant_name);
3428-
enum_variants.push(EnumVariantInfo {
3430+
self.enum_variants.push(EnumVariantInfo {
34293431
variant_name: name,
34303432
variant_doc,
34313433
value: quote! { #expr },
@@ -3476,7 +3478,6 @@ impl EnumBuilder {
34763478
self,
34773479
ctx: &BindgenContext,
34783480
rust_ty: &syn::Type,
3479-
enum_variants: &[EnumVariantInfo],
34803481
) -> proc_macro2::TokenStream {
34813482
let enum_ident = self.enum_type;
34823483

@@ -3485,7 +3486,7 @@ impl EnumBuilder {
34853486
EnumBuilderKind::Rust { .. } => {
34863487
let mut variants = vec![];
34873488

3488-
for v in enum_variants {
3489+
for v in self.enum_variants {
34893490
let variant_doc = &v.variant_doc;
34903491
let variant_ident = &v.variant_name;
34913492
let variant_value = &v.value;
@@ -3506,7 +3507,7 @@ impl EnumBuilder {
35063507
EnumBuilderKind::NewType { .. } => {
35073508
let mut variants = vec![];
35083509

3509-
for v in enum_variants {
3510+
for v in self.enum_variants {
35103511
let variant_doc = &v.variant_doc;
35113512
let variant_ident = &v.variant_name;
35123513
let variant_value = &v.value;
@@ -3522,7 +3523,7 @@ impl EnumBuilder {
35223523
EnumBuilderKind::ModuleConsts { .. } => {
35233524
let mut variants = vec![];
35243525

3525-
for v in enum_variants {
3526+
for v in self.enum_variants {
35263527
let variant_doc = &v.variant_doc;
35273528
let variant_ident = &v.variant_name;
35283529
let variant_value = &v.value;
@@ -3826,8 +3827,6 @@ impl CodeGenerator for Enum {
38263827
// do).
38273828
let mut constified_variants = VecDeque::new();
38283829

3829-
let mut enum_variants = vec![];
3830-
38313830
let mut iter = self.variants().iter().peekable();
38323831
while let Some(variant) =
38333832
iter.next().or_else(|| constified_variants.pop_front())
@@ -3895,7 +3894,6 @@ impl CodeGenerator for Enum {
38953894
variant_doc,
38963895
constant_mangling_prefix,
38973896
&enum_rust_ty,
3898-
&mut enum_variants,
38993897
enum_ty.name().is_some(),
39003898
);
39013899
}
@@ -3907,7 +3905,6 @@ impl CodeGenerator for Enum {
39073905
variant_doc.clone(),
39083906
constant_mangling_prefix,
39093907
&enum_rust_ty,
3910-
&mut enum_variants,
39113908
enum_ty.name().is_some(),
39123909
);
39133910

@@ -3947,7 +3944,7 @@ impl CodeGenerator for Enum {
39473944
}
39483945
}
39493946

3950-
let item = builder.build(ctx, &enum_rust_ty, &enum_variants);
3947+
let item = builder.build(ctx, &enum_rust_ty);
39513948
result.push(item);
39523949
}
39533950
}

0 commit comments

Comments
 (0)