diff options
author | Jan Jezabek <jezabek@poczta.onet.pl> | 2008-08-06 22:28:36 +0000 |
---|---|---|
committer | Jan Jezabek <jezabek@poczta.onet.pl> | 2008-08-06 22:28:36 +0000 |
commit | dd7d090049206224032f2b8c48c6cffbac316a34 (patch) | |
tree | 800f595614e15ca0ec16afa92dfec3daf6635b89 | |
parent | 2275531543ebdc3b3616f64814fb3a8de3e094e5 (diff) | |
download | swig-dd7d090049206224032f2b8c48c6cffbac316a34.tar.gz |
Fixed bug when a base class was ignored; the code generating the proxy's QueryInterface just moved to the ignored classes parent instead of its first non-ignored sibling.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-jezabek@10737 626c5289-ae23-0410-ae9c-e8d60b6d4f22
-rw-r--r-- | Source/Modules/com.cxx | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/Source/Modules/com.cxx b/Source/Modules/com.cxx index 52418ad90..bfa380620 100644 --- a/Source/Modules/com.cxx +++ b/Source/Modules/com.cxx @@ -1455,11 +1455,16 @@ public: while (bases) { Iterator base = First(bases); - if (!Getattr(base.item, "feature:ignore")) - Printf(proxy_class_vtable_code, " ||\n SWIGIsEqual(iid, &IID_%s)", Getattr(base.item, "sym:name")); + while (base.item && Getattr(base.item, "feature:ignore")) + base = Next(base); - /* Get next base */ - bases = Getattr(base.item, "bases"); + if (base.item) { + Printf(proxy_class_vtable_code, " ||\n SWIGIsEqual(iid, &IID_%s)", Getattr(base.item, "sym:name")); + /* Get next base */ + bases = Getattr(base.item, "bases"); + } else { + bases = NULL; + } } Printf(proxy_class_vtable_code, ") {\n" @@ -1520,11 +1525,16 @@ public: while (bases) { Iterator base = First(bases); - if (!Getattr(base.item, "feature:ignore")) - Printf(proxy_class_vtable_code, " ||\n SWIGIsEqual(iid, &IID_%s)", Getattr(base.item, "sym:name")); + while (base.item && Getattr(base.item, "feature:ignore")) + base = Next(base); - /* Get next base */ - bases = Getattr(base.item, "bases"); + if (base.item) { + Printf(proxy_class_vtable_code, " ||\n SWIGIsEqual(iid, &IID_%s)", Getattr(base.item, "sym:name")); + /* Get next base */ + bases = Getattr(base.item, "bases"); + } else { + bases = NULL; + } } Printf(proxy_class_vtable_code, ") {\n" @@ -1820,7 +1830,6 @@ public: emit_mark_varargs(l); - // FIXME: int gencomma = !static_flag; int gencomma = 1; /* Output each parameter */ @@ -1879,7 +1888,6 @@ public: Printf(function_code, ")"); - // FIXME: generateThrowsClause(n, function_code); Printv(function_code, ";\n", NIL); if (!Getattr(n, "override")) { @@ -2390,5 +2398,5 @@ COM Options (available with -com)\n\ -norcfile - Do not generate RC (resource definition) file\n\ -nodeffile - Do not generate DEF file\n\ -nodllexports - Do not generate DllGetClassObject and DllCanUnloadNow\n\ - (implicates -nodeffile)\n\ + (implies -nodeffile)\n\ \n"; |