summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mathoms.c10
-rw-r--r--opcode.h8
-rw-r--r--pp.c31
-rwxr-xr-xregen/opcode.pl2
4 files changed, 25 insertions, 26 deletions
diff --git a/mathoms.c b/mathoms.c
index 32f3215de5..c648833ca6 100644
--- a/mathoms.c
+++ b/mathoms.c
@@ -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)
{
diff --git a/opcode.h b/opcode.h
index e5454ff0a4..5895b8f5fd 100644
--- a/opcode.h
+++ b/opcode.h
@@ -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,
diff --git a/pp.c b/pp.c
index 573672d54e..1e2c79f5ed 100644
--- a/pp.c
+++ b/pp.c
@@ -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) {