From d8e11c65f67f4b045739b3272eb9c26a8e2379e0 Mon Sep 17 00:00:00 2001 From: Ilya Zakharevich Date: Sat, 2 Aug 2003 23:19:02 -0700 Subject: xsubpp: wrong code Message-ID: <20030803131902.GA5146@math.berkeley.edu> p4raw-id: //depot/perl@20650 --- lib/ExtUtils/xsubpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lib/ExtUtils') diff --git a/lib/ExtUtils/xsubpp b/lib/ExtUtils/xsubpp index 647ffd78b5..7ae8020e25 100755 --- a/lib/ExtUtils/xsubpp +++ b/lib/ExtUtils/xsubpp @@ -1453,7 +1453,11 @@ EOF $xsreturn = 1 if $ret_type ne "void"; my $num = $xsreturn; my $c = @outlist; - print "\tXSprePUSH;" if $c and not $prepush_done; + # (PP)CODE set different values of SP; reset to PPCODE's with 0 output + print "\tXSprePUSH;" if $c and not $prepush_done; + # Take into account stuff already put on stack + print "\t++SP;" if $c and not $prepush_done and $xsreturn; + # Now SP corresponds to ST($xsreturn), so one can combine PUSH and ST() print "\tEXTEND(SP,$c);\n" if $c; $xsreturn += $c; generate_output($var_types{$_}, $num++, $_, 0, 1) for @outlist; -- cgit v1.2.1