summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <ecoal95@gmail.com>2016-03-24 05:04:52 +0100
committerEmilio Cobos Álvarez <ecoal95@gmail.com>2016-03-24 05:04:52 +0100
commit3bb3fe6d57ac55582ca2482ac865bff5193dbccf (patch)
tree2824791de92989e9e116452e9197422b89abc5a1
parentf49ae05677ef711ebd1269145538039d7eb0ce0a (diff)
Disable optimized field generation
Since it generated invalid output indeed, like in `test/headers/nested.hpp`.
-rw-r--r--src/gen.rs9
-rw-r--r--src/parser.rs30
-rw-r--r--tests/headers/nested.hpp15
3 files changed, 31 insertions, 23 deletions
diff --git a/src/gen.rs b/src/gen.rs
index c17694d6..53a9d97c 100644
--- a/src/gen.rs
+++ b/src/gen.rs
@@ -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;
+ };
+};