summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2008-12-01 10:36:44 +0000
committerNicholas Clark <nick@ccl4.org>2008-12-01 10:36:44 +0000
commit601cee3b44d5dc2533c9ca9da3e2820c4464c2af (patch)
tree32dc6fb6c508ef5b76316f454e0fb01b304c2539
parent7623d4262995987d3de73f116de43554c077f9c7 (diff)
downloadperl-601cee3b44d5dc2533c9ca9da3e2820c4464c2af.tar.gz
For SAVEHINTS(), re-order the savestack to be (?:PTR, )? INT, PTR.
This brings it to the same order as save_aelem() or save_pushi32ptr(). p4raw-id: //depot/perl@34964
-rw-r--r--scope.c2
-rw-r--r--scope.h12
-rw-r--r--sv.c4
3 files changed, 9 insertions, 9 deletions
diff --git a/scope.c b/scope.c
index 0923747d54..14ad0b3c4e 100644
--- a/scope.c
+++ b/scope.c
@@ -902,9 +902,9 @@ Perl_leave_scope(pTHX_ I32 base)
SvREFCNT_dec(MUTABLE_SV(GvHV(PL_hintgv)));
GvHV(PL_hintgv) = NULL;
}
- *(I32*)&PL_hints = (I32)SSPOPINT;
Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
PL_compiling.cop_hints_hash = (struct refcounted_he *) SSPOPPTR;
+ *(I32*)&PL_hints = (I32)SSPOPINT;
if (PL_hints & HINT_LOCALIZE_HH) {
SvREFCNT_dec(MUTABLE_SV(GvHV(PL_hintgv)));
GvHV(PL_hintgv) = MUTABLE_HV(SSPOPPTR);
diff --git a/scope.h b/scope.h
index 152566ad03..bc80b97caa 100644
--- a/scope.h
+++ b/scope.h
@@ -159,18 +159,18 @@ Closing bracket on a callback. See C<ENTER> and L<perlcall>.
#define SAVEHINTS() \
STMT_START { \
- SSCHECK(4); \
- if (PL_hints & HINT_LOCALIZE_HH) { \
- SSPUSHPTR(GvHV(PL_hintgv)); \
- GvHV(PL_hintgv) = Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)); \
- } \
if (PL_compiling.cop_hints_hash) { \
HINTS_REFCNT_LOCK; \
PL_compiling.cop_hints_hash->refcounted_he_refcnt++; \
HINTS_REFCNT_UNLOCK; \
} \
- SSPUSHPTR(PL_compiling.cop_hints_hash); \
+ SSCHECK(4); \
+ if (PL_hints & HINT_LOCALIZE_HH) { \
+ SSPUSHPTR(GvHV(PL_hintgv)); \
+ GvHV(PL_hintgv) = Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)); \
+ } \
SSPUSHINT(PL_hints); \
+ SSPUSHPTR(PL_compiling.cop_hints_hash); \
SSPUSHINT(SAVEt_HINTS); \
} STMT_END
diff --git a/sv.c b/sv.c
index 2db30bef1c..2a4c581f6f 100644
--- a/sv.c
+++ b/sv.c
@@ -11303,8 +11303,6 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
TOPPTR(nss,ix) = ptr;
break;
case SAVEt_HINTS:
- i = POPINT(ss,ix);
- TOPINT(nss,ix) = i;
ptr = POPPTR(ss,ix);
if (ptr) {
HINTS_REFCNT_LOCK;
@@ -11312,6 +11310,8 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
HINTS_REFCNT_UNLOCK;
}
TOPPTR(nss,ix) = ptr;
+ i = POPINT(ss,ix);
+ TOPINT(nss,ix) = i;
if (i & HINT_LOCALIZE_HH) {
hv = (const HV *)POPPTR(ss,ix);
TOPPTR(nss,ix) = hv_dup_inc(hv, param);