]> git.vpit.fr Git - perl/modules/autovivification.git/commitdiff
Reset the original pp whenever possible in pp_rv2xv
authorVincent Pit <vince@profvince.com>
Thu, 18 Jun 2009 15:41:20 +0000 (17:41 +0200)
committerVincent Pit <vince@profvince.com>
Thu, 18 Jun 2009 15:41:20 +0000 (17:41 +0200)
autovivification.xs

index a2377592246a4b41e7fa013e6e3e199410de863b..8933e7a6e6ffcb1933199af528b4a75a3b4d34bf 100644 (file)
@@ -272,7 +272,9 @@ STATIC OP *a_pp_rv2av(pTHX) {
 
  a_map_fetch(PL_op, &oi);
 
- if (PL_op != oi.root && !SvOK(TOPs)) {
+ if (PL_op == oi.root) { /* This means "@$arrayref" */
+  PL_op->op_ppaddr = oi.old_pp;
+ } else if (!SvOK(TOPs)) {
   /* We always need to push an empty array to fool the pp_aelem() that comes
    * later. */
   SV *av;
@@ -294,7 +296,9 @@ STATIC OP *a_pp_rv2hv(pTHX) {
 
  a_map_fetch(PL_op, &oi);
 
- if (PL_op != oi.root && !SvOK(TOPs)) {
+ if (PL_op == oi.root) { /* This means "%$hashref" */
+  PL_op->op_ppaddr = oi.old_pp;
+ } else if (!SvOK(TOPs)) {
   if (oi.root->op_flags & OPf_MOD) {
    SV *hv;
    POPs;