summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Jezabek <jezabek@poczta.onet.pl>2008-08-06 22:28:36 +0000
committerJan Jezabek <jezabek@poczta.onet.pl>2008-08-06 22:28:36 +0000
commitdd7d090049206224032f2b8c48c6cffbac316a34 (patch)
tree800f595614e15ca0ec16afa92dfec3daf6635b89
parent2275531543ebdc3b3616f64814fb3a8de3e094e5 (diff)
downloadswig-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.cxx30
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";