X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=indirect.xs;h=4f1deb4d69937ce96ffd5e372f2866101bc94fc5;hb=9e1c36b4c0f232d32543bae20c0510cca7c287ea;hp=f3aa14b4ce3c11f009c3d7b79d6d7b3fa2b4bb5e;hpb=f0156ba56d815d220b7f943d5f34cd726488c5db;p=perl%2Fmodules%2Findirect.git diff --git a/indirect.xs b/indirect.xs index f3aa14b..4f1deb4 100644 --- a/indirect.xs +++ b/indirect.xs @@ -35,6 +35,10 @@ # define sv_catpvn_nomg sv_catpvn #endif +#ifndef mPUSHu +# define mPUSHu(U) PUSHs(sv_2mortal(newSVuv(U))) +#endif + #ifndef HvNAME_get # define HvNAME_get(H) HvNAME(H) #endif @@ -252,7 +256,7 @@ STATIC U32 indirect_hash = 0; STATIC SV *indirect_hint(pTHX) { #define indirect_hint() indirect_hint(aTHX) SV *id; -#if I_HAS_PERL(5, 10, 0) +#if I_HAS_PERL(5, 9, 5) id = Perl_refcounted_he_fetch(aTHX_ PL_curcop->cop_hints_hash, NULL, __PACKAGE__, __PACKAGE_LEN__, @@ -513,17 +517,29 @@ STATIC OP *indirect_ck_entersub(pTHX_ OP *o) { SV *code = indirect_detag(hint); if (hint) { + SV *file; + line_t line; dSP; + onamesv = sv_mortalcopy(onamesv); mnamesv = sv_mortalcopy(mnamesv); +#ifdef USE_ITHREADS + file = newSVpv(CopFILE(&PL_compiling), 0); +#else + file = sv_mortalcopy(CopFILESV(&PL_compiling)); +#endif + line = CopLINE(&PL_compiling); + ENTER; SAVETMPS; PUSHMARK(SP); - EXTEND(SP, 2); + EXTEND(SP, 4); PUSHs(onamesv); PUSHs(mnamesv); + PUSHs(file); + mPUSHu(line); PUTBACK; call_sv(code, G_VOID);