cildispose and cildisposeoverride typemaps replaced by

csdestruct_base and csdestruct_derived typemaps. The delete()
method has been removed and its functionality put into these
typemaps designed for the Dispose method.
New typemaps: csfinalize for finalizers.


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@4877 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2003-06-10 21:43:58 +00:00
commit b643048800
2 changed files with 48 additions and 25 deletions

View file

@ -1088,24 +1088,36 @@ class CSHARP : public Language {
NIL);
}
// C++ destructor is wrapped by the delete method
String *destruct = NewString("");
const String *tm = NULL;
if (derived)
tm = javaTypemapLookup("csdestruct_derived", classDeclarationName, WARN_NONE);
else
tm = javaTypemapLookup("csdestruct_base", classDeclarationName, WARN_NONE);
// Emit the finalize and delete methods
if (*Char(destructor_call) && tm) {
Printv(destruct, tm, NIL);
Replaceall(destruct, "$jnicall", destructor_call);
// finalize method
Printv(shadow_classdef,
javaTypemapLookup("csfinalize", classDeclarationName, WARN_NONE),
"\n",
NIL);
// delete method
if (*Char(destruct)) {
Printv(shadow_classdef, " public ", derived ? "override" : "virtual", " void Dispose() ", destruct, "\n", NIL);
}
} else {
// Ensure method exists for derived class to call. Don't bother if the typemap doesn't exist.
if (tm && *Char(tm))
Printv(shadow_classdef, "\n protected ", derived ? "override" : "virtual", " void Dispose() {\n }\n", NIL);
}
Delete(destruct);
// Emit various other methods
Printv(shadow_classdef,
derived ?
javaTypemapLookup("cildisposeoverride", classDeclarationName, WARN_NONE) :
javaTypemapLookup("cildispose", classDeclarationName, WARN_NONE), // finalize method
"\n",
*Char(destructor_call) ? " protected " : " private ",
derived ? "override" : "virtual",
" void delete() {\n",
" if(swigCPtr != IntPtr.Zero && swigCMemOwn) {\n",
destructor_call,
"",
" swigCMemOwn = false;\n",
derived ? // Zero all pointers up any inheritance hierarchy
" base.delete();\n" :
"",
" }\n",
" swigCPtr = IntPtr.Zero;\n",
" }\n",
javaTypemapLookup("javagetcptr", classDeclarationName, WARN_JAVA_TYPEMAP_GETCPTR_UNDEF), // getCPtr method
javaTypemapLookup("javacode", classDeclarationName, WARN_NONE), // extra Java code
"\n",
@ -1551,7 +1563,7 @@ class CSHARP : public Language {
String *symname = Getattr(n,"sym:name");
if(proxy_flag) {
Printv(destructor_call, " ", jniclass_name, ".", Swig_name_destroy(symname), "(swigCPtr);\n", NIL);
Printv(destructor_call, jniclass_name, ".", Swig_name_destroy(symname), "(swigCPtr)", NIL);
}
return SWIG_OK;
}