This is a live mirror of the Perl 5 development currently hosted at
https://github.com/perl/perl5
https://perl5.git.perl.org
/
perl5.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
In Perl_ck_lengthconst, "XXX length optimization goes here" is TODO.
[perl5.git]
/
scope.c
diff --git
a/scope.c
b/scope.c
index
c8f190f
..
fae4892
100644
(file)
--- a/
scope.c
+++ b/
scope.c
@@
-412,15
+412,15
@@
Perl_save_sptr(pTHX_ SV **sptr)
}
void
}
void
-Perl_save_padsv(pTHX_ PADOFFSET off)
+Perl_save_padsv
_and_mortalize
(pTHX_ PADOFFSET off)
{
dVAR;
SSCHECK(4);
ASSERT_CURPAD_ACTIVE("save_padsv");
{
dVAR;
SSCHECK(4);
ASSERT_CURPAD_ACTIVE("save_padsv");
- SSPUSHPTR(
PL_curpad[off]
);
+ SSPUSHPTR(
SvREFCNT_inc_simple_NN(PL_curpad[off])
);
SSPUSHPTR(PL_comppad);
SSPUSHLONG((long)off);
SSPUSHPTR(PL_comppad);
SSPUSHLONG((long)off);
- SSPUSHINT(SAVEt_PADSV);
+ SSPUSHINT(SAVEt_PADSV
_AND_MORTALIZE
);
}
void
}
void
@@
-929,12
+929,18
@@
Perl_leave_scope(pTHX_ I32 base)
else
PL_curpad = NULL;
break;
else
PL_curpad = NULL;
break;
- case SAVEt_PADSV:
+ case SAVEt_PADSV
_AND_MORTALIZE
:
{
const PADOFFSET off = (PADOFFSET)SSPOPLONG;
{
const PADOFFSET off = (PADOFFSET)SSPOPLONG;
+ SV **svp;
ptr = SSPOPPTR;
ptr = SSPOPPTR;
- if (ptr)
- AvARRAY((PAD*)ptr)[off] = (SV*)SSPOPPTR;
+ assert (ptr);
+ svp = AvARRAY((PAD*)ptr) + off;
+ /* This mortalizing used to be done by POPLOOP() via itersave.
+ But as we have all the information here, we can do it here,
+ save even having to have itersave in the struct. */
+ sv_2mortal(*svp);
+ *svp = (SV*)SSPOPPTR;
}
break;
case SAVEt_SAVESWITCHSTACK:
}
break;
case SAVEt_SAVESWITCHSTACK:
@@
-1084,7
+1090,7
@@
Perl_cx_dump(pTHX_ PERL_CONTEXT *cx)
break;
case CXt_LOOP_LAZYIV:
break;
case CXt_LOOP_LAZYIV:
- case CXt_LOOP_
STACK
:
+ case CXt_LOOP_
LAZYSV
:
case CXt_LOOP_FOR:
case CXt_LOOP_PLAIN:
PerlIO_printf(Perl_debug_log, "BLK_LOOP.LABEL = %s\n", CxLABEL(cx));
case CXt_LOOP_FOR:
case CXt_LOOP_PLAIN:
PerlIO_printf(Perl_debug_log, "BLK_LOOP.LABEL = %s\n", CxLABEL(cx));
@@
-1094,17
+1100,13
@@
Perl_cx_dump(pTHX_ PERL_CONTEXT *cx)
PTR2UV(cx->blk_loop.my_op));
PerlIO_printf(Perl_debug_log, "BLK_LOOP.NEXT_OP = 0x%"UVxf"\n",
PTR2UV(CX_LOOP_NEXTOP_GET(cx)));
PTR2UV(cx->blk_loop.my_op));
PerlIO_printf(Perl_debug_log, "BLK_LOOP.NEXT_OP = 0x%"UVxf"\n",
PTR2UV(CX_LOOP_NEXTOP_GET(cx)));
- PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERIX = %ld\n",
- (long)cx->blk_loop.iterix);
+ /* XXX: not accurate for LAZYSV/IV */
PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERARY = 0x%"UVxf"\n",
PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERARY = 0x%"UVxf"\n",
- PTR2UV(cx->blk_loop.iterary));
+ PTR2UV(cx->blk_loop.state_u.ary.ary));
+ PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERIX = %ld\n",
+ (long)cx->blk_loop.state_u.ary.ix);
PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERVAR = 0x%"UVxf"\n",
PTR2UV(CxITERVAR(cx)));
PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERVAR = 0x%"UVxf"\n",
PTR2UV(CxITERVAR(cx)));
- if (CxITERVAR(cx))
- PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERSAVE = 0x%"UVxf"\n",
- PTR2UV(cx->blk_loop.itersave));
- PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERLVAL = 0x%"UVxf"\n",
- PTR2UV(cx->blk_loop.iterlval));
break;
case CXt_SUBST:
break;
case CXt_SUBST: