diff options
author | Yamakaky <yamakaky@yamaworld.fr> | 2016-03-11 15:27:01 +0100 |
---|---|---|
committer | Yamakaky <yamakaky@yamaworld.fr> | 2016-03-11 15:27:01 +0100 |
commit | d0a9bde4d713c3c2335083369d30fdad88f49f04 (patch) | |
tree | da3f7196ee5b4968108e37f4900b9194f19e78db | |
parent | af4ab06657ae224bd2e7bec8efdbef3aa924f34c (diff) |
derive(Debug) on cenums.
Related #282
-rw-r--r-- | src/gen.rs | 14 | ||||
-rw-r--r-- | tests/test_enum.rs | 13 |
2 files changed, 25 insertions, 2 deletions
@@ -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", " |