php: Fix overloaded directed methods with non-void return
We were treating such methods like constructors and assigning to the internal _cPtr, which just seems bizarrely wrong. Fixes #1900
This commit is contained in:
parent
57cb95318a
commit
2e7da86b2c
4 changed files with 34 additions and 3 deletions
|
|
@ -7,6 +7,10 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
||||||
Version 4.1.0 (in progress)
|
Version 4.1.0 (in progress)
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
|
2021-03-18: olly
|
||||||
|
#1900, #1905 [PHP] Fix wrapping of overloaded directed methods with
|
||||||
|
non-void return.
|
||||||
|
|
||||||
2021-03-11: murillo128
|
2021-03-11: murillo128
|
||||||
#1498 [Javascript] Support type conversion.
|
#1498 [Javascript] Support type conversion.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,5 +47,14 @@ public:
|
||||||
virtual void notover(int *p) const {}
|
virtual void notover(int *p) const {}
|
||||||
};
|
};
|
||||||
|
|
||||||
%}
|
class OverloadedGetSet
|
||||||
|
{
|
||||||
|
int v;
|
||||||
|
public:
|
||||||
|
OverloadedGetSet() : v(42) { }
|
||||||
|
virtual ~OverloadedGetSet() { }
|
||||||
|
virtual int rw() const { return v; }
|
||||||
|
virtual void rw(int new_v) { v = new_v; }
|
||||||
|
};
|
||||||
|
|
||||||
|
%}
|
||||||
|
|
|
||||||
18
Examples/test-suite/php/director_overload_runme.php
Normal file
18
Examples/test-suite/php/director_overload_runme.php
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require "tests.php";
|
||||||
|
require "director_overload.php";
|
||||||
|
|
||||||
|
check::functions(array('new_overloadedClass','new_overloadedPointers','new_overloadedGetSet','overloadedclass_method1','overloadedclass_method3','overloadedclass_method2','overloadedpointers_method','overloadedpointers_notover','overloadedgetset_rw'));
|
||||||
|
|
||||||
|
check::classes(array('OverloadedClass','OverloadedPointers','OverloadedGetSet'));
|
||||||
|
check::globals(array());
|
||||||
|
|
||||||
|
$o = new OverloadedGetSet;
|
||||||
|
check::equal($o->rw(), 42, "get_set() initial value not 42");
|
||||||
|
check::equal($o->rw(7), null, "get_set() failed to set");
|
||||||
|
check::equal($o->rw(), 7, "get_set() didn't return back set value");
|
||||||
|
|
||||||
|
check::done();
|
||||||
|
?>
|
||||||
|
|
@ -1566,7 +1566,7 @@ public:
|
||||||
Printf(prepare, "case %d: ", ++last_handled_i);
|
Printf(prepare, "case %d: ", ++last_handled_i);
|
||||||
}
|
}
|
||||||
if (non_void_return) {
|
if (non_void_return) {
|
||||||
if ((!directorsEnabled() || !Swig_directorclass(n)) && !constructor) {
|
if (!constructor) {
|
||||||
Append(prepare, "$r=");
|
Append(prepare, "$r=");
|
||||||
} else if (wrapperType == staticmemberfn || wrapperType == staticmembervar) {
|
} else if (wrapperType == staticmemberfn || wrapperType == staticmembervar) {
|
||||||
Append(prepare, "$r=");
|
Append(prepare, "$r=");
|
||||||
|
|
@ -1590,7 +1590,7 @@ public:
|
||||||
if (had_a_case)
|
if (had_a_case)
|
||||||
Printf(prepare, "default: ");
|
Printf(prepare, "default: ");
|
||||||
if (non_void_return) {
|
if (non_void_return) {
|
||||||
if ((!directorsEnabled() || !Swig_directorclass(n)) && !constructor) {
|
if (!constructor) {
|
||||||
Append(prepare, "$r=");
|
Append(prepare, "$r=");
|
||||||
} else if (wrapperType == staticmemberfn || wrapperType == staticmembervar) {
|
} else if (wrapperType == staticmemberfn || wrapperType == staticmembervar) {
|
||||||
Append(prepare, "$r=");
|
Append(prepare, "$r=");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue