Skip to content

Commit d0a9bde

Browse files
committed
derive(Debug) on cenums.
Related rust-lang#282
1 parent af4ab06 commit d0a9bde

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/gen.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ pub fn gen_mod(
226226
defs.extend(cenum_to_rs(
227227
&mut ctx,
228228
options.rust_enums,
229+
options.derive_debug,
229230
enum_name(&e.name), e.kind, e.layout, &e.items));
230231
},
231232
GVar(vi) => {
@@ -496,7 +497,7 @@ fn ctypedef_to_rs(
496497
if is_empty {
497498
ei.borrow_mut().name = name.clone();
498499
let e = ei.borrow();
499-
cenum_to_rs(ctx, rust_enums, name, e.kind, e.layout, &e.items)
500+
cenum_to_rs(ctx, rust_enums, derive_debug, name, e.kind, e.layout, &e.items)
500501
} else {
501502
vec!(mk_item(ctx, name, ty))
502503
}
@@ -788,6 +789,7 @@ fn cenum_value_to_int_lit(
788789
fn cenum_to_rs(
789790
ctx: &mut GenCtx,
790791
rust_enums: bool,
792+
derive_debug: bool,
791793
name: String,
792794
kind: IKind,
793795
layout: Layout,
@@ -862,9 +864,17 @@ fn cenum_to_rs(
862864
is_sugared_doc: false,
863865
});
864866

867+
let attrs = {
868+
let mut v = vec![mk_deriving_copy_attr(ctx, true), repr_attr];
869+
if derive_debug {
870+
v.push(mk_deriving_debug_attr(ctx));
871+
}
872+
v
873+
};
874+
865875
items.push(P(ast::Item {
866876
ident: enum_name,
867-
attrs: vec![mk_deriving_copy_attr(ctx, true), repr_attr],
877+
attrs: attrs,
868878
id: ast::DUMMY_NODE_ID,
869879
node: ast::ItemKind::Enum(ast::EnumDef { variants: variants }, empty_generics()),
870880
vis: ast::Visibility::Public,

tests/test_enum.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ fn with_simple_enum() {
1010
assert_bind_eq(Default::default(), "headers/enum.h", "
1111
#[derive(Clone, Copy)]
1212
#[repr(u32)]
13+
#[derive(Debug)]
1314
pub enum Enum_Foo { Bar = 0, Qux = 1, }
1415
#[derive(Clone, Copy)]
1516
#[repr(i32)]
17+
#[derive(Debug)]
1618
pub enum Enum_Neg { MinusOne = -1, One = 1, }
1719
");
1820
assert_bind_eq(default_without_rust_enums(), "headers/enum.h", "
@@ -30,12 +32,15 @@ fn with_packed_enums() {
3032
assert_bind_eq(Default::default(), "headers/enum_packed.h", "
3133
#[derive(Clone, Copy)]
3234
#[repr(u8)]
35+
#[derive(Debug)]
3336
pub enum Enum_Foo { Bar = 0, Qux = 1, }
3437
#[derive(Clone, Copy)]
3538
#[repr(i8)]
39+
#[derive(Debug)]
3640
pub enum Enum_Neg { MinusOne = -1, One = 1, }
3741
#[derive(Clone, Copy)]
3842
#[repr(u16)]
43+
#[derive(Debug)]
3944
pub enum Enum_Bigger { Much = 255, Larger = 256, }
4045
");
4146
assert_bind_eq(default_without_rust_enums(), "headers/enum_packed.h", "
@@ -57,6 +62,7 @@ fn with_duplicate_enum_value() {
5762
pub const Dupe: Enum_Foo = Enum_Foo::Bar;
5863
#[derive(Clone, Copy)]
5964
#[repr(u32)]
65+
#[derive(Debug)]
6066
pub enum Enum_Foo { Bar = 1, }
6167
");
6268
assert_bind_eq(default_without_rust_enums(), "headers/enum_dupe.h", "
@@ -71,18 +77,23 @@ fn with_explicitly_typed_cxx_enum() {
7177
assert_bind_eq(Default::default(), "headers/enum_explicit_type.hpp", "
7278
#[derive(Clone, Copy)]
7379
#[repr(u8)]
80+
#[derive(Debug)]
7481
pub enum Enum_Foo { Bar = 0, Qux = 1, }
7582
#[derive(Clone, Copy)]
7683
#[repr(i8)]
84+
#[derive(Debug)]
7785
pub enum Enum_Neg { MinusOne = -1, One = 1, }
7886
#[derive(Clone, Copy)]
7987
#[repr(u16)]
88+
#[derive(Debug)]
8089
pub enum Enum_Bigger { Much = 255, Larger = 256, }
8190
#[derive(Clone, Copy)]
8291
#[repr(i64)]
92+
#[derive(Debug)]
8393
pub enum Enum_MuchLong { MuchLow = -4294967296, }
8494
#[derive(Clone, Copy)]
8595
#[repr(u64)]
96+
#[derive(Debug)]
8697
pub enum Enum_MuchLongLong { MuchHigh = 4294967296, }
8798
");
8899
assert_bind_eq(default_without_rust_enums(), "headers/enum_explicit_type.hpp", "
@@ -107,13 +118,15 @@ fn with_overflowed_enum_value() {
107118
assert_bind_eq(Default::default(), "headers/overflowed_enum.hpp", "
108119
#[derive(Clone, Copy)]
109120
#[repr(u32)]
121+
#[derive(Debug)]
110122
pub enum Enum_Foo {
111123
BAP_ARM = 9698489,
112124
BAP_X86 = 11960045,
113125
BAP_X86_64 = 3128633167,
114126
}
115127
#[derive(Clone, Copy)]
116128
#[repr(u16)]
129+
#[derive(Debug)]
117130
pub enum Enum_Bar { One = 1, Big = 2, }
118131
");
119132
assert_bind_eq(default_without_rust_enums(), "headers/overflowed_enum.hpp", "

0 commit comments

Comments
 (0)