diff options
author | Brant K. Kyser <brantkyser@gmail.com> | 2013-01-05 05:25:33 -0600 |
---|---|---|
committer | Brant K. Kyser <brantkyser@gmail.com> | 2013-01-05 05:25:33 -0600 |
commit | c62cd63f713aeeda9dd938a3dc1311f8d2f14e06 (patch) | |
tree | 179f6ba4615da724b6ac30c1298851803d139eac | |
parent | b005c68009b51f521f2d469eb557164cb657bc8f (diff) | |
download | swig-c62cd63f713aeeda9dd938a3dc1311f8d2f14e06.tar.gz |
Patch for SourceForge Bug #1299 broke D and C#. Update C# module to reflect these changes.
-rw-r--r-- | Source/Modules/csharp.cxx | 45 |
1 files changed, 15 insertions, 30 deletions
diff --git a/Source/Modules/csharp.cxx b/Source/Modules/csharp.cxx index c54475029..d78253f1a 100644 --- a/Source/Modules/csharp.cxx +++ b/Source/Modules/csharp.cxx @@ -198,24 +198,6 @@ public: return proxyname; } - /* ----------------------------------------------------------------------------- - * directorClassName() - * ----------------------------------------------------------------------------- */ - - String *directorClassName(Node *n) { - String *dirclassname; - const char *attrib = "director:classname"; - - if (!(dirclassname = Getattr(n, attrib))) { - String *classname = Getattr(n, "sym:name"); - - dirclassname = NewStringf("SwigDirector_%s", classname); - Setattr(n, attrib, dirclassname); - } - - return dirclassname; - } - /* ------------------------------------------------------------ * main() * ------------------------------------------------------------ */ @@ -3407,6 +3389,7 @@ public: String *sym_name = Getattr(n, "sym:name"); String *qualified_classname = Copy(sym_name); String *nspace = getNSpace(); + String *dirClassName = directorClassName(n); if (nspace) Insert(qualified_classname, 0, NewStringf("%s.", nspace)); @@ -3418,7 +3401,7 @@ public: Printf(code_wrap->def, "SWIGEXPORT void SWIGSTDCALL %s(void *objarg", wname); Printf(code_wrap->code, " %s *obj = (%s *)objarg;\n", norm_name, norm_name); - Printf(code_wrap->code, " SwigDirector_%s *director = dynamic_cast<SwigDirector_%s *>(obj);\n", sym_name, sym_name); + Printf(code_wrap->code, " %s *director = dynamic_cast<%s *>(obj);\n", dirClassName, dirClassName); // TODO: if statement not needed?? - Java too Printf(code_wrap->code, " if (director) {\n"); Printf(code_wrap->code, " director->swig_connect_director("); @@ -3430,7 +3413,7 @@ public: Printf(code_wrap->def, ", "); if (i != first_class_dmethod) Printf(code_wrap->code, ", "); - Printf(code_wrap->def, "SwigDirector_%s::SWIG_Callback%s_t callback%s", sym_name, methid, methid); + Printf(code_wrap->def, "%s::SWIG_Callback%s_t callback%s", dirClassName, methid, methid); Printf(code_wrap->code, "callback%s", methid); Printf(imclass_class_code, ", %s.SwigDelegate%s_%s delegate%s", qualified_classname, sym_name, methid, methid); } @@ -3447,6 +3430,7 @@ public: Delete(wname); Delete(swig_director_connect); Delete(qualified_classname); + Delete(dirClassName); } /* --------------------------------------------------------------- @@ -3962,15 +3946,15 @@ public: * ------------------------------------------------------------ */ int classDirectorDefaultConstructor(Node *n) { - String *classname = Swig_class_name(n); + String *classname = directorClassName(n); String *classtype = SwigType_namestr(Getattr(n, "name")); Wrapper *w = NewWrapper(); - Printf(w->def, "SwigDirector_%s::SwigDirector_%s() : %s {", classname, classname, Getattr(n, "director:ctor")); + Printf(w->def, "%s::%s() : %s {", classname, classname, Getattr(n, "director:ctor")); Printf(w->code, "}\n"); Wrapper_print(w, f_directors); - Printf(f_directors_h, " SwigDirector_%s();\n", classname); + Printf(f_directors_h, " %s();\n", classname); DelWrapper(w); Delete(classtype); Delete(classname); @@ -4014,15 +3998,15 @@ public: int classDirectorDestructor(Node *n) { Node *current_class = getCurrentClass(); - String *classname = Swig_class_name(current_class); + String *classname = directorClassName(current_class); Wrapper *w = NewWrapper(); if (Getattr(n, "throw")) { - Printf(f_directors_h, " virtual ~SwigDirector_%s() throw ();\n", classname); - Printf(w->def, "SwigDirector_%s::~SwigDirector_%s() throw () {\n", classname, classname); + Printf(f_directors_h, " virtual ~%s() throw ();\n", classname); + Printf(w->def, "%s::~%s() throw () {\n", classname, classname); } else { - Printf(f_directors_h, " virtual ~SwigDirector_%s();\n", classname); - Printf(w->def, "SwigDirector_%s::~SwigDirector_%s() {\n", classname, classname); + Printf(f_directors_h, " virtual ~%s();\n", classname); + Printf(w->def, "%s::~%s() {\n", classname, classname); } Printv(w->code, "}\n", NIL); @@ -4120,8 +4104,7 @@ public: String *base = Getattr(n, "classtype"); String *class_ctor = NewString("Swig::Director()"); - String *classname = Swig_class_name(n); - String *directorname = NewStringf("SwigDirector_%s", classname); + String *directorname = directorClassName(n); String *declaration = Swig_class_declaration(n, directorname); Printf(declaration, " : public %s, public Swig::Director", base); @@ -4129,6 +4112,8 @@ public: // Stash stuff for later. Setattr(n, "director:decl", declaration); Setattr(n, "director:ctor", class_ctor); + + Delete(directorname); } }; /* class CSHARP */ |