diff options
Diffstat (limited to 'Source/Modules/modula3.cxx')
-rw-r--r-- | Source/Modules/modula3.cxx | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/Source/Modules/modula3.cxx b/Source/Modules/modula3.cxx index 307c7857d..9983e69d2 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, base %s ignored. Multiple inheritance is not supported in Modula 3.\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")); - } } } @@ -2201,7 +2205,7 @@ MODULA3(): const String *pure_baseclass = typemapLookup(n, "m3base", name, WARN_NONE); if (hasContent(pure_baseclass) && hasContent(baseclass)) { 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, pure_baseclass); + "Warning for %s, base %s ignored. Multiple inheritance is not supported in Modula 3.\n", name, pure_baseclass); } // Pure Modula 3 interfaces const String *pure_interfaces = typemapLookup(n, derived ? "m3interfaces_derived" : "m3interfaces", @@ -2431,7 +2435,7 @@ MODULA3(): base = Next(base); if (base.item) { 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", + "Warning for %s, base %s ignored. Multiple inheritance is not supported in Modula 3.\n", proxy_class_name, Getattr(base.item, "name")); } } |