fix for #1247477, sorting tables properly
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@7403 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
d18e6de5e5
commit
a8054943ef
1 changed files with 14 additions and 5 deletions
|
|
@ -1773,7 +1773,7 @@ void SwigType_inherit_equiv(File *out) {
|
||||||
|
|
||||||
/* Helper function to sort the mangled list */
|
/* Helper function to sort the mangled list */
|
||||||
static int SwigType_compare_mangled(const DOH *a, const DOH *b) {
|
static int SwigType_compare_mangled(const DOH *a, const DOH *b) {
|
||||||
return Cmp(a, b);
|
return strcmp(Data(a), Data(b));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
|
|
@ -1801,6 +1801,7 @@ SwigType_emit_type_table(File *f_forward, File *f_table) {
|
||||||
String *types, *table, *cast, *cast_init, *cast_temp;
|
String *types, *table, *cast, *cast_init, *cast_temp;
|
||||||
Hash *imported_types;
|
Hash *imported_types;
|
||||||
List *mangled_list;
|
List *mangled_list;
|
||||||
|
List *table_list = NewList();
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
if (!r_mangled) {
|
if (!r_mangled) {
|
||||||
|
|
@ -1859,9 +1860,8 @@ SwigType_emit_type_table(File *f_forward, File *f_table) {
|
||||||
|
|
||||||
Printf(f_forward,"#define SWIGTYPE%s swig_types[%d]\n", ki.item, i);
|
Printf(f_forward,"#define SWIGTYPE%s swig_types[%d]\n", ki.item, i);
|
||||||
Printv(types,"static swig_type_info _swigt_", ki.item, " = {", NIL);
|
Printv(types,"static swig_type_info _swigt_", ki.item, " = {", NIL);
|
||||||
Printf(table, " &_swigt_%s,\n", ki.item);
|
Append(table_list, ki.item);
|
||||||
Printf(cast_temp, "static swig_cast_info _swigc_%s[] = {", ki.item);
|
Printf(cast_temp, "static swig_cast_info _swigc_%s[] = {", ki.item);
|
||||||
Printf(cast_init, " _swigc_%s,\n", ki.item);
|
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
cd = SwigType_clientdata_collect(ki.item);
|
cd = SwigType_clientdata_collect(ki.item);
|
||||||
|
|
@ -1895,10 +1895,10 @@ SwigType_emit_type_table(File *f_forward, File *f_table) {
|
||||||
if (!Getattr(r_mangled, ei.item) && !Getattr(imported_types, ei.item)) {
|
if (!Getattr(r_mangled, ei.item) && !Getattr(imported_types, ei.item)) {
|
||||||
Printf(f_forward, "#define SWIGTYPE%s swig_types[%i]\n", ei.item, i);
|
Printf(f_forward, "#define SWIGTYPE%s swig_types[%i]\n", ei.item, i);
|
||||||
Printf(types, "static swig_type_info _swigt_%s = {\"%s\", 0, 0, 0, 0};\n", ei.item, ei.item);
|
Printf(types, "static swig_type_info _swigt_%s = {\"%s\", 0, 0, 0, 0};\n", ei.item, ei.item);
|
||||||
Printf(table, " &_swigt_%s,\n", ei.item);
|
Append(table_list, ei.item);
|
||||||
|
|
||||||
Printf(cast, "static swig_cast_info _swigc_%s[] = {{&_swigt_%s, 0, 0, 0},{0, 0, 0, 0}};\n",
|
Printf(cast, "static swig_cast_info _swigc_%s[] = {{&_swigt_%s, 0, 0, 0},{0, 0, 0, 0}};\n",
|
||||||
ei.item, ei.item);
|
ei.item, ei.item);
|
||||||
Printf(cast_init, " _swigc_%s,\n", ei.item);
|
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
Setattr(imported_types, ei.item, "1");
|
Setattr(imported_types, ei.item, "1");
|
||||||
|
|
@ -1910,6 +1910,15 @@ SwigType_emit_type_table(File *f_forward, File *f_table) {
|
||||||
Delete(nt);
|
Delete(nt);
|
||||||
Delete(rt);
|
Delete(rt);
|
||||||
}
|
}
|
||||||
|
/* print the tables in the proper order */
|
||||||
|
SortList(table_list, SwigType_compare_mangled);
|
||||||
|
for (ki = First(table_list); ki.item; ki = Next(ki)) {
|
||||||
|
Printf(table, " &_swigt_%s,\n", ki.item);
|
||||||
|
Printf(cast_init, " _swigc_%s,\n", ki.item);
|
||||||
|
}
|
||||||
|
|
||||||
|
Delete(table_list);
|
||||||
|
|
||||||
Delete(mangled_list);
|
Delete(mangled_list);
|
||||||
|
|
||||||
Printf(table, "};\n");
|
Printf(table, "};\n");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue