Better control on what the C# base class is (overriding the real C++ base class with the csbase 'replace' typemap attribute)

Reorganise the code that implements namespaces


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@9447 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2006-10-13 23:47:01 +00:00
commit dcd38c5f02

View file

@ -400,8 +400,7 @@ class CSHARP : public Language {
// Start writing out the intermediary class file // Start writing out the intermediary class file
emitBanner(f_im); emitBanner(f_im);
if(Len(namespce) > 0) addOpenNamespace(namespce, f_im);
Printf(f_im, "namespace %s {\n", namespce);
if(imclass_imports) if(imclass_imports)
Printf(f_im, "%s\n", imclass_imports); Printf(f_im, "%s\n", imclass_imports);
@ -425,7 +424,8 @@ class CSHARP : public Language {
// Finish off the class // Finish off the class
Printf(f_im, "}\n"); Printf(f_im, "}\n");
Printf(f_im, Len(namespce) > 0 ? "\n}\n" : ""); addCloseNamespace(namespce, f_im);
Close(f_im); Close(f_im);
} }
@ -443,8 +443,7 @@ class CSHARP : public Language {
// Start writing out the module class file // Start writing out the module class file
emitBanner(f_module); emitBanner(f_module);
if(Len(namespce) > 0) addOpenNamespace(namespce, f_module);
Printf(f_module, "namespace %s {\n", namespce);
if(module_imports) if(module_imports)
Printf(f_module, "%s\n", module_imports); Printf(f_module, "%s\n", module_imports);
@ -476,7 +475,7 @@ class CSHARP : public Language {
// Finish off the class // Finish off the class
Printf(f_module, "}\n"); Printf(f_module, "}\n");
Printf(f_module, Len(namespce) > 0 ? "\n}\n" : ""); addCloseNamespace(namespce, f_module);
Close(f_module); Close(f_module);
} }
@ -1142,8 +1141,7 @@ class CSHARP : public Language {
// Start writing out the enum file // Start writing out the enum file
emitBanner(f_enum); emitBanner(f_enum);
if(Len(namespce) > 0) addOpenNamespace(namespce, f_enum);
Printf(f_enum, "namespace %s {\n", namespce);
Printv(f_enum, Printv(f_enum,
typemapLookup("csimports", typemap_lookup_type, WARN_NONE), // Import statements typemapLookup("csimports", typemap_lookup_type, WARN_NONE), // Import statements
@ -1152,7 +1150,8 @@ class CSHARP : public Language {
"\n", "\n",
NIL); NIL);
Printf(f_enum, Len(namespce) > 0 ? "\n}\n" : ""); addCloseNamespace(namespce, f_enum);
Close(f_enum); Close(f_enum);
} }
} else { } else {
@ -1498,11 +1497,17 @@ class CSHARP : public Language {
baseclass = NewString(""); baseclass = NewString("");
// Inheritance from pure C# classes // Inheritance from pure C# classes
const String *pure_baseclass = typemapLookup("csbase", typemap_lookup_type, WARN_NONE); Node *attributes = NewHash();
const String *pure_baseclass = typemapLookup("csbase", typemap_lookup_type, WARN_NONE, attributes);
if (Len(pure_baseclass) > 0 && Len(baseclass) > 0) { if (Len(pure_baseclass) > 0 && Len(baseclass) > 0) {
Swig_warning(WARN_CSHARP_MULTIPLE_INHERITANCE, input_file, line_number, if (GetFlag(attributes, "tmap:csbase:replace")) {
"Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in C#.\n", typemap_lookup_type, pure_baseclass); Delete(baseclass);
pure_baseclass = empty_string; baseclass = NewString("");
} else {
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, pure_baseclass);
pure_baseclass = empty_string;
}
} }
// Pure C# interfaces // Pure C# interfaces
@ -1540,7 +1545,7 @@ class CSHARP : public Language {
// 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("");
const String *tm = NULL; const String *tm = NULL;
Node *attributes = NewHash(); attributes = NewHash();
String *destruct_methodname = NULL; String *destruct_methodname = NULL;
String *destruct_methodmodifiers = NULL; String *destruct_methodmodifiers = NULL;
if (derived) { if (derived) {
@ -1725,8 +1730,7 @@ class CSHARP : public Language {
// Start writing out the proxy class file // Start writing out the proxy class file
emitBanner(f_proxy); emitBanner(f_proxy);
if(Len(namespce) > 0) addOpenNamespace(namespce, f_proxy);
Printf(f_proxy, "namespace %s {\n", namespce);
Clear(proxy_class_def); Clear(proxy_class_def);
Clear(proxy_class_code); Clear(proxy_class_code);
@ -1758,7 +1762,7 @@ class CSHARP : public Language {
Printv(f_proxy, proxy_class_constants_code, NIL); Printv(f_proxy, proxy_class_constants_code, NIL);
Printf(f_proxy, "}\n"); Printf(f_proxy, "}\n");
Printf(f_proxy, Len(namespce) > 0 ? "\n}\n" : ""); addCloseNamespace(namespce, f_proxy);
Close(f_proxy); Close(f_proxy);
f_proxy = NULL; f_proxy = NULL;
@ -2749,8 +2753,7 @@ class CSHARP : public Language {
// Start writing out the type wrapper class file // Start writing out the type wrapper class file
emitBanner(f_swigtype); emitBanner(f_swigtype);
if(Len(namespce) > 0) addOpenNamespace(namespce, f_swigtype);
Printf(f_swigtype, "namespace %s {\n", namespce);
// Pure C# baseclass and interfaces // Pure C# baseclass and interfaces
const String *pure_baseclass = typemapLookup("csbase", type, WARN_NONE); const String *pure_baseclass = typemapLookup("csbase", type, WARN_NONE);
@ -2782,15 +2785,15 @@ class CSHARP : public Language {
typemapLookup("csbody", type, WARN_CSHARP_TYPEMAP_CSBODY_UNDEF), // main body of class typemapLookup("csbody", type, WARN_CSHARP_TYPEMAP_CSBODY_UNDEF), // main body of class
typemapLookup("cscode", type, WARN_NONE), // extra C# code typemapLookup("cscode", type, WARN_NONE), // extra C# code
"}\n", "}\n",
Len(namespce) > 0 ?
"\n}\n" :
"",
NIL); NIL);
Replaceall(swigtype, "$csclassname", classname); Replaceall(swigtype, "$csclassname", classname);
Replaceall(swigtype, "$module", module_class_name); Replaceall(swigtype, "$module", module_class_name);
Replaceall(swigtype, "$imclassname", imclass_name); Replaceall(swigtype, "$imclassname", imclass_name);
Replaceall(swigtype, "$dllimport", dllimport); Replaceall(swigtype, "$dllimport", dllimport);
addCloseNamespace(namespce, f_swigtype);
Printv(f_swigtype, swigtype, NIL); Printv(f_swigtype, swigtype, NIL);
Close(f_swigtype); Close(f_swigtype);
@ -2864,6 +2867,26 @@ class CSHARP : public Language {
Delete(excode_attribute); Delete(excode_attribute);
} }
/* -----------------------------------------------------------------------------
* addOpenNamespace()
* ----------------------------------------------------------------------------- */
void addOpenNamespace(String *namspace, File *file) {
if (namspace)
if(Len(namspace) > 0)
Printf(file, "namespace %s {\n", namspace);
}
/* -----------------------------------------------------------------------------
* addCloseNamespace()
* ----------------------------------------------------------------------------- */
void addCloseNamespace(String *namspace, File *file) {
if (namspace)
if(Len(namspace) > 0)
Printf(file, "\n}\n");
}
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
* Start of director methods * Start of director methods
*--------------------------------------------------------------------*/ *--------------------------------------------------------------------*/