From fc4be011069f46b8b6cd8c9ceed6a072aaf8566d Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Tue, 2 Feb 2016 19:43:17 +0000 Subject: [PATCH] Refactor multiple inheritance warnings Slightly simplify choosing single base class when handling multiple inheritance and make consistent across more languages. Modula3 multiple inheritance warnings now warn for all bases --- Source/Modules/csharp.cxx | 32 +++++++++++++++----------------- Source/Modules/d.cxx | 35 +++++++++++++++-------------------- Source/Modules/java.cxx | 32 +++++++++++++++----------------- Source/Modules/modula3.cxx | 26 +++++++++++++++----------- 4 files changed, 60 insertions(+), 65 deletions(-) diff --git a/Source/Modules/csharp.cxx b/Source/Modules/csharp.cxx index fab7aa4b3..bd2ff990f 100644 --- a/Source/Modules/csharp.cxx +++ b/Source/Modules/csharp.cxx @@ -1729,26 +1729,24 @@ public: if (!purebase_replace) { List *baselist = Getattr(n, "bases"); if (baselist) { - Iterator base = First(baselist); - while (base.item && (GetFlag(base.item, "feature:ignore") || Getattr(base.item, "feature:interface"))) - base = Next(base); - if (base.item) { - c_baseclassname = Getattr(base.item, "name"); - baseclass = Copy(getProxyName(c_baseclassname)); - if (baseclass) - c_baseclass = SwigType_namestr(Getattr(base.item, "name")); - base = Next(base); - /* Warn about multiple inheritance for additional base class(es) */ - while (base.item) { - if (!GetFlag(base.item, "feature:ignore") && !Getattr(base.item, "feature:interface")) { + Iterator base = First(baselist); + while (base.item) { + if (!(GetFlag(base.item, "feature:ignore") || Getattr(base.item, "feature:interface"))) { + String *baseclassname = Getattr(base.item, "name"); + if (!c_baseclassname) { + c_baseclassname = baseclassname; + baseclass = Copy(getProxyName(baseclassname)); + if (baseclass) + c_baseclass = SwigType_namestr(baseclassname); + } else { + /* Warn about multiple inheritance for additional base class(es) */ String *proxyclassname = Getattr(n, "classtypeobj"); - String *baseclassname = Getattr(base.item, "name"); Swig_warning(WARN_CSHARP_MULTIPLE_INHERITANCE, Getfile(n), Getline(n), - "Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Java.\n", SwigType_namestr(proxyclassname), SwigType_namestr(baseclassname)); + "Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Java.\n", SwigType_namestr(proxyclassname), SwigType_namestr(baseclassname)); } - base = Next(base); - } - } + } + base = Next(base); + } } } Hash *interface_bases = Getattr(n, "interface:bases"); diff --git a/Source/Modules/d.cxx b/Source/Modules/d.cxx index 5fc21ad18..834d227e2 100644 --- a/Source/Modules/d.cxx +++ b/Source/Modules/d.cxx @@ -3123,28 +3123,23 @@ private: List *baselist = Getattr(n, "bases"); if (baselist) { Iterator base = First(baselist); - while (base.item && GetFlag(base.item, "feature:ignore")) { - base = Next(base); - } - if (base.item) { - basenode = base.item; - c_baseclassname = Getattr(base.item, "name"); - basename = createProxyName(c_baseclassname); - if (basename) - c_baseclass = SwigType_namestr(Getattr(base.item, "name")); - base = Next(base); - /* Warn about multiple inheritance for additional base class(es) */ - while (base.item) { - if (GetFlag(base.item, "feature:ignore")) { - base = Next(base); - continue; + while (base.item) { + if (!GetFlag(base.item, "feature:ignore")) { + String *baseclassname = Getattr(base.item, "name"); + if (!c_baseclassname) { + basenode = base.item; + c_baseclassname = baseclassname; + basename = createProxyName(c_baseclassname); + if (basename) + c_baseclass = SwigType_namestr(baseclassname); + } else { + /* Warn about multiple inheritance for additional base class(es) */ + String *proxyclassname = Getattr(n, "classtypeobj"); + Swig_warning(WARN_D_MULTIPLE_INHERITANCE, Getfile(n), Getline(n), + "Base %s of class %s ignored: multiple inheritance is not supported in D.\n", SwigType_namestr(baseclassname), SwigType_namestr(proxyclassname)); } - String *proxyclassname = SwigType_str(Getattr(n, "classtypeobj"), 0); - String *baseclassname = SwigType_str(Getattr(base.item, "name"), 0); - Swig_warning(WARN_D_MULTIPLE_INHERITANCE, Getfile(n), Getline(n), - "Base %s of class %s ignored: multiple inheritance is not supported in D.\n", baseclassname, proxyclassname); - base = Next(base); } + base = Next(base); } } } diff --git a/Source/Modules/java.cxx b/Source/Modules/java.cxx index 437e9437b..16cb62144 100644 --- a/Source/Modules/java.cxx +++ b/Source/Modules/java.cxx @@ -1820,26 +1820,24 @@ public: if (!purebase_replace) { List *baselist = Getattr(n, "bases"); if (baselist) { - Iterator base = First(baselist); - while (base.item && (GetFlag(base.item, "feature:ignore") || Getattr(base.item, "feature:interface"))) - base = Next(base); - if (base.item) { - c_baseclassname = Getattr(base.item, "name"); - baseclass = Copy(getProxyName(c_baseclassname)); - if (baseclass) - c_baseclass = SwigType_namestr(Getattr(base.item, "name")); - base = Next(base); - /* Warn about multiple inheritance for additional base class(es) */ - while (base.item) { - if (!GetFlag(base.item, "feature:ignore") && !Getattr(base.item, "feature:interface")) { + Iterator base = First(baselist); + while (base.item) { + if (!(GetFlag(base.item, "feature:ignore") || Getattr(base.item, "feature:interface"))) { + String *baseclassname = Getattr(base.item, "name"); + if (!c_baseclassname) { + c_baseclassname = baseclassname; + baseclass = Copy(getProxyName(baseclassname)); + if (baseclass) + c_baseclass = SwigType_namestr(baseclassname); + } else { + /* Warn about multiple inheritance for additional base class(es) */ String *proxyclassname = Getattr(n, "classtypeobj"); - String *baseclassname = Getattr(base.item, "name"); Swig_warning(WARN_JAVA_MULTIPLE_INHERITANCE, Getfile(n), Getline(n), - "Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Java.\n", SwigType_namestr(proxyclassname), SwigType_namestr(baseclassname)); + "Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Java.\n", SwigType_namestr(proxyclassname), SwigType_namestr(baseclassname)); } - base = Next(base); - } - } + } + base = Next(base); + } } } diff --git a/Source/Modules/modula3.cxx b/Source/Modules/modula3.cxx index 307c7857d..940b6ebcb 100644 --- a/Source/Modules/modula3.cxx +++ b/Source/Modules/modula3.cxx @@ -2176,20 +2176,24 @@ MODULA3(): /* Deal with inheritance */ List *baselist = Getattr(n, "bases"); - if (baselist != NIL) { + if (baselist) { Iterator base = First(baselist); - if (base.item) { - c_baseclassname = Getattr(base.item, "name"); - baseclass = Copy(getProxyName(c_baseclassname)); - if (baseclass) { - c_baseclass = SwigType_namestr(Getattr(base.item, "name")); + while (base.item) { + if (!GetFlag(base.item, "feature:ignore")) { + String *baseclassname = Getattr(base.item, "name"); + if (!c_baseclassname) { + c_baseclassname = baseclassname; + baseclass = Copy(getProxyName(baseclassname)); + if (baseclass) + c_baseclass = SwigType_namestr(baseclassname); + } else { + /* Warn about multiple inheritance for additional base class(es) */ + String *proxyclassname = Getattr(n, "classtypeobj"); + Swig_warning(WARN_MODULA3_MULTIPLE_INHERITANCE, Getfile(n), Getline(n), + "Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Java.\n", SwigType_namestr(proxyclassname), SwigType_namestr(baseclassname)); + } } base = Next(base); - if (base.item != NIL) { - Swig_warning(WARN_MODULA3_MULTIPLE_INHERITANCE, Getfile(n), Getline(n), - "Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Modula 3.\n", - name, Getattr(base.item, "name")); - } } }