diff --git a/Examples/test-suite/java/nested_extend_c_runme.java b/Examples/test-suite/java/nested_extend_c_runme.java index 9da093a09..5d9d861da 100644 --- a/Examples/test-suite/java/nested_extend_c_runme.java +++ b/Examples/test-suite/java/nested_extend_c_runme.java @@ -34,5 +34,12 @@ public class nested_extend_c_runme { if (low.low_extend() != 99) throw new RuntimeException("test failed"); } + { + FOO_bar foobar = new FOO_bar(); + foobar.setD(1234); + if (foobar.getD() != 1234) + throw new RuntimeException("test failed"); + foobar.bar_extend(); + } } } diff --git a/Examples/test-suite/nested_extend_c.i b/Examples/test-suite/nested_extend_c.i index 0e1495f86..64727b9ea 100644 --- a/Examples/test-suite/nested_extend_c.i +++ b/Examples/test-suite/nested_extend_c.i @@ -10,6 +10,7 @@ char hi_extend() { return $self->c; } + static const long swig_size = sizeof(union hiA); } %extend lowA { lowA() { @@ -21,6 +22,7 @@ int low_extend() { return $self->num; } + static const long swig_size = sizeof(struct lowA); } %extend hiB { @@ -32,6 +34,7 @@ char hi_extend() { return $self->c; } + static const long swig_size = sizeof(union hiB); } %extend lowB { lowB() { @@ -43,6 +46,7 @@ int low_extend() { return $self->num; } + static const long swig_size = sizeof(struct lowB); } %extend FOO_bar { @@ -50,6 +54,9 @@ $self->d = 1; } }; +%extend NestedA { + static const long swig_size = sizeof(struct NestedA); +} #endif diff --git a/Source/Modules/nested.cxx b/Source/Modules/nested.cxx index 9ec52ead1..c4ab6a8ea 100644 --- a/Source/Modules/nested.cxx +++ b/Source/Modules/nested.cxx @@ -362,7 +362,15 @@ void Swig_nested_name_unnamed_c_structs(Node *n) { Delete(bases); } Setattr(classhash, name, c); + + // Merge the extension into the symbol table + if (Node *am = Getattr(Swig_extend_hash(), name)) { + Swig_extend_merge(c, am); + Swig_extend_append_previous(c, am); + Delattr(Swig_extend_hash(), name); + } Swig_symbol_popscope(); + // process declarations following this type (assign correct new type) SwigType *ty = Copy(name); Node *decl = nextSibling(c); @@ -376,12 +384,6 @@ void Swig_nested_name_unnamed_c_structs(Node *n) { decl = nextSibling(decl); } Delete(ty); - if (Node *am = Getattr(Swig_extend_hash(), name)) { - // Merge the extension into the symbol table - Swig_extend_merge(c, am); - Swig_extend_append_previous(c, am); - Delattr(Swig_extend_hash(), name); - } Swig_symbol_setscope(Swig_symbol_global_scope()); add_symbols_c(c);