%extend symbols for nested structs get into a wrong C symbol table

This commit is contained in:
Vladimir Kalinin 2014-05-28 22:15:50 +04:00
commit 665c4f581b
2 changed files with 15 additions and 6 deletions

View file

@ -10,6 +10,7 @@
char hi_extend() { char hi_extend() {
return $self->c; return $self->c;
} }
static const long swig_size = sizeof(hiA);
} }
%extend lowA { %extend lowA {
lowA() { lowA() {
@ -21,6 +22,7 @@
int low_extend() { int low_extend() {
return $self->num; return $self->num;
} }
static const long swig_size = sizeof(lowA);
} }
%extend hiB { %extend hiB {
@ -32,6 +34,7 @@
char hi_extend() { char hi_extend() {
return $self->c; return $self->c;
} }
static const long swig_size = sizeof(hiB);
} }
%extend lowB { %extend lowB {
lowB() { lowB() {
@ -43,6 +46,7 @@
int low_extend() { int low_extend() {
return $self->num; return $self->num;
} }
static const long swig_size = sizeof(lowB);
} }
%extend FOO_bar { %extend FOO_bar {
@ -50,6 +54,9 @@
$self->d = 1; $self->d = 1;
} }
}; };
%extend NestedA {
static const long swig_size = sizeof(NestedA);
}
#endif #endif

View file

@ -362,7 +362,15 @@ void Swig_nested_name_unnamed_c_structs(Node *n) {
Delete(bases); Delete(bases);
} }
Setattr(classhash, name, c); 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(); Swig_symbol_popscope();
// process declarations following this type (assign correct new type) // process declarations following this type (assign correct new type)
SwigType *ty = Copy(name); SwigType *ty = Copy(name);
Node *decl = nextSibling(c); Node *decl = nextSibling(c);
@ -376,12 +384,6 @@ void Swig_nested_name_unnamed_c_structs(Node *n) {
decl = nextSibling(decl); decl = nextSibling(decl);
} }
Delete(ty); 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()); Swig_symbol_setscope(Swig_symbol_global_scope());
add_symbols_c(c); add_symbols_c(c);