[PHP] Fix handling of OUTPUT typemaps (Patch from Ryan in SF#3058394).

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12208 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Olly Betts 2010-09-08 02:40:56 +00:00
commit a25ccbf58b
3 changed files with 20 additions and 13 deletions

View file

@ -5,6 +5,9 @@ See the RELEASENOTES file for a summary of changes in each release.
Version 2.0.1 (in progress) Version 2.0.1 (in progress)
=========================== ===========================
2010-09-08: olly
[PHP] Fix handling of OUTPUT typemaps (Patch from Ryan in SF#3058394).
2010-09-03: wsfulton 2010-09-03: wsfulton
Fix erroneous line numbers in error messages for macro expansions, for example, Fix erroneous line numbers in error messages for macro expansions, for example,
the error message now points to instantation of the macro, ie the last line here: the error message now points to instantation of the macro, ie the last line here:

View file

@ -6,40 +6,42 @@
print "Testing the pointer library\n"; print "Testing the pointer library\n";
$a = new_intp(); $a = example::new_intp();
$b = new_intp(); $b = example::new_intp();
$c = new_intp(); $c = example::new_intp();
intp_assign($a,37); example::intp_assign($a,37);
intp_assign($b,42); example::intp_assign($b,42);
print " a = $a\n"; print " a = $a\n";
print " b = $b\n"; print " b = $b\n";
print " c = $c\n"; print " c = $c\n";
# Call the add() function wuth some pointers # Call the add() function wuth some pointers
add($a,$b,$c); example::add($a,$b,$c);
# Now get the result # Now get the result
$r = intp_value($c); $r = example::intp_value($c);
print " 37 + 42 = $r\n"; print " 37 + 42 = $r\n";
# Clean up the pointers # Clean up the pointers
delete_intp($a); example::delete_intp($a);
delete_intp($b); example::delete_intp($b);
delete_intp($c); example::delete_intp($c);
# Now try the typemap library # Now try the typemap library
# This should be much easier. Now how it is no longer # This should be much easier. Now how it is no longer
# necessary to manufacture pointers. # necessary to manufacture pointers.
print "Trying the typemap library\n"; print "Trying the typemap library\n";
$r = sub(37,42); $r = example::sub(37,42);
print " 37 - 42 = $r\n"; print " 37 - 42 = $r\n";
# Now try the version with multiple return values # Now try the version with multiple return values
# print "Testing multiple return values\n"; # print "Testing multiple return values\n";
# ($q,$r) = divide(42,37); # $a = example::divide(42,37);
# $q = $a[0]
# $r = $a[1]
# print " 42/37 = $q remainder $r\n"; # print " 42/37 = $q remainder $r\n";
?> ?>

View file

@ -915,8 +915,10 @@ public:
} }
/* Insert argument output code */ /* Insert argument output code */
bool hasargout = false;
for (i = 0, p = l; p; i++) { for (i = 0, p = l; p; i++) {
if ((tm = Getattr(p, "tmap:argout"))) { if ((tm = Getattr(p, "tmap:argout"))) {
hasargout = true;
Replaceall(tm, "$source", Getattr(p, "lname")); Replaceall(tm, "$source", Getattr(p, "lname"));
// Replaceall(tm,"$input",Getattr(p,"lname")); // Replaceall(tm,"$input",Getattr(p,"lname"));
Replaceall(tm, "$target", "return_value"); Replaceall(tm, "$target", "return_value");
@ -1663,7 +1665,7 @@ public:
} }
} }
Printf(output, "%s", prepare); Printf(output, "%s", prepare);
} else if (Cmp(d, "void") == 0) { } else if (Cmp(d, "void") == 0 && !hasargout) {
if (Cmp(invoke, "$r") != 0) if (Cmp(invoke, "$r") != 0)
Printf(output, "\t\t%s;\n", invoke); Printf(output, "\t\t%s;\n", invoke);
} else if (is_class(d)) { } else if (is_class(d)) {