diff options
author | David Mitchell <davem@iabyn.com> | 2010-12-16 16:14:06 +0000 |
---|---|---|
committer | David Mitchell <davem@iabyn.com> | 2010-12-16 16:16:14 +0000 |
commit | 93d7320bf7eac5942274854396d4ccc6268106c7 (patch) | |
tree | 279988fd2159c2ea009a71d79d668d18a1f43228 /pp.c | |
parent | 2cf724d498600d69eef0cc9013134e35fd9eff6d (diff) | |
download | perl-93d7320bf7eac5942274854396d4ccc6268106c7.tar.gz |
only call amagic_deref_call() if we have to
Diffstat (limited to 'pp.c')
-rw-r--r-- | pp.c | 13 |
1 files changed, 8 insertions, 5 deletions
@@ -142,9 +142,10 @@ PP(pp_rv2gv) if (!isGV(sv) || SvFAKE(sv)) SvGETMAGIC(sv); if (SvROK(sv)) { wasref: - sv = amagic_deref_call(sv, to_gv_amg); - SPAGAIN; - + if (SvAMAGIC(sv)) { + sv = amagic_deref_call(sv, to_gv_amg); + SPAGAIN; + } sv = SvRV(sv); if (SvTYPE(sv) == SVt_PVIO) { GV * const gv = MUTABLE_GV(sv_newmortal()); @@ -284,8 +285,10 @@ PP(pp_rv2sv) if (!(PL_op->op_private & OPpDEREFed)) SvGETMAGIC(sv); if (SvROK(sv)) { - sv = amagic_deref_call(sv, to_sv_amg); - SPAGAIN; + if (SvAMAGIC(sv)) { + sv = amagic_deref_call(sv, to_sv_amg); + SPAGAIN; + } sv = SvRV(sv); switch (SvTYPE(sv)) { |