From 5cb227a47aa19f917f1af288df24a2aa034789b7 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Thu, 6 Aug 2009 12:55:28 +0200 Subject: [PATCH] PHP: fix for the overload_rename testcase Previously we just had two __construct function which resulted in a parse error. Now we create a new factory method for the renamed ctor. --- Examples/test-suite/php/overload_rename_runme.php | 19 +++++++++++++++++++ Source/Modules/php.cxx | 14 ++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 Examples/test-suite/php/overload_rename_runme.php diff --git a/Examples/test-suite/php/overload_rename_runme.php b/Examples/test-suite/php/overload_rename_runme.php new file mode 100644 index 0000000..dce4c6c --- /dev/null +++ b/Examples/test-suite/php/overload_rename_runme.php @@ -0,0 +1,19 @@ + diff --git a/Source/Modules/php.cxx b/Source/Modules/php.cxx index 0591d97..84024ea 100644 --- a/Source/Modules/php.cxx +++ b/Source/Modules/php.cxx @@ -1026,7 +1026,13 @@ public: String *output = s_oowrappers; if (constructor) { class_has_ctor = true; - methodname = "__construct"; + if (strcmp(GetChar(n, "name"), GetChar(n, "constructorHandler:sym:name")) == 0) { + methodname = "__construct"; + } else { + // The class has multiple constructors and this one is + // renamed, so this will be a static factory function + methodname = GetChar(n, "constructorHandler:sym:name"); + } } else if (wrapperType == memberfn) { methodname = Char(Getattr(n, "memberfunctionHandler:sym:name")); } else if (wrapperType == staticmemberfn) { @@ -1585,7 +1591,11 @@ public: Printf(output, "%s", prepare); if (constructor) { if (!directorsEnabled() || !Swig_directorclass(n)) { - Printf(output, "\t\t$this->%s=%s;\n", SWIG_PTR, invoke); + if (strcmp(methodname, "__construct") == 0) { + Printf(output, "\t\t$this->%s=%s;\n", SWIG_PTR, invoke); + } else { + Printf(output, "\t\treturn new %s(%s);\n", "Foo", invoke); + } } else { Node *parent = Swig_methodclass(n); String *classname = Swig_class_name(parent); -- 1.6.3.3