diff options
author | Steffen Mueller <smueller@cpan.org> | 2013-05-22 22:03:38 +0200 |
---|---|---|
committer | Steffen Mueller <smueller@cpan.org> | 2013-06-25 08:00:25 +0200 |
commit | b28d84821eb92e2ce828f8792a5199c6163e1358 (patch) | |
tree | eec6ecd6983f14e46ab8cdf60f7975025c654994 | |
parent | cfba0fa69b3193a387b145b99a90822200b459be (diff) | |
download | perl-b28d84821eb92e2ce828f8792a5199c6163e1358.tar.gz |
EU::ParseXS: Simplify output typemap code generation (targetable)
-rw-r--r-- | dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm index 891d18c1e0..5e2dd16065 100644 --- a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm +++ b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm @@ -709,30 +709,26 @@ EOF my $var = 'RETVAL'; my $type = $self->{ret_type}; - if ($trgt and not $trgt->{with_size} and $trgt->{type} eq 'p') { - # PUSHp corresponds to setpvn. Treat setpv directly + if ($trgt) { my $what = $self->eval_output_typemap_code( qq("$trgt->{what}"), {var => $var, type => $self->{ret_type}} ); - - print "\tsv_setpv(TARG, $what); XSprePUSH; PUSHTARG;\n"; - $prepush_done = 1; - } - elsif ($trgt) { - my $what = $self->eval_output_typemap_code( - qq("$trgt->{what}"), - {var => $var, type => $self->{ret_type}} - ); - - my $tsize = $trgt->{what_size}; - $tsize = '' unless defined $tsize; - $tsize = $self->eval_output_typemap_code( - qq("$tsize"), - {var => $var, type => $self->{ret_type}} - ); - print "\tXSprePUSH; PUSH$trgt->{type}($what$tsize);\n"; - $prepush_done = 1; + if (not $trgt->{with_size} and $trgt->{type} eq 'p') { # sv_setpv + # PUSHp corresponds to sv_setpvn. Treat sv_setpv directly + print "\tsv_setpv(TARG, $what); XSprePUSH; PUSHTARG;\n"; + $prepush_done = 1; + } + else { + my $tsize = $trgt->{what_size}; + $tsize = '' unless defined $tsize; + $tsize = $self->eval_output_typemap_code( + qq("$tsize"), + {var => $var, type => $self->{ret_type}} + ); + print "\tXSprePUSH; PUSH$trgt->{type}($what$tsize);\n"; + $prepush_done = 1; + } } else { # RETVAL almost never needs SvSETMAGIC() |