@@ -188,6 +188,7 @@ pub fn gen_mod(
188
188
defs. extend ( ctypedef_to_rs (
189
189
& mut ctx,
190
190
options. rust_enums ,
191
+ options. derive_debug ,
191
192
t. name . clone ( ) , & t. ty ) )
192
193
} ,
193
194
GCompDecl ( ci) => {
@@ -205,6 +206,7 @@ pub fn gen_mod(
205
206
}
206
207
let c = ci. borrow ( ) . clone ( ) ;
207
208
defs. extend ( comp_to_rs ( & mut ctx, c. kind , comp_name ( c. kind , & c. name ) ,
209
+ options. derive_debug ,
208
210
c. layout , c. members ) . into_iter ( ) )
209
211
} ,
210
212
GEnumDecl ( ei) => {
@@ -452,6 +454,7 @@ fn tag_dup_decl(gs: Vec<Global>) -> Vec<Global> {
452
454
fn ctypedef_to_rs (
453
455
ctx : & mut GenCtx ,
454
456
rust_enums : bool ,
457
+ derive_debug : bool ,
455
458
name : String ,
456
459
ty : & Type )
457
460
-> Vec < P < ast:: Item > > {
@@ -483,7 +486,7 @@ fn ctypedef_to_rs(
483
486
if is_empty {
484
487
ci. borrow_mut ( ) . name = name. clone ( ) ;
485
488
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 )
487
490
} else {
488
491
vec ! ( mk_item( ctx, name, ty) )
489
492
}
@@ -503,14 +506,16 @@ fn ctypedef_to_rs(
503
506
}
504
507
505
508
fn comp_to_rs ( ctx : & mut GenCtx , kind : CompKind , name : String ,
509
+ derive_debug : bool ,
506
510
layout : Layout , members : Vec < CompMember > ) -> Vec < P < ast:: Item > > {
507
511
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) ,
510
514
}
511
515
}
512
516
513
517
fn cstruct_to_rs ( ctx : & mut GenCtx , name : String ,
518
+ derive_debug : bool ,
514
519
layout : Layout , members : Vec < CompMember > ) -> Vec < P < ast:: Item > > {
515
520
let mut fields = vec ! ( ) ;
516
521
let mut methods = vec ! ( ) ;
@@ -522,7 +527,7 @@ fn cstruct_to_rs(ctx: &mut GenCtx, name: String,
522
527
let mut bitfields: u32 = 0 ;
523
528
524
529
// Debug is only defined on little arrays
525
- let mut can_derive_debug = true ;
530
+ let mut can_derive_debug = derive_debug ;
526
531
527
532
for m in & members {
528
533
let ( opt_rc_c, opt_f) = match * m {
@@ -563,9 +568,10 @@ fn cstruct_to_rs(ctx: &mut GenCtx, name: String,
563
568
unnamed += 1 ;
564
569
let field_name = format ! ( "_bindgen_data_{}_" , unnamed) ;
565
570
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 ( ) ) ;
567
572
} else {
568
573
extra. extend ( comp_to_rs ( ctx, c. kind , comp_name ( c. kind , & c. name ) ,
574
+ derive_debug,
569
575
c. layout , c. members . clone ( ) ) . into_iter ( ) ) ;
570
576
}
571
577
}
@@ -634,7 +640,7 @@ fn opaque_to_rs(ctx: &mut GenCtx, name: String) -> P<ast::Item> {
634
640
} )
635
641
}
636
642
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 > > {
638
644
fn mk_item ( ctx : & mut GenCtx , name : String , item : ast:: ItemKind , vis :
639
645
ast:: Visibility , attrs : Vec < ast:: Attribute > ) -> P < ast:: Item > {
640
646
P ( ast:: Item {
@@ -674,7 +680,7 @@ fn cunion_to_rs(ctx: &mut GenCtx, name: String, layout: Layout, members: Vec<Com
674
680
empty_generics ( ) ,
675
681
None ,
676
682
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 ) ,
678
684
) ;
679
685
680
686
let mut items = vec ! (
@@ -859,7 +865,8 @@ fn cenum_to_rs(
859
865
/// These are emitted into `extra`.
860
866
fn gen_comp_methods ( ctx : & mut GenCtx , data_field : & str , data_offset : usize ,
861
867
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 > {
863
870
864
871
let mk_field_method = |ctx : & mut GenCtx , f : & FieldInfo , offset : usize | {
865
872
// TODO: Implement bitfield accessors
@@ -904,14 +911,15 @@ fn gen_comp_methods(ctx: &mut GenCtx, data_field: &str, data_offset: usize,
904
911
CompMember :: Comp ( ref rc_c) => {
905
912
let c = & rc_c. borrow ( ) ;
906
913
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 ( ) ) ;
908
915
c. layout . size
909
916
}
910
917
CompMember :: CompField ( ref rc_c, ref f) => {
911
918
methods. extend ( mk_field_method ( ctx, f, offset) . into_iter ( ) ) ;
912
919
913
920
let c = rc_c. borrow ( ) ;
914
921
extra. extend ( comp_to_rs ( ctx, c. kind , comp_name ( c. kind , & c. name ) ,
922
+ derive_debug,
915
923
c. layout , c. members . clone ( ) ) . into_iter ( ) ) ;
916
924
f. ty . size ( )
917
925
}
0 commit comments