STATIC U32 indirect_hash = 0;
-STATIC UV indirect_hint(pTHX) {
+STATIC IV indirect_hint(pTHX) {
#define indirect_hint() indirect_hint(aTHX)
SV *id = Perl_refcounted_he_fetch(aTHX_ PL_curcop->cop_hints_hash,
NULL,
"indirect", 8,
0,
indirect_hash);
- return SvOK(id) ? SvUV(id) : 0;
+ return (id && SvOK(id) && SvIOK(id)) ? SvIV(id) : 0;
}
/* ... op -> source position ............................................... */
val = newSVsv(sv);
SvUPGRADE(val, SVt_PVIV);
SvUVX(val) = PTR2UV(src);
+ SvIOK_on(val);
+ SvIsUV_on(val);
if (!hv_store(indirect_map, buf, sprintf(buf, "%u", PTR2UV(o)), val, 0))
SvREFCNT_dec(val);
}
STATIC OP *indirect_ck_entersub(pTHX_ OP *o) {
LISTOP *op;
OP *om, *oo;
- UV hint = indirect_hint();
+ IV hint = indirect_hint();
if (hint) {
const char *pm, *po;
goto done;
pm = indirect_map_fetch(om, &svm);
po = indirect_map_fetch(oo, &svo);
- if (pm && po && pm < po)
- ((hint == 2) ? croak : warn)(indirect_msg, SvPV_nolen_const(svm),
- SvPV_nolen_const(svo));
+ if (pm && po && pm < po) {
+ const char *psvm = SvPV_nolen_const(svm), *psvo = SvPV_nolen_const(svo);
+ if (hint == 2)
+ croak(indirect_msg, psvm, psvo);
+ else
+ warn(indirect_msg, psvm, psvo);
+ }
}
done: