Add the 'notderived' attribute to the javabase and csbase typemaps
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@11196 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
1c91a4a9b9
commit
7e8d19cec0
4 changed files with 25 additions and 3 deletions
|
|
@ -1,6 +1,12 @@
|
||||||
Version 1.3.40 (in progress)
|
Version 1.3.40 (in progress)
|
||||||
============================
|
============================
|
||||||
|
|
||||||
|
2009-04-29: wsfulton
|
||||||
|
[Java, C#] Add the 'notderived' attribute to the javabase and csbase typemaps.
|
||||||
|
When this attribute is set, the typemap will not apply to classes that are derived
|
||||||
|
from a C++ base class, eg
|
||||||
|
%typemap(csbase, notderived="1") SWIGTYPE "CommonBase"
|
||||||
|
|
||||||
2009-04-29: olly
|
2009-04-29: olly
|
||||||
[Python] Don't attempt to acquire the GIL in situations where we
|
[Python] Don't attempt to acquire the GIL in situations where we
|
||||||
know that it will already be locked. This avoids some dead-locks
|
know that it will already be locked. This avoids some dead-locks
|
||||||
|
|
@ -9,6 +15,7 @@ Version 1.3.40 (in progress)
|
||||||
run a little faster (in tests with Xapian on x86-64 Ubuntu 9.04,
|
run a little faster (in tests with Xapian on x86-64 Ubuntu 9.04,
|
||||||
the stripped wrapper library was 11% smaller and ran 2.7% faster).
|
the stripped wrapper library was 11% smaller and ran 2.7% faster).
|
||||||
|
|
||||||
|
>>>>>>> .r11195
|
||||||
2009-04-21: wsfulton
|
2009-04-21: wsfulton
|
||||||
[C#] Fix #2753469 - bool &OUTPUT and bool *OUTPUT typemaps initialisation.
|
[C#] Fix #2753469 - bool &OUTPUT and bool *OUTPUT typemaps initialisation.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5302,6 +5302,9 @@ base (extends) for Java class: empty default
|
||||||
Note that this typemap accepts a <tt>replace</tt> attribute as an optional flag. When set to "1", it will replace/override any C++ base classes
|
Note that this typemap accepts a <tt>replace</tt> attribute as an optional flag. When set to "1", it will replace/override any C++ base classes
|
||||||
that might have been parsed. If this flag is not specified and there are C++ base classes, then a multiple inheritance warning
|
that might have been parsed. If this flag is not specified and there are C++ base classes, then a multiple inheritance warning
|
||||||
is issued and the code in the typemap is ignored.
|
is issued and the code in the typemap is ignored.
|
||||||
|
The typemap also accepts a <tt>notderived</tt> attribute as an optional flag. When set to "1", it will not apply to classes that
|
||||||
|
are derived from a C++ base.
|
||||||
|
When used with the SWIGTYPE type, it is useful for giving a common base for all proxy classes, that is, providing a base class that sits in between all proxy classes and the Java base class <tt>Object</tt> for example: <tt>%typemap(javabase, notderived="1") SWIGTYPE "CommonBase"</tt>.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p><tt>%typemap(javabody)</tt></p>
|
<p><tt>%typemap(javabody)</tt></p>
|
||||||
|
|
|
||||||
|
|
@ -1497,6 +1497,7 @@ public:
|
||||||
Node *attributes = NewHash();
|
Node *attributes = NewHash();
|
||||||
const String *pure_baseclass = typemapLookup("csbase", typemap_lookup_type, WARN_NONE, attributes);
|
const String *pure_baseclass = typemapLookup("csbase", typemap_lookup_type, WARN_NONE, attributes);
|
||||||
bool purebase_replace = GetFlag(attributes, "tmap:csbase:replace") ? true : false;
|
bool purebase_replace = GetFlag(attributes, "tmap:csbase:replace") ? true : false;
|
||||||
|
bool purebase_notderived = GetFlag(attributes, "tmap:csbase:notderived") ? true : false;
|
||||||
Delete(attributes);
|
Delete(attributes);
|
||||||
|
|
||||||
// C++ inheritance
|
// C++ inheritance
|
||||||
|
|
@ -1529,17 +1530,22 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const String *wanted_base = baseclass ? baseclass : pure_baseclass;
|
|
||||||
bool derived = baseclass && getProxyName(c_baseclassname);
|
bool derived = baseclass && getProxyName(c_baseclassname);
|
||||||
|
if (derived && purebase_notderived)
|
||||||
|
pure_baseclass = empty_string;
|
||||||
|
const String *wanted_base = baseclass ? baseclass : pure_baseclass;
|
||||||
|
|
||||||
if (purebase_replace) {
|
if (purebase_replace) {
|
||||||
wanted_base = pure_baseclass;
|
wanted_base = pure_baseclass;
|
||||||
derived = false;
|
derived = false;
|
||||||
Delete(baseclass);
|
Delete(baseclass);
|
||||||
baseclass = NULL;
|
baseclass = NULL;
|
||||||
|
if (purebase_notderived)
|
||||||
|
Swig_error(input_file, line_number, "The csbase typemap for proxy %s must contain just one of the 'replace' or 'notderived' attributes.\n", typemap_lookup_type);
|
||||||
} else if (Len(pure_baseclass) > 0 && Len(baseclass) > 0) {
|
} else if (Len(pure_baseclass) > 0 && Len(baseclass) > 0) {
|
||||||
Swig_warning(WARN_CSHARP_MULTIPLE_INHERITANCE, input_file, line_number,
|
Swig_warning(WARN_CSHARP_MULTIPLE_INHERITANCE, input_file, line_number,
|
||||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in C#. Perhaps you need the replace attribute in the csbase typemap?\n", typemap_lookup_type, pure_baseclass);
|
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in C#. "
|
||||||
|
"Perhaps you need one of the 'replace' or 'notderived' attributes in the csbase typemap?\n", typemap_lookup_type, pure_baseclass);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pure C# interfaces
|
// Pure C# interfaces
|
||||||
|
|
|
||||||
|
|
@ -1567,6 +1567,7 @@ public:
|
||||||
Node *attributes = NewHash();
|
Node *attributes = NewHash();
|
||||||
const String *pure_baseclass = typemapLookup("javabase", typemap_lookup_type, WARN_NONE, attributes);
|
const String *pure_baseclass = typemapLookup("javabase", typemap_lookup_type, WARN_NONE, attributes);
|
||||||
bool purebase_replace = GetFlag(attributes, "tmap:javabase:replace") ? true : false;
|
bool purebase_replace = GetFlag(attributes, "tmap:javabase:replace") ? true : false;
|
||||||
|
bool purebase_notderived = GetFlag(attributes, "tmap:javabase:notderived") ? true : false;
|
||||||
Delete(attributes);
|
Delete(attributes);
|
||||||
|
|
||||||
// C++ inheritance
|
// C++ inheritance
|
||||||
|
|
@ -1600,6 +1601,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
bool derived = baseclass && getProxyName(c_baseclassname);
|
bool derived = baseclass && getProxyName(c_baseclassname);
|
||||||
|
if (derived && purebase_notderived)
|
||||||
|
pure_baseclass = empty_string;
|
||||||
const String *wanted_base = baseclass ? baseclass : pure_baseclass;
|
const String *wanted_base = baseclass ? baseclass : pure_baseclass;
|
||||||
|
|
||||||
if (purebase_replace) {
|
if (purebase_replace) {
|
||||||
|
|
@ -1607,9 +1610,12 @@ public:
|
||||||
derived = false;
|
derived = false;
|
||||||
Delete(baseclass);
|
Delete(baseclass);
|
||||||
baseclass = NULL;
|
baseclass = NULL;
|
||||||
|
if (purebase_notderived)
|
||||||
|
Swig_error(input_file, line_number, "The javabase typemap for proxy %s must contain just one of the 'replace' or 'notderived' attributes.\n", typemap_lookup_type);
|
||||||
} else if (Len(pure_baseclass) > 0 && Len(baseclass) > 0) {
|
} else if (Len(pure_baseclass) > 0 && Len(baseclass) > 0) {
|
||||||
Swig_warning(WARN_JAVA_MULTIPLE_INHERITANCE, input_file, line_number,
|
Swig_warning(WARN_JAVA_MULTIPLE_INHERITANCE, input_file, line_number,
|
||||||
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Java. Perhaps you need the replace attribute in the javabase typemap?\n", typemap_lookup_type, pure_baseclass);
|
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in Java. "
|
||||||
|
"Perhaps you need one of the 'replace' or 'notderived' attributes in the csbase typemap?\n", typemap_lookup_type, pure_baseclass);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pure Java interfaces
|
// Pure Java interfaces
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue