From: Vincent Pit Date: Tue, 5 Jul 2011 22:24:33 +0000 (+0200) Subject: Revert "Always get the hint directly from %^H" X-Git-Tag: rt64521 X-Git-Url: http://git.vpit.fr/?a=commitdiff_plain;h=440ea2e062e33daa2ae19b19cbc4b26b2a343feb;p=perl%2Fmodules%2Findirect.git Revert "Always get the hint directly from %^H" We should always fetch the hint from the COPs so that we get the right environment in eval STRING. This fixes RT #64521 and RT #69291 in 5.10. This reverts commit 6429fd7545e28fe43dd128c3ce6bb2ccf031e514. --- diff --git a/indirect.xs b/indirect.xs index f7b22d3..0bfc3cd 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, 12, 0) +# define I_WORKAROUND_REQUIRE_PROPAGATION !I_HAS_PERL(5, 10, 1) #endif /* ... Thread safety and multiplicity ...................................... */ @@ -389,16 +389,31 @@ STATIC U32 indirect_hash = 0; STATIC SV *indirect_hint(pTHX) { #define indirect_hint() indirect_hint(aTHX) - SV **val; + SV *hint; if (IN_PERL_RUNTIME) return NULL; - val = hv_fetch(GvHV(PL_hintgv), __PACKAGE__, __PACKAGE_LEN__, indirect_hash); - if (!val) - return NULL; +#ifdef cop_hints_fetch_pvn + hint = cop_hints_fetch_pvn(PL_curcop, __PACKAGE__, __PACKAGE_LEN__, + indirect_hash, 0); +#elif 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(*val); + return indirect_detag(hint); } /* ... op -> source position ............................................... */