Fixed cross module linking of base-classes. Base classes are now located using SWIG_TypeQuery()
during module initialization. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@5386 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
13da1e3d2b
commit
00be2c2492
1 changed files with 9 additions and 2 deletions
|
|
@ -763,6 +763,7 @@ public:
|
||||||
List *baselist = Getattr(n,"bases");
|
List *baselist = Getattr(n,"bases");
|
||||||
if (baselist && Len(baselist)) {
|
if (baselist && Len(baselist)) {
|
||||||
Iterator b;
|
Iterator b;
|
||||||
|
int index = 0;
|
||||||
b = First(baselist);
|
b = First(baselist);
|
||||||
while (b.item) {
|
while (b.item) {
|
||||||
String *bname = Getattr(b.item, "name");
|
String *bname = Getattr(b.item, "name");
|
||||||
|
|
@ -776,9 +777,15 @@ public:
|
||||||
Printv( base_class_init , " ", bname, "Ptr::constructor $ptr\n", NIL );
|
Printv( base_class_init , " ", bname, "Ptr::constructor $ptr\n", NIL );
|
||||||
}
|
}
|
||||||
String *bmangle = Swig_name_mangle(bname);
|
String *bmangle = Swig_name_mangle(bname);
|
||||||
Printv(f_wrappers,"extern swig_class _wrap_class_", bmangle, ";\n", NIL);
|
// Printv(f_wrappers,"extern swig_class _wrap_class_", bmangle, ";\n", NIL);
|
||||||
Printf(base_class,"&_wrap_class_%s",bmangle);
|
// Printf(base_class,"&_wrap_class_%s",bmangle);
|
||||||
|
Printf(base_class,"0");
|
||||||
|
/* Put code to register base classes in init function */
|
||||||
|
|
||||||
|
Printf(f_init,"/* Register base : %s */\n", bmangle);
|
||||||
|
Printf(f_init,"swig_%s_bases[%d] = (swig_class *) SWIG_TypeQuery(\"%s *\")->clientdata;\n", mangled_classname, index, SwigType_namestr(bname));
|
||||||
b = Next(b);
|
b = Next(b);
|
||||||
|
index++;
|
||||||
Putc(',',base_class);
|
Putc(',',base_class);
|
||||||
Delete(bmangle);
|
Delete(bmangle);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue