Merge branch 'wkalinin-csymbols-1'

* wkalinin-csymbols-1:
  obscure case workaround in std::set wrapper, where ignored type still need to be processed
  global unnamed structures ignored
  test added for nested unnamed C struct %extend
  %extend for nested unnamed C structs
This commit is contained in:
William S Fulton 2014-05-20 18:10:41 +01:00
commit 9e4bce051d
5 changed files with 39 additions and 11 deletions

View file

@ -198,6 +198,7 @@ static String *external_runtime_name = 0;
enum { STAGE1=1, STAGE2=2, STAGE3=4, STAGE4=8, STAGEOVERFLOW=16 };
static List *libfiles = 0;
static List *all_output_files = 0;
extern "C" void check_extensions();
/* -----------------------------------------------------------------------------
* check_extension()
@ -1172,6 +1173,7 @@ int SWIG_main(int argc, char *argv[], Language *l) {
Printf(stdout, "Processing unnamed structs...\n");
Swig_nested_name_unnamed_c_structs(top);
}
check_extensions();
if (Verbose) {
Printf(stdout, "Processing types...\n");

View file

@ -338,7 +338,9 @@ static void insertNodeAfter(Node *n, Node *c) {
set_nextSibling(n, c);
set_previousSibling(c, n);
}
extern "C" Hash *extendhash;
extern "C" void merge_extensions(Node *cls, Node *am);
extern "C" void append_previous_extension(Node *cls, Node *am);
void Swig_nested_name_unnamed_c_structs(Node *n) {
if (!classhash)
classhash = Getattr(n, "classes");
@ -376,16 +378,14 @@ void Swig_nested_name_unnamed_c_structs(Node *n) {
decl = nextSibling(decl);
}
Delete(ty);
// Check for extensions
/* // TODO: we can save extensions hash like class hash and move check_extensions() after nesting processing
if (extendhash) {
if (Node *am = Getattr(extendhash, name)) {
// Merge the extension into the symbol table
merge_extensions(c, am);
append_previous_extension(c, am);
Delattr(extendhash, clsname);
Delattr(extendhash, name);
}
}*/
}
Swig_symbol_setscope(Swig_symbol_global_scope());
add_symbols_c(c);
@ -396,7 +396,12 @@ void Swig_nested_name_unnamed_c_structs(Node *n) {
Delete(ins);
Delattr(c, "nested:outer");
} else {
// global unnamed struct - ignore it
// global unnamed struct - ignore it and it's instances
SetFlag(c, "feature:ignore");
while (next && Getattr(next, "nested:unnamedtype") == c) {
SetFlag(next, "feature:ignore");
next = nextSibling(next);
}
c = next;
continue;
}

View file

@ -667,6 +667,9 @@ class TypePass:private Dispatcher {
/* Normalize types. */
SwigType *ty = Getattr(n, "type");
if (!ty) {
return SWIG_OK;
}
normalize_type(ty);
SwigType *decl = Getattr(n, "decl");
if (decl) {