Fixes for nspace and derived classes
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@11930 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
deafe98dc4
commit
96f9879511
9 changed files with 67 additions and 24 deletions
|
|
@ -206,6 +206,7 @@ jniclassinterfaces -> imclassinterfaces
|
|||
$javaclassname -> $csclassname
|
||||
$&javaclassname -> $&csclassname
|
||||
$*javaclassname -> $*csclassname
|
||||
$javaclazzname -> $csclazzname
|
||||
$javainput -> $csinput
|
||||
$jnicall -> $imcall
|
||||
</pre></div>
|
||||
|
|
|
|||
|
|
@ -5161,6 +5161,14 @@ If the type does not have an associated proxy class, it expands to the type wrap
|
|||
<tt>SWIGTYPE_p_unsigned_short</tt> is generated when wrapping <tt>unsigned short *</tt>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b><tt>$javaclazzname</tt></b><br>
|
||||
This special variable works like <tt>$javaclassname</tt>, but expands the fully qualified C++ class into the package name,
|
||||
if used by the <a href="SWIGPlus.html#SWIGPlus_nspace">nspace feature</a>, and the proxy class name, mangled for use as a function name.
|
||||
For example, <tt>Namespace1::Namespace2::Klass</tt> is expanded into <tt>Namespace1_Namespace2_Klass_</tt>.
|
||||
This special variable is usually used for making calls to a function in the intermediary JNI class, as they are mangled with this prefix.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b><tt>$null </tt></b><br>
|
||||
Used in input typemaps to return early from JNI functions that have either void or a non-void return type. Example:
|
||||
|
|
|
|||
|
|
@ -56,5 +56,11 @@ public class runme
|
|||
ns.Dispose();
|
||||
nspaceNamespace.NoNSpacePlease nons = new nspaceNamespace.NoNSpacePlease();
|
||||
nons.Dispose();
|
||||
|
||||
// Derived class
|
||||
nspaceNamespace.Outer.Inner3.Blue blue3 = new nspaceNamespace.Outer.Inner3.Blue();
|
||||
blue3.blueInstanceMethod();
|
||||
nspaceNamespace.Outer.Inner4.Blue blue4 = new nspaceNamespace.Outer.Inner4.Blue();
|
||||
blue4.blueInstanceMethod();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,5 +60,11 @@ public class nspace_runme {
|
|||
// turn feature off / ignoring
|
||||
nspacePackage.Outer.nspace ns = new nspacePackage.Outer.nspace();
|
||||
nspacePackage.NoNSpacePlease nons = new nspacePackage.NoNSpacePlease();
|
||||
|
||||
// Derived class
|
||||
nspacePackage.Outer.Inner3.Blue blue3 = new nspacePackage.Outer.Inner3.Blue();
|
||||
blue3.blueInstanceMethod();
|
||||
nspacePackage.Outer.Inner4.Blue blue4 = new nspacePackage.Outer.Inner4.Blue();
|
||||
blue4.blueInstanceMethod();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,6 +73,18 @@ namespace Outer {
|
|||
class NoNSpacePlease {};
|
||||
} // Inner2
|
||||
|
||||
// Derived class
|
||||
namespace Inner3 {
|
||||
struct Blue : Inner2::Color {
|
||||
void blueInstanceMethod() {}
|
||||
};
|
||||
}
|
||||
namespace Inner4 {
|
||||
struct Blue : Inner2::Color {
|
||||
void blueInstanceMethod() {}
|
||||
};
|
||||
}
|
||||
|
||||
class SomeClass {
|
||||
public:
|
||||
Inner1::Color::Channel GetInner1ColorChannel() { return Inner1::Color::Transmission; }
|
||||
|
|
|
|||
|
|
@ -841,7 +841,7 @@ SWIGINTERN const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
|
|||
%typemap(csbody_derived) SWIGTYPE %{
|
||||
private HandleRef swigCPtr;
|
||||
|
||||
internal $csclassname(IntPtr cPtr, bool cMemoryOwn) : base($imclassname.$csclassnameUpcast(cPtr), cMemoryOwn) {
|
||||
internal $csclassname(IntPtr cPtr, bool cMemoryOwn) : base($imclassname.$csclazznameSWIGUpcast(cPtr), cMemoryOwn) {
|
||||
swigCPtr = new HandleRef(this, cPtr);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1072,7 +1072,7 @@
|
|||
private long swigCPtr;
|
||||
|
||||
PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) {
|
||||
super($imclassname.SWIG$javaclassnameUpcast(cPtr), cMemoryOwn);
|
||||
super($imclassname.$javaclazznameSWIGUpcast(cPtr), cMemoryOwn);
|
||||
swigCPtr = cPtr;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1753,6 +1753,8 @@ public:
|
|||
Delete(attributes);
|
||||
Delete(destruct);
|
||||
|
||||
String *csclazzname = Swig_name_member(getNSpace(), proxy_class_name, ""); // mangled full proxy class name
|
||||
|
||||
// Emit extra user code
|
||||
Printv(proxy_class_def, typemapLookup(n, "cscode", typemap_lookup_type, WARN_NONE), // extra C# code
|
||||
"\n", NIL);
|
||||
|
|
@ -1770,21 +1772,27 @@ public:
|
|||
Replaceall(proxy_class_def, "$dllimport", dllimport);
|
||||
Replaceall(proxy_class_code, "$dllimport", dllimport);
|
||||
|
||||
Replaceall(proxy_class_def, "$csclazzname", csclazzname);
|
||||
Replaceall(proxy_class_code, "$csclazzname", csclazzname);
|
||||
|
||||
// Add code to do C++ casting to base class (only for classes in an inheritance hierarchy)
|
||||
if (derived) {
|
||||
Printv(imclass_cppcasts_code, "\n [DllImport(\"", dllimport, "\", EntryPoint=\"CSharp_", proxy_class_name, "Upcast", "\")]\n", NIL);
|
||||
Printf(imclass_cppcasts_code, " public static extern IntPtr $csclassnameUpcast(IntPtr objectRef);\n");
|
||||
String *upcast_method = Swig_name_member(getNSpace(), proxy_class_name, "SWIGUpcast");
|
||||
String *wname = Swig_name_wrapper(upcast_method);
|
||||
|
||||
Printv(imclass_cppcasts_code, "\n [DllImport(\"", dllimport, "\", EntryPoint=\"", wname, "\")]\n", NIL);
|
||||
Printf(imclass_cppcasts_code, " public static extern IntPtr %s(IntPtr jarg1);\n", upcast_method);
|
||||
|
||||
Replaceall(imclass_cppcasts_code, "$csclassname", proxy_class_name);
|
||||
|
||||
Printv(upcasts_code,
|
||||
"SWIGEXPORT $cbaseclass * SWIGSTDCALL CSharp_$imclazznameUpcast",
|
||||
"($cclass *objectRef) {\n", " return ($cbaseclass *)objectRef;\n" "}\n", "\n", NIL);
|
||||
"SWIGEXPORT ", c_baseclass, " * SWIGSTDCALL ", wname,
|
||||
"(", c_classname, " *jarg1) {\n", " return (", c_baseclass, " *)jarg1;\n" "}\n", "\n", NIL);
|
||||
|
||||
Replaceall(upcasts_code, "$cbaseclass", c_baseclass);
|
||||
Replaceall(upcasts_code, "$imclazzname", proxy_class_name);
|
||||
Replaceall(upcasts_code, "$cclass", c_classname);
|
||||
Delete(wname);
|
||||
Delete(upcast_method);
|
||||
}
|
||||
Delete(csclazzname);
|
||||
Delete(baseclass);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1762,6 +1762,8 @@ public:
|
|||
Delete(attributes);
|
||||
Delete(destruct);
|
||||
|
||||
String *javaclazzname = Swig_name_member(getNSpace(), proxy_class_name, ""); // mangled full proxy class name
|
||||
|
||||
// Emit extra user code
|
||||
Printv(proxy_class_def, typemapLookup(n, "javacode", typemap_lookup_type, WARN_NONE), // extra Java code
|
||||
"\n", NIL);
|
||||
|
|
@ -1776,29 +1778,29 @@ public:
|
|||
Replaceall(proxy_class_def, "$imclassname", full_imclass_name);
|
||||
Replaceall(proxy_class_code, "$imclassname", full_imclass_name);
|
||||
|
||||
Replaceall(proxy_class_def, "$javaclazzname", javaclazzname);
|
||||
Replaceall(proxy_class_code, "$javaclazzname", javaclazzname);
|
||||
|
||||
// Add code to do C++ casting to base class (only for classes in an inheritance hierarchy)
|
||||
if (derived) {
|
||||
Printv(imclass_cppcasts_code, " public final static native long SWIG$javaclassnameUpcast(long jarg1);\n", NIL);
|
||||
String *upcast_method = Swig_name_member(getNSpace(), proxy_class_name, "SWIGUpcast");
|
||||
String *jniname = makeValidJniName(upcast_method);
|
||||
String *wname = Swig_name_wrapper(jniname);
|
||||
|
||||
Replaceall(imclass_cppcasts_code, "$javaclassname", full_proxy_class_name);
|
||||
Printf(imclass_cppcasts_code, " public final static native long %s(long jarg1);\n", upcast_method);
|
||||
|
||||
Printv(upcasts_code,
|
||||
"SWIGEXPORT jlong JNICALL Java_$jnipackage$imimclass_SWIG$imclazznameUpcast",
|
||||
"(JNIEnv *jenv, jclass jcls, jlong jarg1) {\n",
|
||||
"SWIGEXPORT jlong JNICALL ", wname, "(JNIEnv *jenv, jclass jcls, jlong jarg1) {\n",
|
||||
" jlong baseptr = 0;\n"
|
||||
" (void)jenv;\n" " (void)jcls;\n" " *($cbaseclass **)&baseptr = *($cclass **)&jarg1;\n" " return baseptr;\n" "}\n", "\n", NIL);
|
||||
" (void)jenv;\n" " (void)jcls;\n" " *(", c_baseclassname, " **)&baseptr = *(", c_classname, " **)&jarg1;\n"
|
||||
" return baseptr;\n"
|
||||
"}\n", "\n", NIL);
|
||||
|
||||
String *imimclass = makeValidJniName(imclass_name);
|
||||
String *imclazzname = makeValidJniName(full_proxy_class_name);
|
||||
Replaceall(upcasts_code, "$cbaseclass", c_baseclass);
|
||||
Replaceall(upcasts_code, "$imclazzname", imclazzname);
|
||||
Replaceall(upcasts_code, "$cclass", c_classname);
|
||||
Replaceall(upcasts_code, "$jnipackage", jnipackage);
|
||||
Replaceall(upcasts_code, "$imimclass", imimclass);
|
||||
|
||||
Delete(imclazzname);
|
||||
Delete(imimclass);
|
||||
Delete(wname);
|
||||
Delete(jniname);
|
||||
Delete(upcast_method);
|
||||
}
|
||||
Delete(javaclazzname);
|
||||
Delete(baseclass);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue