if (!PL_custom_op_names)
PL_custom_op_names = newHV();
- (void) hv_store_ent(PL_custom_op_names, key, newSVpv(c->name, c->len), 0);
+ (void) hv_store_ent(PL_custom_op_names, key, newSVpv(c->name, c->namelen), 0);
if (!PL_custom_op_descs)
PL_custom_op_descs = newHV();
- (void) hv_store_ent(PL_custom_op_descs, key, newSVpv(c->name, c->len), 0);
+ (void) hv_store_ent(PL_custom_op_descs, key, newSVpv(c->name, c->namelen), 0);
if (c->check) {
SV *check = newSViv(PTR2IV(c->check));
{
dMY_CXT;
- (void) hv_store(MY_CXT.map, c->name, c->len, key, 0);
+ (void) hv_store(MY_CXT.map, c->name, c->namelen, key, 0);
}
}
gv = cGVOPx_gv(gvop);
{
- HV *stash = GvSTASH(gv);
SV *pp_sv, **svp;
CV *cv = NULL;
const char *name = GvNAME(gv);
HV *map;
CV *placeholder;
tTHX owner;
-CODE:
+PPCODE:
{
dMY_CXT;
owner = MY_CXT.owner;
MY_CXT.placeholder = placeholder;
MY_CXT.owner = aTHX;
}
+ XSRETURN(0);
#endif /* SO_THREADSAFE */
XSRETURN_UNDEF;
ST(0) = sv_2mortal(newSVpvn(&on->buf, on->len));
XSRETURN(1);
+
+void
+_constant_sub(SV *sv)
+PROTOTYPE: $
+PPCODE:
+ if (!SvROK(sv))
+ XSRETURN_UNDEF;
+ sv = SvRV(sv);
+ if (SvTYPE(sv) < SVt_PVCV)
+ XSRETURN_UNDEF;
+ ST(0) = sv_2mortal(newSVuv(CvCONST(sv)));
+ XSRETURN(1);