summaryrefslogtreecommitdiff
path: root/op.c
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>2000-01-14 04:40:49 +0000
committerGurusamy Sarathy <gsar@cpan.org>2000-01-14 04:40:49 +0000
commit5faabd7d610b4ff8e7c072611a59259096c14bad (patch)
treeb1cafc257bdb058f33deb1c6cf4c4201dbaf7053 /op.c
parent86a9aef26fb49fa244fdb909e2ecabafc79006a1 (diff)
downloadperl-5faabd7d610b4ff8e7c072611a59259096c14bad.tar.gz
minor optimization (avoid double sv_upgrade() for "our Foo $bar;")
p4raw-id: //depot/perl@4803
Diffstat (limited to 'op.c')
-rw-r--r--op.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/op.c b/op.c
index b07a1fbed3..4baf03b313 100644
--- a/op.c
+++ b/op.c
@@ -257,17 +257,17 @@ S_pad_findlex(pTHX_ char *name, PADOFFSET newoff, U32 seq, CV* startcv,
SvNVX(namesv) = (NV)PL_curcop->cop_seq;
SvIVX(namesv) = PAD_MAX; /* A ref, intro immediately */
SvFAKE_on(namesv); /* A ref, not a real var */
+ if (SvFLAGS(sv) & SVpad_OUR) { /* An "our" variable */
+ SvFLAGS(namesv) |= SVpad_OUR;
+ (void)SvUPGRADE(namesv, SVt_PVGV);
+ GvSTASH(namesv) = (HV*)SvREFCNT_inc((SV*)GvSTASH(sv));
+ }
if (SvOBJECT(sv)) { /* A typed var */
SvOBJECT_on(namesv);
(void)SvUPGRADE(namesv, SVt_PVMG);
SvSTASH(namesv) = (HV*)SvREFCNT_inc((SV*)SvSTASH(sv));
PL_sv_objcount++;
}
- if (SvFLAGS(sv) & SVpad_OUR) { /* An "our" variable */
- SvFLAGS(namesv) |= SVpad_OUR;
- (void)SvUPGRADE(namesv, SVt_PVGV);
- GvSTASH(namesv) = (HV*)SvREFCNT_inc((SV*)GvSTASH(sv));
- }
if (CvANON(PL_compcv) || SvTYPE(PL_compcv) == SVt_PVFM) {
/* "It's closures all the way down." */
CvCLONE_on(PL_compcv);