@@ -553,7 +553,7 @@ pub(crate) struct BindgenContext {
553
553
554
554
/// A map of all enum variants, mapping the variant name to
555
555
/// the generated constant name and/or path.
556
- enum_variants : HashMap < String , syn:: Expr > ,
556
+ enum_variants : HashMap < String , ( ItemId , syn:: Expr ) > ,
557
557
558
558
/// The set of (`ItemId`s of) types that can't derive debug.
559
559
///
@@ -2826,15 +2826,19 @@ If you encounter an error missing from this list, please file an issue or a PR!"
2826
2826
2827
2827
use crate :: EnumVariation ;
2828
2828
2829
+ let enum_canonical_name = if ty. name ( ) . is_some ( ) {
2830
+ Some ( self . rust_ident ( item. canonical_name ( self ) ) )
2831
+ } else {
2832
+ None
2833
+ } ;
2834
+
2829
2835
for variant in enum_ty. variants ( ) {
2830
2836
let variant_name = self . rust_ident ( variant. name ( ) ) ;
2831
2837
2832
- let variant_expr = if ty. name ( ) . is_some ( ) {
2833
- let enum_canonical_name =
2834
- item. canonical_name ( self ) ;
2835
- let enum_canonical_name =
2836
- self . rust_ident ( enum_canonical_name) ;
2837
-
2838
+ let variant_expr = if let Some (
2839
+ enum_canonical_name,
2840
+ ) = & enum_canonical_name
2841
+ {
2838
2842
match variation {
2839
2843
EnumVariation :: Rust { .. } |
2840
2844
EnumVariation :: NewType {
@@ -2851,7 +2855,7 @@ If you encounter an error missing from this list, please file an issue or a PR!"
2851
2855
EnumVariation :: Consts { .. } => {
2852
2856
let constant_name = self
2853
2857
. enum_variant_const_name (
2854
- Some ( & enum_canonical_name) ,
2858
+ Some ( enum_canonical_name) ,
2855
2859
& variant_name,
2856
2860
) ;
2857
2861
syn:: parse_quote! { #constant_name }
@@ -2868,7 +2872,7 @@ If you encounter an error missing from this list, please file an issue or a PR!"
2868
2872
2869
2873
self . enum_variants . insert (
2870
2874
variant. name ( ) . to_owned ( ) ,
2871
- variant_expr,
2875
+ ( item . id ( ) , variant_expr) ,
2872
2876
) ;
2873
2877
}
2874
2878
}
@@ -2932,12 +2936,17 @@ If you encounter an error missing from this list, please file an issue or a PR!"
2932
2936
}
2933
2937
2934
2938
/// Get the generated name of an enum variant.
2935
- pub ( crate ) fn enum_variant ( & self , variant : & str ) -> Option < & syn:: Expr > {
2939
+ pub ( crate ) fn enum_variant (
2940
+ & self ,
2941
+ variant : & str ,
2942
+ ) -> Option < ( ItemId , & syn:: Expr ) > {
2936
2943
assert ! (
2937
2944
self . in_codegen_phase( ) ,
2938
2945
"We only compute enum_variants when we enter codegen" ,
2939
2946
) ;
2940
- self . enum_variants . get ( variant)
2947
+ self . enum_variants
2948
+ . get ( variant)
2949
+ . map ( |( item_id, variant) | ( * item_id, variant) )
2941
2950
}
2942
2951
2943
2952
/// Look up whether `id` refers to an `enum` whose underlying type is
@@ -3230,7 +3239,14 @@ impl cmacro::CodegenContext for BindgenContext {
3230
3239
}
3231
3240
3232
3241
fn resolve_enum_variant ( & self , variant : & str ) -> Option < syn:: Expr > {
3233
- self . enum_variant ( variant) . cloned ( )
3242
+ let ( item_id, enum_variant) = self . enum_variant ( variant) ?;
3243
+
3244
+ let item = self . resolve_item ( item_id) ;
3245
+ if item. is_blocklisted ( self ) {
3246
+ return None ;
3247
+ }
3248
+
3249
+ Some ( enum_variant. clone ( ) )
3234
3250
}
3235
3251
3236
3252
fn resolve_ty ( & self , ty : & str ) -> Option < syn:: Type > {
0 commit comments