summaryrefslogtreecommitdiff
path: root/pp_hot.c
diff options
context:
space:
mode:
authorDavid Mitchell <davem@iabyn.com>2012-11-13 12:20:34 +0000
committerDavid Mitchell <davem@iabyn.com>2012-11-15 22:41:07 +0000
commitf38aa8823d6f75da1eeeebd5c4c9f451838bc770 (patch)
tree921afbc7463d5d5581a82636535946ea76d9a241 /pp_hot.c
parenta8a20bb606d6f1faffb9dd19f02579f3ce642620 (diff)
downloadperl-f38aa8823d6f75da1eeeebd5c4c9f451838bc770.tar.gz
pp_iter: a bit more refactoring of CXt_LOOP_FOR branch
Diffstat (limited to 'pp_hot.c')
-rw-r--r--pp_hot.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/pp_hot.c b/pp_hot.c
index 38a5d4f351..538c1218c5 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -1996,23 +1996,23 @@ PP(pp_iter)
sv = AvARRAY(av)[ix];
}
- if (sv && SvIS_FREED(sv)) {
- *itersvp = NULL;
- Perl_croak(aTHX_ "Use of freed value in iteration");
- }
-
if (sv) {
+ if (SvIS_FREED(sv)) {
+ *itersvp = NULL;
+ Perl_croak(aTHX_ "Use of freed value in iteration");
+ }
SvTEMP_off(sv);
SvREFCNT_inc_simple_void_NN(sv);
}
else
sv = &PL_sv_undef;
+
if (!av_is_stack && sv == &PL_sv_undef) {
SV *lv = newSV_type(SVt_PVLV);
LvTYPE(lv) = 'y';
sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
LvTARG(lv) = SvREFCNT_inc_simple(av);
- LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
+ LvTARGOFF(lv) = ix;
LvTARGLEN(lv) = (STRLEN)UV_MAX;
sv = lv;
}