summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2006-04-08 14:46:53 +0000
committerNicholas Clark <nick@ccl4.org>2006-04-08 14:46:53 +0000
commitb03d03b0d431a697778042366f63e689b71fbf23 (patch)
tree79f4643fd93a315a27af9e287a904736f8361c58
parent5bfb7d0e2e2f3251d6322e902aed9479d39e920a (diff)
downloadperl-b03d03b0d431a697778042366f63e689b71fbf23.tar.gz
By swapping the order of pushes onto the save stack for
SAVEt_GENERIC_PVREF, we can merge it with SAVEt_PPTR in Perl_ss_dup(). p4raw-id: //depot/perl@27740
-rw-r--r--scope.c4
-rw-r--r--sv.c7
2 files changed, 3 insertions, 8 deletions
diff --git a/scope.c b/scope.c
index cec853e375..be926c8f11 100644
--- a/scope.c
+++ b/scope.c
@@ -226,8 +226,8 @@ Perl_save_generic_pvref(pTHX_ char **str)
{
dVAR;
SSCHECK(3);
- SSPUSHPTR(str);
SSPUSHPTR(*str);
+ SSPUSHPTR(str);
SSPUSHINT(SAVEt_GENERIC_PVREF);
}
@@ -643,8 +643,8 @@ Perl_leave_scope(pTHX_ I32 base)
SvREFCNT_dec(av);
break;
case SAVEt_GENERIC_PVREF: /* generic pv */
- str = (char*)SSPOPPTR;
ptr = SSPOPPTR;
+ str = (char*)SSPOPPTR;
if (*(char**)ptr != str) {
Safefree(*(char**)ptr);
*(char**)ptr = str;
diff --git a/sv.c b/sv.c
index 612127fca8..63cef31559 100644
--- a/sv.c
+++ b/sv.c
@@ -10382,12 +10382,6 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
gv = (GV*)POPPTR(ss,ix);
TOPPTR(nss,ix) = gv_dup_inc(gv, param);
break;
- case SAVEt_GENERIC_PVREF: /* generic char* */
- c = (char*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = pv_dup(c);
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
- break;
case SAVEt_SHARED_PVREF: /* char* in shared space */
c = (char*)POPPTR(ss,ix);
TOPPTR(nss,ix) = savesharedpv(c);
@@ -10452,6 +10446,7 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
ptr = POPPTR(ss,ix);
TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
break;
+ case SAVEt_GENERIC_PVREF: /* generic char* */
case SAVEt_PPTR: /* char* reference */
ptr = POPPTR(ss,ix);
TOPPTR(nss,ix) = any_dup(ptr, proto_perl);