4d4cd5
From b7dedecfdd708c5323addc1b28e16cc727e01980 Mon Sep 17 00:00:00 2001
4d4cd5
From: Olly Betts <olly@survex.com>
4d4cd5
Date: Thu, 18 Mar 2021 10:53:58 +1300
4d4cd5
Subject: [PATCH] php: Fix char* typecheck typemap to accept Null
4d4cd5
4d4cd5
The corresponding in typemap already does.
4d4cd5
4d4cd5
Fixes #1655, reported by CJSlominski.
4d4cd5
---
4d4cd5
 CHANGES.current                                    |  4 ++++
4d4cd5
 Examples/test-suite/overload_polymorphic.i         |  3 +++
4d4cd5
 .../test-suite/php/overload_polymorphic_runme.php  | 14 ++++++++++++++
4d4cd5
 Lib/php/php.swg                                    |  5 ++++-
4d4cd5
 4 files changed, 25 insertions(+), 1 deletion(-)
4d4cd5
 create mode 100644 Examples/test-suite/php/overload_polymorphic_runme.php
4d4cd5
4d4cd5
#diff --git a/CHANGES.current b/CHANGES.current
4d4cd5
#index 58fd05a56..f287e3d60 100644
4d4cd5
#--- a/CHANGES.current
4d4cd5
#+++ b/CHANGES.current
4d4cd5
#@@ -7,6 +7,10 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
4d4cd5
# Version 4.1.0 (in progress)
4d4cd5
# ===========================
4d4cd5
# 
4d4cd5
#+2021-03-18: olly
4d4cd5
#+	    #1655 [PHP] Fix char* typecheck typemap to accept PHP Null like the
4d4cd5
#+	    corresponding in typemap does.
4d4cd5
#+
4d4cd5
# 2021-03-18: olly
4d4cd5
# 	    #1900, #1905 [PHP] Fix wrapping of overloaded directed methods with
4d4cd5
# 	    non-void return.
4d4cd5
diff --git a/Examples/test-suite/overload_polymorphic.i b/Examples/test-suite/overload_polymorphic.i
4d4cd5
index ac004f948..72aabd840 100644
4d4cd5
--- a/Examples/test-suite/overload_polymorphic.i
4d4cd5
+++ b/Examples/test-suite/overload_polymorphic.i
4d4cd5
@@ -23,4 +23,7 @@ class Unknown;
4d4cd5
 int test2(Unknown* unknown) { return 0; }
4d4cd5
 int test2(Base* base) { return 1; }
4d4cd5
 
4d4cd5
+int test3(const char*, const Base* = 0, bool = false) { return 0; }
4d4cd5
+int test3(Base&, const char* = 0, const Base* = 0, bool = false) { return 1; }
4d4cd5
+
4d4cd5
 %}
4d4cd5
diff --git a/Examples/test-suite/php/overload_polymorphic_runme.php b/Examples/test-suite/php/overload_polymorphic_runme.php
4d4cd5
new file mode 100644
4d4cd5
index 000000000..0afe16808
4d4cd5
--- /dev/null
4d4cd5
+++ b/Examples/test-suite/php/overload_polymorphic_runme.php
4d4cd5
@@ -0,0 +1,14 @@
4d4cd5
+
4d4cd5
+
4d4cd5
+require "tests.php";
4d4cd5
+require "overload_polymorphic.php";
4d4cd5
+
4d4cd5
+$t = new Derived();
4d4cd5
+
4d4cd5
+check::equal(overload_polymorphic::test($t), 0, "test(Derived)");
4d4cd5
+check::equal(overload_polymorphic::test(1), 1, "test(1)");
4d4cd5
+check::equal(overload_polymorphic::test2($t), 1, "test2(Derived)");
4d4cd5
+check::equal(overload_polymorphic::test3($t, null, $t), 1, "test3(Derived, null, Derived)");
4d4cd5
+
4d4cd5
+check::done();
4d4cd5
+?>
4d4cd5
diff --git a/Lib/php/php.swg b/Lib/php/php.swg
4d4cd5
index 4eba6be2a..ccfd371ab 100644
4d4cd5
--- a/Lib/php/php.swg
4d4cd5
+++ b/Lib/php/php.swg
4d4cd5
@@ -465,7 +465,10 @@
4d4cd5
 %php_typecheck(double,SWIG_TYPECHECK_DOUBLE,IS_DOUBLE)
4d4cd5
 %php_typecheck(char,SWIG_TYPECHECK_CHAR,IS_STRING)
4d4cd5
 
4d4cd5
-%typemap(typecheck,precedence=SWIG_TYPECHECK_STRING) char *, char *&, char []
4d4cd5
+%typemap(typecheck,precedence=SWIG_TYPECHECK_STRING) char *, char *&
4d4cd5
+ " $1 = (Z_TYPE($input) == IS_STRING || Z_TYPE($input) == IS_NULL); "
4d4cd5
+
4d4cd5
+%typemap(typecheck,precedence=SWIG_TYPECHECK_STRING) char []
4d4cd5
  " $1 = (Z_TYPE($input) == IS_STRING); "
4d4cd5
 
4d4cd5
 %typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE
4d4cd5
-- 
4d4cd5
2.26.3
4d4cd5