new typemap: csconstruct. This typemap contains the code that goes into the proxy constructor.
The generated code is slightly different. A method called swigSetup is called during construction of the proxy object. This is for a future change where a try finally block needs to be put around an unmanaged call during construction (for a new c++ to c# exception conversion handling mechanism) git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@6922 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
408a7ca9d3
commit
74cf6ee4c2
1 changed files with 13 additions and 26 deletions
|
|
@ -30,7 +30,6 @@ class CSHARP : public Language {
|
||||||
File *f_init;
|
File *f_init;
|
||||||
|
|
||||||
bool proxy_flag; // Flag for generating proxy classes
|
bool proxy_flag; // Flag for generating proxy classes
|
||||||
bool have_default_constructor_flag;
|
|
||||||
bool native_function_flag; // Flag for when wrapping a native function
|
bool native_function_flag; // Flag for when wrapping a native function
|
||||||
bool enum_constant_flag; // Flag for when wrapping an enum or constant
|
bool enum_constant_flag; // Flag for when wrapping an enum or constant
|
||||||
bool static_flag; // Flag for when wrapping a static functions or member variables
|
bool static_flag; // Flag for when wrapping a static functions or member variables
|
||||||
|
|
@ -83,7 +82,6 @@ class CSHARP : public Language {
|
||||||
f_init(NULL),
|
f_init(NULL),
|
||||||
|
|
||||||
proxy_flag(true),
|
proxy_flag(true),
|
||||||
have_default_constructor_flag(false),
|
|
||||||
native_function_flag(false),
|
native_function_flag(false),
|
||||||
enum_constant_flag(false),
|
enum_constant_flag(false),
|
||||||
static_flag(false),
|
static_flag(false),
|
||||||
|
|
@ -1264,14 +1262,6 @@ class CSHARP : public Language {
|
||||||
typemapLookup("csbody", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CSBODY_UNDEF), // main body of class
|
typemapLookup("csbody", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CSBODY_UNDEF), // main body of class
|
||||||
NIL);
|
NIL);
|
||||||
|
|
||||||
if(!have_default_constructor_flag) { // All proxy classes need a constructor
|
|
||||||
Printv(proxy_class_def,
|
|
||||||
"\n",
|
|
||||||
" protected $csclassname() : this(IntPtr.Zero, false) {\n",
|
|
||||||
" }\n",
|
|
||||||
NIL);
|
|
||||||
}
|
|
||||||
|
|
||||||
// C++ destructor is wrapped by the Dispose method
|
// C++ destructor is wrapped by the Dispose method
|
||||||
// Note that the method name is specified in a typemap attribute called methodname
|
// Note that the method name is specified in a typemap attribute called methodname
|
||||||
String *destruct = NewString("");
|
String *destruct = NewString("");
|
||||||
|
|
@ -1387,7 +1377,6 @@ class CSHARP : public Language {
|
||||||
Clear(proxy_class_def);
|
Clear(proxy_class_def);
|
||||||
Clear(proxy_class_code);
|
Clear(proxy_class_code);
|
||||||
|
|
||||||
have_default_constructor_flag = false;
|
|
||||||
destructor_call = NewString("");
|
destructor_call = NewString("");
|
||||||
proxy_class_constants_code = NewString("");
|
proxy_class_constants_code = NewString("");
|
||||||
}
|
}
|
||||||
|
|
@ -1674,6 +1663,7 @@ class CSHARP : public Language {
|
||||||
String *tm;
|
String *tm;
|
||||||
Parm *p;
|
Parm *p;
|
||||||
int i;
|
int i;
|
||||||
|
String *function_code = NewString("");
|
||||||
|
|
||||||
Language::constructorHandler(n);
|
Language::constructorHandler(n);
|
||||||
|
|
||||||
|
|
@ -1683,13 +1673,13 @@ class CSHARP : public Language {
|
||||||
|
|
||||||
if(proxy_flag) {
|
if(proxy_flag) {
|
||||||
String *overloaded_name = getOverloadedName(n);
|
String *overloaded_name = getOverloadedName(n);
|
||||||
|
String *mangled_overname = Swig_name_construct(overloaded_name);
|
||||||
String *imcall = NewString("");
|
String *imcall = NewString("");
|
||||||
|
|
||||||
const String *methodmods = Getattr(n,"feature:cs:methodmodifiers");
|
const String *methodmods = Getattr(n,"feature:cs:methodmodifiers");
|
||||||
methodmods = methodmods ? methodmods : (!is_public(n) ? protected_string : public_string);
|
methodmods = methodmods ? methodmods : (!is_public(n) ? protected_string : public_string);
|
||||||
methodmods = methodmods ? methodmods : public_string;
|
Printf(function_code, " %s %s(", methodmods, proxy_class_name);
|
||||||
Printf(proxy_class_code, " %s %s(", methodmods, proxy_class_name);
|
Printv(imcall, imclass_name, ".", mangled_overname, "(", NIL);
|
||||||
Printv(imcall, " : this(", imclass_name, ".", Swig_name_construct(overloaded_name), "(", NIL);
|
|
||||||
|
|
||||||
/* Attach the non-standard typemaps to the parameter list */
|
/* Attach the non-standard typemaps to the parameter list */
|
||||||
Swig_typemap_attach_parms("in", l, NULL);
|
Swig_typemap_attach_parms("in", l, NULL);
|
||||||
|
|
@ -1745,25 +1735,22 @@ class CSHARP : public Language {
|
||||||
|
|
||||||
/* Add parameter to proxy function */
|
/* Add parameter to proxy function */
|
||||||
if(gencomma)
|
if(gencomma)
|
||||||
Printf(proxy_class_code, ", ");
|
Printf(function_code, ", ");
|
||||||
Printf(proxy_class_code, "%s %s", param_type, arg);
|
Printf(function_code, "%s %s", param_type, arg);
|
||||||
gencomma = 1;
|
++gencomma;
|
||||||
|
|
||||||
Delete(arg);
|
Delete(arg);
|
||||||
Delete(param_type);
|
Delete(param_type);
|
||||||
p = Getattr(p,"tmap:in:next");
|
p = Getattr(p,"tmap:in:next");
|
||||||
}
|
}
|
||||||
|
|
||||||
Printf(imcall, "), true)");
|
Printf(imcall, ")");
|
||||||
|
|
||||||
Printf(proxy_class_code, ")");
|
Printf(function_code, ")");
|
||||||
Printf(proxy_class_code,"%s", imcall);
|
generateThrowsClause(n, function_code);
|
||||||
generateThrowsClause(n, proxy_class_code);
|
Printv(function_code, " ", typemapLookup("csconstruct", Getattr(n,"name"), WARN_CSHARP_TYPEMAP_CSCONSTRUCT_UNDEF), NIL);
|
||||||
Printf(proxy_class_code, " {\n");
|
Replaceall(function_code, "$imcall", imcall);
|
||||||
Printf(proxy_class_code, " }\n\n");
|
Printv(proxy_class_code, function_code, "\n", NIL);
|
||||||
|
|
||||||
if(!gencomma) // We must have a default constructor
|
|
||||||
have_default_constructor_flag = true;
|
|
||||||
|
|
||||||
Delete(overloaded_name);
|
Delete(overloaded_name);
|
||||||
Delete(imcall);
|
Delete(imcall);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue