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:
Dave Beazley 2003-11-25 03:51:35 +00:00
commit 00be2c2492

View file

@ -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);
} }