pp.c: Eliminate unnecessary dORIGMARK from pp_anonlist
authorFather Chrysostomos <sprout@cpan.org>
Fri, 14 Jun 2013 07:40:23 +0000 (00:40 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 15 Jun 2013 01:13:16 +0000 (18:13 -0700)
This extra protection was added in commit 44a8e56aa0 or d976ac8220
(I’m a little confused as to the history here).

At the time, av_make really could reallocate the stack.  That changed
in commit efaf36747029.

Now there is no need for dORIGMARK and ORIGMARK.  (ORIGMARK is more
expensive than MARK since it looks up PL_stack_base and recalculates
where we are on the stack, based on a recorded offset.  MARK simply
stores a pointer to where we want to be.)

pp.c

index e63c342..def561a 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -4817,10 +4817,10 @@ PP(pp_lslice)
 
 PP(pp_anonlist)
 {
-    dVAR; dSP; dMARK; dORIGMARK;
+    dVAR; dSP; dMARK;
     const I32 items = SP - MARK;
     SV * const av = MUTABLE_SV(av_make(items, MARK+1));
-    SP = ORIGMARK;             /* av_make() might realloc stack_sp */
+    SP = MARK;
     mXPUSHs((PL_op->op_flags & OPf_SPECIAL)
            ? newRV_noinc(av) : av);
     RETURN;