summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamakaky <yamakaky@yamaworld.fr>2016-03-11 15:27:01 +0100
committerYamakaky <yamakaky@yamaworld.fr>2016-03-11 15:27:01 +0100
commitd0a9bde4d713c3c2335083369d30fdad88f49f04 (patch)
treeda3f7196ee5b4968108e37f4900b9194f19e78db
parentaf4ab06657ae224bd2e7bec8efdbef3aa924f34c (diff)
derive(Debug) on cenums.
Related #282
-rw-r--r--src/gen.rs14
-rw-r--r--tests/test_enum.rs13
2 files changed, 25 insertions, 2 deletions
diff --git a/src/gen.rs b/src/gen.rs
index 3e9934f9..08f58313 100644
--- a/src/gen.rs
+++ b/src/gen.rs
@@ -226,6 +226,7 @@ pub fn gen_mod(
defs.extend(cenum_to_rs(
&mut ctx,
options.rust_enums,
+ options.derive_debug,
enum_name(&e.name), e.kind, e.layout, &e.items));
},
GVar(vi) => {
@@ -496,7 +497,7 @@ fn ctypedef_to_rs(
if is_empty {
ei.borrow_mut().name = name.clone();
let e = ei.borrow();
- cenum_to_rs(ctx, rust_enums, name, e.kind, e.layout, &e.items)
+ cenum_to_rs(ctx, rust_enums, derive_debug, name, e.kind, e.layout, &e.items)
} else {
vec!(mk_item(ctx, name, ty))
}
@@ -788,6 +789,7 @@ fn cenum_value_to_int_lit(
fn cenum_to_rs(
ctx: &mut GenCtx,
rust_enums: bool,
+ derive_debug: bool,
name: String,
kind: IKind,
layout: Layout,
@@ -862,9 +864,17 @@ fn cenum_to_rs(
is_sugared_doc: false,
});
+ let attrs = {
+ let mut v = vec![mk_deriving_copy_attr(ctx, true), repr_attr];
+ if derive_debug {
+ v.push(mk_deriving_debug_attr(ctx));
+ }
+ v
+ };
+
items.push(P(ast::Item {
ident: enum_name,
- attrs: vec![mk_deriving_copy_attr(ctx, true), repr_attr],
+ attrs: attrs,
id: ast::DUMMY_NODE_ID,
node: ast::ItemKind::Enum(ast::EnumDef { variants: variants }, empty_generics()),
vis: ast::Visibility::Public,
diff --git a/tests/test_enum.rs b/tests/test_enum.rs
index bde750a6..e8c56c14 100644
--- a/tests/test_enum.rs
+++ b/tests/test_enum.rs
@@ -10,9 +10,11 @@ fn with_simple_enum() {
assert_bind_eq(Default::default(), "headers/enum.h", "
#[derive(Clone, Copy)]
#[repr(u32)]
+ #[derive(Debug)]
pub enum Enum_Foo { Bar = 0, Qux = 1, }
#[derive(Clone, Copy)]
#[repr(i32)]
+ #[derive(Debug)]
pub enum Enum_Neg { MinusOne = -1, One = 1, }
");
assert_bind_eq(default_without_rust_enums(), "headers/enum.h", "
@@ -30,12 +32,15 @@ fn with_packed_enums() {
assert_bind_eq(Default::default(), "headers/enum_packed.h", "
#[derive(Clone, Copy)]
#[repr(u8)]
+ #[derive(Debug)]
pub enum Enum_Foo { Bar = 0, Qux = 1, }
#[derive(Clone, Copy)]
#[repr(i8)]
+ #[derive(Debug)]
pub enum Enum_Neg { MinusOne = -1, One = 1, }
#[derive(Clone, Copy)]
#[repr(u16)]
+ #[derive(Debug)]
pub enum Enum_Bigger { Much = 255, Larger = 256, }
");
assert_bind_eq(default_without_rust_enums(), "headers/enum_packed.h", "
@@ -57,6 +62,7 @@ fn with_duplicate_enum_value() {
pub const Dupe: Enum_Foo = Enum_Foo::Bar;
#[derive(Clone, Copy)]
#[repr(u32)]
+ #[derive(Debug)]
pub enum Enum_Foo { Bar = 1, }
");
assert_bind_eq(default_without_rust_enums(), "headers/enum_dupe.h", "
@@ -71,18 +77,23 @@ fn with_explicitly_typed_cxx_enum() {
assert_bind_eq(Default::default(), "headers/enum_explicit_type.hpp", "
#[derive(Clone, Copy)]
#[repr(u8)]
+ #[derive(Debug)]
pub enum Enum_Foo { Bar = 0, Qux = 1, }
#[derive(Clone, Copy)]
#[repr(i8)]
+ #[derive(Debug)]
pub enum Enum_Neg { MinusOne = -1, One = 1, }
#[derive(Clone, Copy)]
#[repr(u16)]
+ #[derive(Debug)]
pub enum Enum_Bigger { Much = 255, Larger = 256, }
#[derive(Clone, Copy)]
#[repr(i64)]
+ #[derive(Debug)]
pub enum Enum_MuchLong { MuchLow = -4294967296, }
#[derive(Clone, Copy)]
#[repr(u64)]
+ #[derive(Debug)]
pub enum Enum_MuchLongLong { MuchHigh = 4294967296, }
");
assert_bind_eq(default_without_rust_enums(), "headers/enum_explicit_type.hpp", "
@@ -107,6 +118,7 @@ fn with_overflowed_enum_value() {
assert_bind_eq(Default::default(), "headers/overflowed_enum.hpp", "
#[derive(Clone, Copy)]
#[repr(u32)]
+ #[derive(Debug)]
pub enum Enum_Foo {
BAP_ARM = 9698489,
BAP_X86 = 11960045,
@@ -114,6 +126,7 @@ fn with_overflowed_enum_value() {
}
#[derive(Clone, Copy)]
#[repr(u16)]
+ #[derive(Debug)]
pub enum Enum_Bar { One = 1, Big = 2, }
");
assert_bind_eq(default_without_rust_enums(), "headers/overflowed_enum.hpp", "