X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Findirect.git;a=blobdiff_plain;f=indirect.xs;h=0bfc3cd83679cabaa0d3390c7fa372090c36331f;hp=f7b22d35696776b29abf9045c3b31153bf649430;hb=31786d861edccae57968f02e1872df9775ced1d4;hpb=4fdc595f5c3de054976ac16886f65e8d78525100 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 ............................................... */