fix runtime error reported by Robin Dunn, which also fix PyICU, and add debug mechanism for the Runtime System
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8492 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
d5feb12e59
commit
24542ed0cd
1 changed files with 44 additions and 5 deletions
|
|
@ -41,12 +41,17 @@
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
#if 0
|
||||||
|
} /* c-mode */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
#define SWIGRUNTIME_DEBUG
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SWIGRUNTIME void
|
SWIGRUNTIME void
|
||||||
SWIG_InitializeModule(void *clientdata) {
|
SWIG_InitializeModule(void *clientdata) {
|
||||||
swig_type_info *type, *ret;
|
|
||||||
swig_cast_info *cast;
|
|
||||||
size_t i;
|
size_t i;
|
||||||
swig_module_info *module_head;
|
swig_module_info *module_head;
|
||||||
static int init_run = 0;
|
static int init_run = 0;
|
||||||
|
|
@ -72,8 +77,17 @@ SWIG_InitializeModule(void *clientdata) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now work on filling in swig_module.types */
|
/* Now work on filling in swig_module.types */
|
||||||
|
#ifdef SWIGRUNTIME_DEBUG
|
||||||
|
printf("SWIG_InitializeModule: size %d\n", swig_module.size);
|
||||||
|
#endif
|
||||||
for (i = 0; i < swig_module.size; ++i) {
|
for (i = 0; i < swig_module.size; ++i) {
|
||||||
type = 0;
|
swig_type_info *type = 0;
|
||||||
|
swig_type_info *ret;
|
||||||
|
swig_cast_info *cast;
|
||||||
|
|
||||||
|
#ifdef SWIGRUNTIME_DEBUG
|
||||||
|
printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* if there is another module already loaded */
|
/* if there is another module already loaded */
|
||||||
if (swig_module.next != &swig_module) {
|
if (swig_module.next != &swig_module) {
|
||||||
|
|
@ -81,7 +95,15 @@ SWIG_InitializeModule(void *clientdata) {
|
||||||
}
|
}
|
||||||
if (type) {
|
if (type) {
|
||||||
/* Overwrite clientdata field */
|
/* Overwrite clientdata field */
|
||||||
if (swig_module.type_initial[i]->clientdata) type->clientdata = swig_module.type_initial[i]->clientdata;
|
#ifdef SWIGRUNTIME_DEBUG
|
||||||
|
printf("SWIG_InitializeModule: found type %s\n", type->name);
|
||||||
|
#endif
|
||||||
|
if (swig_module.type_initial[i]->clientdata) {
|
||||||
|
type->clientdata = swig_module.type_initial[i]->clientdata;
|
||||||
|
#ifdef SWIGRUNTIME_DEBUG
|
||||||
|
printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
type = swig_module.type_initial[i];
|
type = swig_module.type_initial[i];
|
||||||
}
|
}
|
||||||
|
|
@ -92,22 +114,36 @@ SWIG_InitializeModule(void *clientdata) {
|
||||||
|
|
||||||
/* Don't need to add information already in the list */
|
/* Don't need to add information already in the list */
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
#ifdef SWIGRUNTIME_DEBUG
|
||||||
|
printf("SWIG_InitializeModule: look cast %s\n", cast->type->name);
|
||||||
|
#endif
|
||||||
if (swig_module.next != &swig_module) {
|
if (swig_module.next != &swig_module) {
|
||||||
ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
|
ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
|
||||||
|
#ifdef SWIGRUNTIME_DEBUG
|
||||||
|
if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (ret && type == swig_module.type_initial[i]) {
|
if (ret && type == swig_module.type_initial[i]) {
|
||||||
|
#ifdef SWIGRUNTIME_DEBUG
|
||||||
|
if (ret) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name);
|
||||||
|
#endif
|
||||||
cast->type = ret;
|
cast->type = ret;
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
} else {
|
||||||
|
/* Fix PyICU and many others */
|
||||||
|
ret = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
|
#ifdef SWIGRUNTIME_DEBUG
|
||||||
|
printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name);
|
||||||
|
#endif
|
||||||
if (type->cast) {
|
if (type->cast) {
|
||||||
type->cast->prev = cast;
|
type->cast->prev = cast;
|
||||||
cast->next = type->cast;
|
cast->next = type->cast;
|
||||||
}
|
}
|
||||||
type->cast = cast;
|
type->cast = cast;
|
||||||
}
|
}
|
||||||
|
|
||||||
cast++;
|
cast++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -146,5 +182,8 @@ SWIG_PropagateClientData(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
#if 0
|
||||||
|
{ /* c-mode */
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue