From: Vincent Pit Date: Mon, 23 Aug 2010 09:19:23 +0000 (+0200) Subject: Always get the hint directly from %^H X-Git-Tag: v0.23~6 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Findirect.git;a=commitdiff_plain;h=6429fd7545e28fe43dd128c3ce6bb2ccf031e514;hp=2b4cc6c04da4c960652e76a3b14e32554550f3e1 Always get the hint directly from %^H Since we explicitely ensure that we only fetch the hint at compile time, we should always be able to get it from %^H. However, the require propagation bug was fixed for %^H only in 5.12, while it was fixed in 5.10.1 for the internal hint chain. So we also have to enable the require propagation workaround on 5.10.1. --- diff --git a/indirect.xs b/indirect.xs index d21b29e..f22ecb3 100644 --- a/indirect.xs +++ b/indirect.xs @@ -84,7 +84,7 @@ #endif #ifndef I_WORKAROUND_REQUIRE_PROPAGATION -# define I_WORKAROUND_REQUIRE_PROPAGATION !I_HAS_PERL(5, 10, 1) +# define I_WORKAROUND_REQUIRE_PROPAGATION !I_HAS_PERL(5, 12, 0) #endif /* ... Thread safety and multiplicity ...................................... */ @@ -384,27 +384,16 @@ STATIC U32 indirect_hash = 0; STATIC SV *indirect_hint(pTHX) { #define indirect_hint() indirect_hint(aTHX) - SV *hint; + SV **val; if (IN_PERL_RUNTIME) return NULL; -#if I_HAS_PERL(5, 9, 5) - hint = Perl_refcounted_he_fetch(aTHX_ PL_curcop->cop_hints_hash, - NULL, - __PACKAGE__, __PACKAGE_LEN__, - 0, - indirect_hash); -#else - { - SV **val = hv_fetch(GvHV(PL_hintgv), __PACKAGE__, __PACKAGE_LEN__, - indirect_hash); - if (!val) - return 0; - hint = *val; - } -#endif - return indirect_detag(hint); + val = hv_fetch(GvHV(PL_hintgv), __PACKAGE__, __PACKAGE_LEN__, indirect_hash); + if (!val) + return NULL; + + return indirect_detag(*val); } /* ... op -> source position ............................................... */