when the output isn't RETVAL, update the SV instead of replacing it
authorTony Cook <tony@develop-help.com>
Wed, 19 Dec 2012 22:10:01 +0000 (09:10 +1100)
committerTony Cook <tony@develop-help.com>
Wed, 19 Dec 2012 22:31:31 +0000 (09:31 +1100)
Previously OUTPUT argument parameters would replace ST(n) instead of
updating it, this meant that the caller's supplied value would not be
updated.

This change means that OUTPUT T_BOOL arguments called RETVAL won't be
handled correctly, but since the OUTPUT didn't work previously for
*any* case, this is a net improvement.

ext/XS-Typemap/t/Typemap.t
lib/ExtUtils/typemap

index 91daa20..0717801 100644 (file)
@@ -152,7 +152,6 @@ ok( ! T_BOOL(undef) );
 
 {
   # these attempt to modify a read-only value
-  local $TODO = "attempts to modify a read-only value should crash";
   ok( !eval { T_BOOL_2(52); 1 } );
   ok( !eval { T_BOOL_2(0); 1 } );
   ok( !eval { T_BOOL_2(''); 1 } );
@@ -160,7 +159,6 @@ ok( ! T_BOOL(undef) );
 }
 
 {
-    local $TODO = "Output parameters for T_BOOL don't work";
     my ($in, $out);
     $in = 1;
     T_BOOL_OUT($out, $in);
index 0fa14fb..874bc16 100644 (file)
@@ -328,7 +328,7 @@ T_SYSRET
 T_ENUM
        sv_setiv($arg, (IV)$var);
 T_BOOL
-       $arg = boolSV($var);
+       ${"$var" eq "RETVAL" ? \"$arg = boolSV($var);" : \"sv_setsv($arg, boolSV($var));"}
 T_U_INT
        sv_setuv($arg, (UV)$var);
 T_SHORT