@@ -188,6 +188,7 @@ pub fn gen_mod(
188188 defs. extend ( ctypedef_to_rs (
189189 & mut ctx,
190190 options. rust_enums ,
191+ options. derive_debug ,
191192 t. name . clone ( ) , & t. ty ) )
192193 } ,
193194 GCompDecl ( ci) => {
@@ -205,6 +206,7 @@ pub fn gen_mod(
205206 }
206207 let c = ci. borrow ( ) . clone ( ) ;
207208 defs. extend ( comp_to_rs ( & mut ctx, c. kind , comp_name ( c. kind , & c. name ) ,
209+ options. derive_debug ,
208210 c. layout , c. members ) . into_iter ( ) )
209211 } ,
210212 GEnumDecl ( ei) => {
@@ -452,6 +454,7 @@ fn tag_dup_decl(gs: Vec<Global>) -> Vec<Global> {
452454fn ctypedef_to_rs (
453455 ctx : & mut GenCtx ,
454456 rust_enums : bool ,
457+ derive_debug : bool ,
455458 name : String ,
456459 ty : & Type )
457460 -> Vec < P < ast:: Item > > {
@@ -483,7 +486,7 @@ fn ctypedef_to_rs(
483486 if is_empty {
484487 ci. borrow_mut ( ) . name = name. clone ( ) ;
485488 let c = ci. borrow ( ) . clone ( ) ;
486- comp_to_rs ( ctx, c. kind , name, c. layout , c. members )
489+ comp_to_rs ( ctx, c. kind , name, derive_debug , c. layout , c. members )
487490 } else {
488491 vec ! ( mk_item( ctx, name, ty) )
489492 }
@@ -503,14 +506,16 @@ fn ctypedef_to_rs(
503506}
504507
505508fn comp_to_rs ( ctx : & mut GenCtx , kind : CompKind , name : String ,
509+ derive_debug : bool ,
506510 layout : Layout , members : Vec < CompMember > ) -> Vec < P < ast:: Item > > {
507511 match kind {
508- CompKind :: Struct => cstruct_to_rs ( ctx, name, layout, members) ,
509- CompKind :: Union => cunion_to_rs ( ctx, name, layout, members) ,
512+ CompKind :: Struct => cstruct_to_rs ( ctx, name, derive_debug , layout, members) ,
513+ CompKind :: Union => cunion_to_rs ( ctx, name, derive_debug , layout, members) ,
510514 }
511515}
512516
513517fn cstruct_to_rs ( ctx : & mut GenCtx , name : String ,
518+ derive_debug : bool ,
514519 layout : Layout , members : Vec < CompMember > ) -> Vec < P < ast:: Item > > {
515520 let mut fields = vec ! ( ) ;
516521 let mut methods = vec ! ( ) ;
@@ -522,7 +527,7 @@ fn cstruct_to_rs(ctx: &mut GenCtx, name: String,
522527 let mut bitfields: u32 = 0 ;
523528
524529 // Debug is only defined on little arrays
525- let mut can_derive_debug = true ;
530+ let mut can_derive_debug = derive_debug ;
526531
527532 for m in & members {
528533 let ( opt_rc_c, opt_f) = match * m {
@@ -563,9 +568,10 @@ fn cstruct_to_rs(ctx: &mut GenCtx, name: String,
563568 unnamed += 1 ;
564569 let field_name = format ! ( "_bindgen_data_{}_" , unnamed) ;
565570 fields. push ( mk_blob_field ( ctx, & field_name[ ..] , c. layout ) ) ;
566- methods. extend ( gen_comp_methods ( ctx, & field_name[ ..] , 0 , c. kind , & c. members , & mut extra) . into_iter ( ) ) ;
571+ methods. extend ( gen_comp_methods ( ctx, & field_name[ ..] , 0 , c. kind , & c. members , & mut extra, derive_debug ) . into_iter ( ) ) ;
567572 } else {
568573 extra. extend ( comp_to_rs ( ctx, c. kind , comp_name ( c. kind , & c. name ) ,
574+ derive_debug,
569575 c. layout , c. members . clone ( ) ) . into_iter ( ) ) ;
570576 }
571577 }
@@ -634,7 +640,7 @@ fn opaque_to_rs(ctx: &mut GenCtx, name: String) -> P<ast::Item> {
634640 } )
635641}
636642
637- fn cunion_to_rs ( ctx : & mut GenCtx , name : String , layout : Layout , members : Vec < CompMember > ) -> Vec < P < ast:: Item > > {
643+ fn cunion_to_rs ( ctx : & mut GenCtx , name : String , derive_debug : bool , layout : Layout , members : Vec < CompMember > ) -> Vec < P < ast:: Item > > {
638644 fn mk_item ( ctx : & mut GenCtx , name : String , item : ast:: ItemKind , vis :
639645 ast:: Visibility , attrs : Vec < ast:: Attribute > ) -> P < ast:: Item > {
640646 P ( ast:: Item {
@@ -674,7 +680,7 @@ fn cunion_to_rs(ctx: &mut GenCtx, name: String, layout: Layout, members: Vec<Com
674680 empty_generics ( ) ,
675681 None ,
676682 P ( cty_to_rs ( ctx, & union) ) ,
677- gen_comp_methods ( ctx, data_field_name, 0 , CompKind :: Union , & members, & mut extra) ,
683+ gen_comp_methods ( ctx, data_field_name, 0 , CompKind :: Union , & members, & mut extra, derive_debug ) ,
678684 ) ;
679685
680686 let mut items = vec ! (
@@ -859,7 +865,8 @@ fn cenum_to_rs(
859865/// These are emitted into `extra`.
860866fn gen_comp_methods ( ctx : & mut GenCtx , data_field : & str , data_offset : usize ,
861867 kind : CompKind , members : & [ CompMember ] ,
862- extra : & mut Vec < P < ast:: Item > > ) -> Vec < ast:: ImplItem > {
868+ extra : & mut Vec < P < ast:: Item > > ,
869+ derive_debug : bool ) -> Vec < ast:: ImplItem > {
863870
864871 let mk_field_method = |ctx : & mut GenCtx , f : & FieldInfo , offset : usize | {
865872 // TODO: Implement bitfield accessors
@@ -904,14 +911,15 @@ fn gen_comp_methods(ctx: &mut GenCtx, data_field: &str, data_offset: usize,
904911 CompMember :: Comp ( ref rc_c) => {
905912 let c = & rc_c. borrow ( ) ;
906913 methods. extend ( gen_comp_methods ( ctx, data_field, offset, c. kind ,
907- & c. members , extra) . into_iter ( ) ) ;
914+ & c. members , extra, derive_debug ) . into_iter ( ) ) ;
908915 c. layout . size
909916 }
910917 CompMember :: CompField ( ref rc_c, ref f) => {
911918 methods. extend ( mk_field_method ( ctx, f, offset) . into_iter ( ) ) ;
912919
913920 let c = rc_c. borrow ( ) ;
914921 extra. extend ( comp_to_rs ( ctx, c. kind , comp_name ( c. kind , & c. name ) ,
922+ derive_debug,
915923 c. layout , c. members . clone ( ) ) . into_iter ( ) ) ;
916924 f. ty . size ( )
917925 }
0 commit comments