diff options
author | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2016-03-24 05:04:52 +0100 |
---|---|---|
committer | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2016-03-24 05:04:52 +0100 |
commit | 3bb3fe6d57ac55582ca2482ac865bff5193dbccf (patch) | |
tree | 2824791de92989e9e116452e9197422b89abc5a1 | |
parent | f49ae05677ef711ebd1269145538039d7eb0ce0a (diff) |
Disable optimized field generation
Since it generated invalid output indeed, like in
`test/headers/nested.hpp`.
-rw-r--r-- | src/gen.rs | 9 | ||||
-rw-r--r-- | src/parser.rs | 30 | ||||
-rw-r--r-- | tests/headers/nested.hpp | 15 |
3 files changed, 31 insertions, 23 deletions
@@ -986,14 +986,7 @@ fn cstruct_to_rs(ctx: &mut GenCtx, name: &str, ci: CompInfo) -> Vec<P<ast::Item> -> (Option<Rc<RefCell<CompInfo>>>, Option<FieldInfo>) { match *m { CompMember::Field(ref f) => { (None, Some(f.clone())) } - CompMember::Comp(ref rc_c) => { - let c = rc_c.borrow(); - if c.members.len() == 1 { - comp_fields(&c.members[0]) - } else { - (Some(rc_c.clone()), None) - } - } + CompMember::Comp(ref rc_c) => { (Some(rc_c.clone()), None) } CompMember::CompField(ref rc_c, ref f) => { (Some(rc_c.clone()), Some(f.clone())) } _ => unreachable!() } diff --git a/src/parser.rs b/src/parser.rs index 8347fe5a..9f100181 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -611,23 +611,23 @@ fn visit_composite(cursor: &Cursor, parent: &Cursor, // }; // - let is_composite = match (inner_composite(&ty), ci.members.last()) { - (Some(ty_compinfo), Some(&CompMember::Comp(ref c))) => { - c.borrow().deref() as *const _ == ty_compinfo.borrow().deref() as *const _ - }, - _ => false - }; + //let is_composite = match (inner_composite(&ty), ci.members.last()) { + // (Some(ty_compinfo), Some(&CompMember::Comp(ref c))) => { + // c.borrow().deref() as *const _ == ty_compinfo.borrow().deref() as *const _ + // }, + // _ => false + //}; let field = FieldInfo::new(name, ty.clone(), comment, bitfields); - if is_composite { - if let Some(CompMember::Comp(c)) = ci.members.pop() { - ci.members.push(CompMember::CompField(c, field)); - } else { - unreachable!(); // Checks in is_composite make this unreachable. - } - } else { - ci.members.push(CompMember::Field(field)); - } + //if is_composite { + // if let Some(CompMember::Comp(c)) = ci.members.pop() { + // ci.members.push(CompMember::CompField(c, field)); + // } else { + // unreachable!(); // Checks in is_composite make this unreachable. + // } + //} else { + ci.members.push(CompMember::Field(field)); + //} } CXCursor_StructDecl | CXCursor_UnionDecl => { fwd_decl(ctx, cursor, |ctx_| { diff --git a/tests/headers/nested.hpp b/tests/headers/nested.hpp new file mode 100644 index 00000000..299e1768 --- /dev/null +++ b/tests/headers/nested.hpp @@ -0,0 +1,15 @@ + +class Calc { + int w; +}; + +class Test { +public: + struct Size; + friend struct Size; + struct Size { + struct Dimension : public Calc { + }; + Dimension mWidth, mHeight; + }; +}; |