X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Findirect.git;a=blobdiff_plain;f=indirect.xs;h=f22ecb315e9d3101b7363b0592985ca4e41f6501;hp=ba9c503958a997ab3b043683cbd0b48b9af213f4;hb=6429fd7545e28fe43dd128c3ce6bb2ccf031e514;hpb=b692a67bb2d094808f4ef331df53093a4019b34e diff --git a/indirect.xs b/indirect.xs index ba9c503..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 ............................................... */ @@ -647,22 +636,14 @@ STATIC OP *indirect_ck_method(pTHX_ OP *o) { line_t line; SV *sv; - if (oi) { - sv = sv_2mortal(newSVpvn(oi->buf, oi->len)); - pos = oi->pos; - /* Keep the old line so that we really point to the first line of the - * expression. */ - line = oi->line; - } else { - sv = cSVOPx_sv(op); - if (!SvPOK(sv) || (SvTYPE(sv) < SVt_PV)) - goto done; - sv = sv_mortalcopy(sv); + if (!oi) + goto done; - if (!indirect_find(sv, PL_oldbufptr, &pos)) - goto done; - line = CopLINE(&PL_compiling); - } + sv = sv_2mortal(newSVpvn(oi->buf, oi->len)); + pos = oi->pos; + /* Keep the old line so that we really point to the first line of the + * expression. */ + line = oi->line; o = CALL_FPTR(indirect_old_ck_method)(aTHX_ o); /* o may now be a method_named */