diff options
author | Nicholas Clark <nick@ccl4.org> | 2010-11-03 16:54:05 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2010-11-03 16:54:05 +0000 |
commit | 8897dcaad14089c32e969309beb16112ec768eaf (patch) | |
tree | 7610d6a83c89377e877de24b35643cecaa1035c9 | |
parent | 25a9ffce153b0e67cfefd260754edeb097da5be7 (diff) | |
download | perl-8897dcaad14089c32e969309beb16112ec768eaf.tar.gz |
Inline tryAMAGICunDEREF_var() into its callers and eliminate it.
Nothing outside the core was using this macro.
-rw-r--r-- | pp.c | 6 | ||||
-rw-r--r-- | pp.h | 8 | ||||
-rw-r--r-- | pp_hot.c | 7 | ||||
-rw-r--r-- | sv.c | 5 |
4 files changed, 15 insertions, 11 deletions
@@ -142,7 +142,8 @@ PP(pp_rv2gv) if (!isGV(sv) || SvFAKE(sv)) SvGETMAGIC(sv); if (SvROK(sv)) { wasref: - tryAMAGICunDEREF(to_gv); + sv = amagic_deref_call(sv, to_gv_amg); + SPAGAIN; sv = SvRV(sv); if (SvTYPE(sv) == SVt_PVIO) { @@ -283,7 +284,8 @@ PP(pp_rv2sv) if (!(PL_op->op_private & OPpDEREFed)) SvGETMAGIC(sv); if (SvROK(sv)) { - tryAMAGICunDEREF(to_sv); + sv = amagic_deref_call(sv, to_sv_amg); + SPAGAIN; sv = SvRV(sv); switch (SvTYPE(sv)) { @@ -449,14 +449,14 @@ Does not use C<TARG>. See also C<XPUSHu>, C<mPUSHu> and C<PUSHu>. } \ } STMT_END -#define tryAMAGICunDEREF_var(meth_enum) \ +/* This is no longer used anywhere in the core. You might wish to consider + calling amagic_deref_call() directly, as it has a cleaner interface. */ +#define tryAMAGICunDEREF(meth) \ STMT_START { \ - sv = amagic_deref_call(aTHX_ *sp, meth_enum); \ + sv = amagic_deref_call(aTHX_ *sp, CAT2(meth,_amg)); \ SPAGAIN; \ } STMT_END -#define tryAMAGICunDEREF(meth) tryAMAGICunDEREF_var(CAT2(meth,_amg)) - #define opASSIGN (PL_op->op_flags & OPf_STACKED) #define SETsv(sv) STMT_START { \ @@ -827,7 +827,8 @@ PP(pp_rv2av) if (!(PL_op->op_private & OPpDEREFed)) SvGETMAGIC(sv); if (SvROK(sv)) { - tryAMAGICunDEREF_var(is_pp_rv2av ? to_av_amg : to_hv_amg); + sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg); + SPAGAIN; sv = SvRV(sv); if (SvTYPE(sv) != type) @@ -2770,8 +2771,8 @@ PP(pp_entersub) } SvGETMAGIC(sv); if (SvROK(sv)) { - SV * const * sp = &sv; /* Used in tryAMAGICunDEREF macro. */ - tryAMAGICunDEREF(to_cv); + sv = amagic_deref_call(sv, to_cv_amg); + /* Don't SPAGAIN here. */ } else { const char *sym; @@ -8729,9 +8729,10 @@ Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref) default: if (SvROK(sv)) { - SV * const *sp = &sv; /* Used in tryAMAGICunDEREF macro. */ SvGETMAGIC(sv); - tryAMAGICunDEREF(to_cv); + sv = amagic_deref_call(sv, to_cv_amg); + /* At this point I'd like to do SPAGAIN, but really I need to + force it upon my callers. Hmmm. This is a mess... */ sv = SvRV(sv); if (SvTYPE(sv) == SVt_PVCV) { |