diff options
author | Nicholas Clark <nick@ccl4.org> | 2010-12-27 11:41:10 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2010-12-27 11:41:10 +0000 |
commit | fa54efaecf052db2a7799ec4c2433eeb1576402e (patch) | |
tree | 3867f9cf190015546695148d265fe7b9c2ca50e0 | |
parent | fc51b17cb579e8cdaf6e99fdeb80f92379491759 (diff) | |
download | perl-fa54efaecf052db2a7799ec4c2433eeb1576402e.tar.gz |
Merge the opcode bodies for chop/chomp and schop/schomp.
-rw-r--r-- | mathoms.c | 10 | ||||
-rw-r--r-- | opcode.h | 8 | ||||
-rw-r--r-- | pp.c | 31 | ||||
-rwxr-xr-x | regen/opcode.pl | 2 |
4 files changed, 25 insertions, 26 deletions
@@ -1123,6 +1123,16 @@ PP(pp_rv2hv) return Perl_pp_rv2av(aTHX); } +PP(pp_schomp) +{ + return Perl_pp_chomp(aTHX); +} + +PP(pp_chomp) +{ + return Perl_pp_chop(aTHX); +} + U8 * Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv) { @@ -834,10 +834,10 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */ Perl_pp_trans, /* Perl_pp_trans */ Perl_pp_sassign, Perl_pp_aassign, - Perl_pp_chop, - Perl_pp_schop, - Perl_pp_chomp, - Perl_pp_schomp, + Perl_pp_chop, /* Perl_pp_chop */ + Perl_pp_schop, /* Perl_pp_schop */ + Perl_pp_chop, /* Perl_pp_chomp */ + Perl_pp_schop, /* Perl_pp_schomp */ Perl_pp_defined, Perl_pp_undef, Perl_pp_study, @@ -794,7 +794,11 @@ PP(pp_trans) PP(pp_schop) { dVAR; dSP; dTARGET; - do_chomp(TARG, TOPs, FALSE); + const bool chomping = PL_op->op_type == OP_SCHOMP; + + if (chomping) + sv_setiv(TARG, 0); + do_chomp(TARG, TOPs, chomping); SETTARG; RETURN; } @@ -802,29 +806,12 @@ PP(pp_schop) PP(pp_chop) { dVAR; dSP; dMARK; dTARGET; dORIGMARK; - while (MARK < SP) - do_chomp(TARG, *++MARK, FALSE); - SP = ORIGMARK; - XPUSHTARG; - RETURN; -} + const bool chomping = PL_op->op_type == OP_CHOMP; -PP(pp_schomp) -{ - dVAR; dSP; dTARGET; - sv_setiv(TARG, 0); - do_chomp(TARG, TOPs, TRUE); - SETs(TARG); - RETURN; -} - -PP(pp_chomp) -{ - dVAR; dSP; dMARK; dTARGET; dORIGMARK; - - sv_setiv(TARG, 0); + if (chomping) + sv_setiv(TARG, 0); while (MARK < SP) - do_chomp(TARG, *++MARK, TRUE); + do_chomp(TARG, *++MARK, chomping); SP = ORIGMARK; XPUSHTARG; RETURN; diff --git a/regen/opcode.pl b/regen/opcode.pl index fe923edd37..4b6bb92306 100755 --- a/regen/opcode.pl +++ b/regen/opcode.pl @@ -108,6 +108,8 @@ my @raw_alias = ( Perl_pp_akeys => ['avalues'], Perl_pp_rkeys => [qw(rvalues reach)], Perl_pp_trans => [qw(trans transr)], + Perl_pp_chop => [qw(chop chomp)], + Perl_pp_schop => [qw(schop schomp)], ); while (my ($func, $names) = splice @raw_alias, 0, 2) { |