Multiple inheritance warnings and ignored base classes fixes
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@7618 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
96647a499e
commit
4bff2bc406
4 changed files with 76 additions and 54 deletions
|
|
@ -1254,15 +1254,27 @@ class CSHARP : public Language {
|
|||
List *baselist = Getattr(n,"bases");
|
||||
if (baselist) {
|
||||
Iterator base = First(baselist);
|
||||
c_baseclassname = Getattr(base.item,"name");
|
||||
baseclass = Copy(getProxyName(c_baseclassname));
|
||||
if (baseclass){
|
||||
c_baseclass = SwigType_namestr(Getattr(base.item,"name"));
|
||||
while(base.item && GetFlag(base.item,"feature:ignore")) {
|
||||
base = Next(base);
|
||||
}
|
||||
base = Next(base);
|
||||
if (base.item) {
|
||||
Swig_warning(WARN_CSHARP_MULTIPLE_INHERITANCE, input_file, line_number,
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in C#.\n", typemap_lookup_type, Getattr(base.item,"name"));
|
||||
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")) {
|
||||
base = Next(base);
|
||||
continue;
|
||||
}
|
||||
String *proxyclassname = SwigType_str(Getattr(n,"classtypeobj"),0);
|
||||
String *baseclassname = SwigType_str(Getattr(base.item,"name"),0);
|
||||
Swig_warning(WARN_CSHARP_MULTIPLE_INHERITANCE, input_file, line_number,
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in C#.\n", proxyclassname, baseclassname);
|
||||
base = Next(base);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1494,15 +1494,27 @@ class JAVA : public Language {
|
|||
List *baselist = Getattr(n,"bases");
|
||||
if (baselist) {
|
||||
Iterator base = First(baselist);
|
||||
c_baseclassname = Getattr(base.item,"name");
|
||||
baseclass = Copy(getProxyName(c_baseclassname));
|
||||
if (baseclass){
|
||||
c_baseclass = SwigType_namestr(Getattr(base.item,"name"));
|
||||
while(base.item && GetFlag(base.item,"feature:ignore")) {
|
||||
base = Next(base);
|
||||
}
|
||||
base = Next(base);
|
||||
if (base.item) {
|
||||
Swig_warning(WARN_JAVA_MULTIPLE_INHERITANCE, input_file, line_number,
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Java.\n", typemap_lookup_type, Getattr(base.item,"name"));
|
||||
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")) {
|
||||
base = Next(base);
|
||||
continue;
|
||||
}
|
||||
String *proxyclassname = SwigType_str(Getattr(n,"classtypeobj"),0);
|
||||
String *baseclassname = SwigType_str(Getattr(base.item,"name"),0);
|
||||
Swig_warning(WARN_JAVA_MULTIPLE_INHERITANCE, input_file, line_number,
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Java.\n", proxyclassname, baseclassname);
|
||||
base = Next(base);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@
|
|||
* Portions copyright Ananova Ltd (c) 2002
|
||||
* Sam Liddicott <sam@ananova.com>
|
||||
*
|
||||
* TODO: Replace stderr messages with Swig_warning
|
||||
*
|
||||
*/
|
||||
|
||||
char cvsroot_php4_cxx[] = "$Header$";
|
||||
|
|
@ -81,8 +83,6 @@ static Hash *shadow_set_vars;
|
|||
static int native_constructor=0;
|
||||
static Hash *zend_types = 0;
|
||||
|
||||
static String *this_shadow_baseclass = 0; //inheritance for shadow class from %pragma and cpp_inherit
|
||||
static String *this_shadow_multinherit = 0;
|
||||
static int shadow = 1;
|
||||
|
||||
// These static variables are used to pass some state from Handlers into functionWrapper
|
||||
|
|
@ -1385,6 +1385,7 @@ public:
|
|||
|
||||
if(shadow) {
|
||||
char *rename = GetChar(n, "sym:name");
|
||||
|
||||
if (!addSymbol(rename,n)) return SWIG_ERROR;
|
||||
shadow_classname = Swig_copy_string(rename);
|
||||
cs_entry = NewString("");
|
||||
|
|
@ -1396,43 +1397,31 @@ public:
|
|||
SWIG_exit(1);
|
||||
}
|
||||
|
||||
this_shadow_baseclass = NewString("");
|
||||
this_shadow_multinherit = NewString("");
|
||||
|
||||
shadow_get_vars = NewHash();
|
||||
shadow_set_vars = NewHash();
|
||||
|
||||
/* Deal with inheritance */
|
||||
List *baselist = Getattr(n, "bases");
|
||||
|
||||
if(baselist) {
|
||||
int class_count = 0;
|
||||
Iterator base = First(baselist);
|
||||
while(base.item && GetFlag(base.item,"feature:ignore")) {
|
||||
base = Next(base);
|
||||
}
|
||||
|
||||
if (base.item && is_shadow(Getattr(base.item, "name"))) {
|
||||
class_count++;
|
||||
Printf(this_shadow_baseclass, "%s", Getattr(base.item, "name"));
|
||||
}
|
||||
|
||||
if (base.item) for(base = Next(base); base.item; base = Next(base)) {
|
||||
if (GetFlag(base.item,"feature:ignore")) {
|
||||
continue;
|
||||
}
|
||||
if(is_shadow(Getattr(base.item, "name"))) {
|
||||
class_count++;
|
||||
Printf(this_shadow_multinherit, "%s ", Getattr(base.item, "name"));
|
||||
}
|
||||
}
|
||||
|
||||
if(class_count > 1) {
|
||||
Printf(stderr,
|
||||
"Error: %s inherits from multiple base classes(%s %s). "
|
||||
"Multiple inheritance is not directly supported by PHP4, SWIG may support it at some point in the future.\n",
|
||||
shadow_classname, base.item, this_shadow_multinherit);
|
||||
}
|
||||
List *baselist = Getattr(n,"bases");
|
||||
if (baselist) {
|
||||
Iterator base = First(baselist);
|
||||
while(base.item && GetFlag(base.item,"feature:ignore")) {
|
||||
base = Next(base);
|
||||
}
|
||||
base = Next(base);
|
||||
if (base.item) {
|
||||
/* Warn about multiple inheritance for additional base class(es) */
|
||||
while (base.item) {
|
||||
if (GetFlag(base.item,"feature:ignore")) {
|
||||
base = Next(base);
|
||||
continue;
|
||||
}
|
||||
String *proxyclassname = SwigType_str(Getattr(n,"classtypeobj"),0);
|
||||
String *baseclassname = SwigType_str(Getattr(base.item,"name"),0);
|
||||
Swig_warning(WARN_PHP4_MULTIPLE_INHERITANCE, input_file, line_number,
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Php4.\n", proxyclassname, baseclassname);
|
||||
base = Next(base);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Write out class init code */
|
||||
|
|
@ -1675,10 +1664,8 @@ public:
|
|||
free(shadow_classname);
|
||||
shadow_classname = NULL;
|
||||
|
||||
Delete(this_shadow_baseclass); this_shadow_baseclass = NULL;
|
||||
Delete(shadow_set_vars); shadow_set_vars = NULL;
|
||||
Delete(shadow_get_vars); shadow_get_vars = NULL;
|
||||
Delete(this_shadow_multinherit); this_shadow_multinherit = NULL;
|
||||
|
||||
Printf(all_cs_entry,"%s { NULL, NULL, NULL}\n};\n",cs_entry);
|
||||
//??delete cs_entry;
|
||||
|
|
|
|||
|
|
@ -1676,6 +1676,9 @@ public:
|
|||
List *baselist = Getattr(n,"bases");
|
||||
if (baselist && Len(baselist)) {
|
||||
Iterator base = First(baselist);
|
||||
while(base.item && GetFlag(base.item,"feature:ignore")) {
|
||||
base = Next(base);
|
||||
}
|
||||
while (base.item) {
|
||||
String *basename = Getattr(base.item,"name");
|
||||
String *basenamestr = SwigType_namestr(basename);
|
||||
|
|
@ -1701,12 +1704,20 @@ public:
|
|||
Delete(btype);
|
||||
}
|
||||
base = Next(base);
|
||||
while(base.item && GetFlag(base.item,"feature:ignore")) {
|
||||
base = Next(base);
|
||||
}
|
||||
if (!multipleInheritance) {
|
||||
/* Warn about multiple inheritance for additional base class(es) listed */
|
||||
/* Warn about multiple inheritance for additional base class(es) */
|
||||
while (base.item) {
|
||||
basename = Getattr(n,"name");
|
||||
if (GetFlag(base.item,"feature:ignore")) {
|
||||
base = Next(base);
|
||||
continue;
|
||||
}
|
||||
String *proxyclassname = SwigType_str(Getattr(n,"classtypeobj"),0);
|
||||
String *baseclassname = SwigType_str(Getattr(base.item,"name"),0);
|
||||
Swig_warning(WARN_RUBY_MULTIPLE_INHERITANCE, input_file, line_number,
|
||||
"Warning for %s: Base %s ignored. Multiple inheritance is not supported in Ruby.\n", basename, basename);
|
||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Ruby.\n", proxyclassname, baseclassname);
|
||||
base = Next(base);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue