@@ -3275,6 +3275,8 @@ struct EnumBuilder {
3275
3275
repr : syn:: Type ,
3276
3276
/// The enum kind we are generating
3277
3277
kind : EnumBuilderKind ,
3278
+ /// A list of all variants this enum has.
3279
+ enum_variants : Vec < EnumVariantInfo > ,
3278
3280
}
3279
3281
3280
3282
/// A helper type to construct different enum variations.
@@ -3350,18 +3352,18 @@ impl EnumBuilder {
3350
3352
attrs,
3351
3353
repr : repr. clone ( ) ,
3352
3354
kind,
3355
+ enum_variants : vec ! [ ] ,
3353
3356
}
3354
3357
}
3355
3358
3356
3359
/// Add a variant to this enum.
3357
3360
fn with_variant (
3358
- self ,
3361
+ mut self ,
3359
3362
ctx : & BindgenContext ,
3360
3363
variant : & EnumVariant ,
3361
3364
variant_doc : proc_macro2:: TokenStream ,
3362
3365
mangling_prefix : Option < & str > ,
3363
3366
rust_ty : & syn:: Type ,
3364
- enum_variants : & mut Vec < EnumVariantInfo > ,
3365
3367
is_ty_named : bool ,
3366
3368
) -> Self {
3367
3369
let variant_name = ctx. rust_mangle ( variant. name ( ) ) ;
@@ -3378,7 +3380,7 @@ impl EnumBuilder {
3378
3380
match self . kind {
3379
3381
EnumBuilderKind :: Rust { .. } => {
3380
3382
let name = ctx. rust_ident ( variant_name) ;
3381
- enum_variants. push ( EnumVariantInfo {
3383
+ self . enum_variants . push ( EnumVariantInfo {
3382
3384
variant_name : name,
3383
3385
variant_doc,
3384
3386
value : expr,
@@ -3397,7 +3399,7 @@ impl EnumBuilder {
3397
3399
None => variant_name,
3398
3400
} )
3399
3401
} ;
3400
- enum_variants. push ( EnumVariantInfo {
3402
+ self . enum_variants . push ( EnumVariantInfo {
3401
3403
variant_name : variant_ident,
3402
3404
variant_doc,
3403
3405
value : quote ! { #rust_ty ( #expr ) } ,
@@ -3415,7 +3417,7 @@ impl EnumBuilder {
3415
3417
} ;
3416
3418
3417
3419
let ident = ctx. rust_ident ( constant_name) ;
3418
- enum_variants. push ( EnumVariantInfo {
3420
+ self . enum_variants . push ( EnumVariantInfo {
3419
3421
variant_name : ident,
3420
3422
variant_doc,
3421
3423
value : quote ! { #expr } ,
@@ -3425,7 +3427,7 @@ impl EnumBuilder {
3425
3427
}
3426
3428
EnumBuilderKind :: ModuleConsts { .. } => {
3427
3429
let name = ctx. rust_ident ( variant_name) ;
3428
- enum_variants. push ( EnumVariantInfo {
3430
+ self . enum_variants . push ( EnumVariantInfo {
3429
3431
variant_name : name,
3430
3432
variant_doc,
3431
3433
value : quote ! { #expr } ,
@@ -3476,7 +3478,6 @@ impl EnumBuilder {
3476
3478
self ,
3477
3479
ctx : & BindgenContext ,
3478
3480
rust_ty : & syn:: Type ,
3479
- enum_variants : & [ EnumVariantInfo ] ,
3480
3481
) -> proc_macro2:: TokenStream {
3481
3482
let enum_ident = self . enum_type ;
3482
3483
@@ -3485,7 +3486,7 @@ impl EnumBuilder {
3485
3486
EnumBuilderKind :: Rust { .. } => {
3486
3487
let mut variants = vec ! [ ] ;
3487
3488
3488
- for v in enum_variants {
3489
+ for v in self . enum_variants {
3489
3490
let variant_doc = & v. variant_doc ;
3490
3491
let variant_ident = & v. variant_name ;
3491
3492
let variant_value = & v. value ;
@@ -3506,7 +3507,7 @@ impl EnumBuilder {
3506
3507
EnumBuilderKind :: NewType { .. } => {
3507
3508
let mut variants = vec ! [ ] ;
3508
3509
3509
- for v in enum_variants {
3510
+ for v in self . enum_variants {
3510
3511
let variant_doc = & v. variant_doc ;
3511
3512
let variant_ident = & v. variant_name ;
3512
3513
let variant_value = & v. value ;
@@ -3522,7 +3523,7 @@ impl EnumBuilder {
3522
3523
EnumBuilderKind :: ModuleConsts { .. } => {
3523
3524
let mut variants = vec ! [ ] ;
3524
3525
3525
- for v in enum_variants {
3526
+ for v in self . enum_variants {
3526
3527
let variant_doc = & v. variant_doc ;
3527
3528
let variant_ident = & v. variant_name ;
3528
3529
let variant_value = & v. value ;
@@ -3826,8 +3827,6 @@ impl CodeGenerator for Enum {
3826
3827
// do).
3827
3828
let mut constified_variants = VecDeque :: new ( ) ;
3828
3829
3829
- let mut enum_variants = vec ! [ ] ;
3830
-
3831
3830
let mut iter = self . variants ( ) . iter ( ) . peekable ( ) ;
3832
3831
while let Some ( variant) =
3833
3832
iter. next ( ) . or_else ( || constified_variants. pop_front ( ) )
@@ -3895,7 +3894,6 @@ impl CodeGenerator for Enum {
3895
3894
variant_doc,
3896
3895
constant_mangling_prefix,
3897
3896
& enum_rust_ty,
3898
- & mut enum_variants,
3899
3897
enum_ty. name ( ) . is_some ( ) ,
3900
3898
) ;
3901
3899
}
@@ -3907,7 +3905,6 @@ impl CodeGenerator for Enum {
3907
3905
variant_doc. clone ( ) ,
3908
3906
constant_mangling_prefix,
3909
3907
& enum_rust_ty,
3910
- & mut enum_variants,
3911
3908
enum_ty. name ( ) . is_some ( ) ,
3912
3909
) ;
3913
3910
@@ -3947,7 +3944,7 @@ impl CodeGenerator for Enum {
3947
3944
}
3948
3945
}
3949
3946
3950
- let item = builder. build ( ctx, & enum_rust_ty, & enum_variants ) ;
3947
+ let item = builder. build ( ctx, & enum_rust_ty) ;
3951
3948
result. push ( item) ;
3952
3949
}
3953
3950
}
0 commit comments