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
Finalise perldelta
[perl5.git]
/
scope.c
diff --git
a/scope.c
b/scope.c
index
2464590
..
38eea2f
100644
(file)
--- a/
scope.c
+++ b/
scope.c
@@
-27,7
+27,7
@@
#include "perl.h"
SV**
#include "perl.h"
SV**
-Perl_stack_grow(pTHX_ SV **sp, SV **p,
in
t n)
+Perl_stack_grow(pTHX_ SV **sp, SV **p,
SSize_
t n)
{
dVAR;
{
dVAR;
@@
-141,7
+141,7
@@
Perl_savestack_grow_cnt(pTHX_ I32 need)
#undef GROW
void
#undef GROW
void
-Perl_tmps_grow(pTHX_
I32
n)
+Perl_tmps_grow(pTHX_
SSize_t
n)
{
dVAR;
#ifndef STRESS_REALLOC
{
dVAR;
#ifndef STRESS_REALLOC
@@
-158,7
+158,7
@@
Perl_free_tmps(pTHX)
{
dVAR;
/* XXX should tmps_floor live in cxstack? */
{
dVAR;
/* XXX should tmps_floor live in cxstack? */
- const
I32
myfloor = PL_tmps_floor;
+ const
SSize_t
myfloor = PL_tmps_floor;
while (PL_tmps_ix > myfloor) { /* clean up after last statement */
SV* const sv = PL_tmps_stack[PL_tmps_ix--];
#ifdef PERL_POISON
while (PL_tmps_ix > myfloor) { /* clean up after last statement */
SV* const sv = PL_tmps_stack[PL_tmps_ix--];
#ifdef PERL_POISON
@@
-457,6
+457,20
@@
Perl_save_I32(pTHX_ I32 *intp)
SS_ADD_END(size);
}
SS_ADD_END(size);
}
+void
+Perl_save_strlen(pTHX_ STRLEN *ptr)
+{
+ dVAR;
+ dSS_ADD;
+
+ PERL_ARGS_ASSERT_SAVE_STRLEN;
+
+ SS_ADD_IV(*ptr);
+ SS_ADD_PTR(ptr);
+ SS_ADD_UV(SAVEt_STRLEN);
+ SS_ADD_END(3);
+}
+
/* Cannot use save_sptr() to store a char* since the SV** cast will
* force word-alignment and we'll miss the pointer.
*/
/* Cannot use save_sptr() to store a char* since the SV** cast will
* force word-alignment and we'll miss the pointer.
*/
@@
-583,14
+597,18
@@
Perl_save_hdelete(pTHX_ HV *hv, SV *keysv)
}
void
}
void
-Perl_save_adelete(pTHX_ AV *av,
I32
key)
+Perl_save_adelete(pTHX_ AV *av,
SSize_t
key)
{
dVAR;
{
dVAR;
+ dSS_ADD;
PERL_ARGS_ASSERT_SAVE_ADELETE;
SvREFCNT_inc_void(av);
PERL_ARGS_ASSERT_SAVE_ADELETE;
SvREFCNT_inc_void(av);
- save_pushi32ptr(key, av, SAVEt_ADELETE);
+ SS_ADD_UV(key);
+ SS_ADD_PTR(av);
+ SS_ADD_IV(SAVEt_ADELETE);
+ SS_ADD_END(3);
}
void
}
void
@@
-647,16
+665,20
@@
S_save_pushptri32ptr(pTHX_ void *const ptr1, const I32 i, void *const ptr2,
}
void
}
void
-Perl_save_aelem_flags(pTHX_ AV *av, I32 idx, SV **sptr, const U32 flags)
+Perl_save_aelem_flags(pTHX_ AV *av, SSize_t idx, SV **sptr,
+ const U32 flags)
{
{
- dVAR;
+ dVAR;
dSS_ADD;
SV *sv;
PERL_ARGS_ASSERT_SAVE_AELEM_FLAGS;
SvGETMAGIC(*sptr);
SV *sv;
PERL_ARGS_ASSERT_SAVE_AELEM_FLAGS;
SvGETMAGIC(*sptr);
- save_pushptri32ptr(SvREFCNT_inc_simple(av), idx, SvREFCNT_inc(*sptr),
- SAVEt_AELEM);
+ SS_ADD_PTR(SvREFCNT_inc_simple(av));
+ SS_ADD_IV(idx);
+ SS_ADD_PTR(SvREFCNT_inc(*sptr));
+ SS_ADD_UV(SAVEt_AELEM);
+ SS_ADD_END(4);
/* The array needs to hold a reference count on its new element, so it
must be AvREAL. */
if (!AvREAL(av) && AvREIFY(av))
/* The array needs to hold a reference count on its new element, so it
must be AvREAL. */
if (!AvREAL(av) && AvREIFY(av))
@@
-914,6
+936,9
@@
Perl_leave_scope(pTHX_ I32 base)
case SAVEt_INT: /* int reference */
*(int*)ARG0_PTR = (int)ARG1_I32;
break;
case SAVEt_INT: /* int reference */
*(int*)ARG0_PTR = (int)ARG1_I32;
break;
+ case SAVEt_STRLEN: /* STRLEN/size_t ref */
+ *(STRLEN*)ARG0_PTR = (STRLEN)arg1.any_iv;
+ break;
case SAVEt_BOOL: /* bool reference */
*(bool*)ARG0_PTR = cBOOL(uv >> 8);
#ifdef NO_TAINT_SUPPORT
case SAVEt_BOOL: /* bool reference */
*(bool*)ARG0_PTR = cBOOL(uv >> 8);
#ifdef NO_TAINT_SUPPORT
@@
-1021,9
+1046,6
@@
Perl_leave_scope(pTHX_ I32 base)
if (SvPADMY(sv) && !SvFAKE(sv))
SvREADONLY_off(sv);
if (SvPADMY(sv) && !SvFAKE(sv))
SvREADONLY_off(sv);
- if (SvTHINKFIRST(sv))
- sv_force_normal_flags(sv, SV_IMMEDIATE_UNREF
- |SV_COW_DROP_PV);
if (SvTYPE(sv) == SVt_PVHV)
Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
if (SvMAGICAL(sv))
if (SvTYPE(sv) == SVt_PVHV)
Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
if (SvMAGICAL(sv))
@@
-1032,6
+1054,9
@@
Perl_leave_scope(pTHX_ I32 base)
if (SvTYPE(sv) != SVt_PVCV)
mg_free(sv);
}
if (SvTYPE(sv) != SVt_PVCV)
mg_free(sv);
}
+ if (SvTHINKFIRST(sv))
+ sv_force_normal_flags(sv, SV_IMMEDIATE_UNREF
+ |SV_COW_DROP_PV);
switch (SvTYPE(sv)) {
case SVt_NULL:
switch (SvTYPE(sv)) {
case SVt_NULL:
@@
-1090,7
+1115,7
@@
Perl_leave_scope(pTHX_ I32 base)
Safefree(arg2.any_ptr);
break;
case SAVEt_ADELETE:
Safefree(arg2.any_ptr);
break;
case SAVEt_ADELETE:
- (void)av_delete(ARG0_AV,
ARG1_I32
, G_DISCARD);
+ (void)av_delete(ARG0_AV,
arg1.any_iv
, G_DISCARD);
SvREFCNT_dec(ARG0_AV);
break;
case SAVEt_DESTRUCTOR_X:
SvREFCNT_dec(ARG0_AV);
break;
case SAVEt_DESTRUCTOR_X:
@@
-1104,11
+1129,8
@@
Perl_leave_scope(pTHX_ I32 base)
case SAVEt_STACK_POS: /* Position on Perl stack */
PL_stack_sp = PL_stack_base + arg0.any_i32;
break;
case SAVEt_STACK_POS: /* Position on Perl stack */
PL_stack_sp = PL_stack_base + arg0.any_i32;
break;
- case SAVEt_STACK_CXPOS: /* blk_oldsp on context stack */
- cxstack[ARG0_I32].blk_oldsp = ARG1_I32;
- break;
case SAVEt_AELEM: /* array element */
case SAVEt_AELEM: /* array element */
- svp = av_fetch(ARG2_AV,
ARG1_I32
, 1);
+ svp = av_fetch(ARG2_AV,
arg1.any_iv
, 1);
if (!AvREAL(ARG2_AV) && AvREIFY(ARG2_AV)) /* undo reify guard */
SvREFCNT_dec(ARG0_SV);
if (svp) {
if (!AvREAL(ARG2_AV) && AvREIFY(ARG2_AV)) /* undo reify guard */
SvREFCNT_dec(ARG0_SV);
if (svp) {
@@
-1231,11
+1253,6
@@
Perl_leave_scope(pTHX_ I32 base)
case SAVEt_READONLY_OFF:
SvREADONLY_off(ARG0_SV);
break;
case SAVEt_READONLY_OFF:
SvREADONLY_off(ARG0_SV);
break;
-#ifdef USE_ITHREADS
- case SAVEt_COPFILEFREE:
- CopFILE_free((COP *)ARG0_PTR);
- break;
-#endif
default:
Perl_croak(aTHX_ "panic: leave_scope inconsistency %u", type);
}
default:
Perl_croak(aTHX_ "panic: leave_scope inconsistency %u", type);
}