Sub-Disable
view release on metacpan or search on metacpan
MY_CXT.owner = aTHX;
#endif
wrap_op_checker(OP_ENTERSUB, entersub_checker, &old_entersub_checker);
}
#ifdef USE_ITHREADS
void
CLONE(...)
PPCODE:
{
tTHX owner;
HV* cloned;
{
dMY_CXT;
CLONE_PARAMS params = {NULL, 0, MY_CXT.owner};
cloned = (HV*)sv_dup_inc((SV*)MY_CXT.disabled_methods, ¶ms);
}
MY_CXT.disabled_methods = cloned;
}
XSRETURN_UNDEF;
}
#endif /* USE_ITHREADS */
void
disable_cv_call(SV* cv)
PPCODE:
{
if (SvROK(cv)) cv = SvRV(cv);
if (SvTYPE(cv) != SVt_PVCV) croak("Not a CODE reference");
cv_set_call_checker((CV*)cv, disable_function_checker, cv);
XSRETURN_UNDEF;
}
void
disable_named_call(SV* package, SV* func)
PPCODE:
{
HV* stash = gv_stashsv(package, GV_ADD);
HE* hent = hv_fetch_ent(stash, func, 0, 0);
GV* glob = hent ? (GV*)HeVAL(hent) : NULL;
if (!glob || !isGV(glob) || SvFAKE(glob)) {
if (!glob) glob = (GV*)newSV(0);
gv_init_sv(glob, stash, func, GV_ADDMULTI);
if (hent) {
CvGV_set(cv, glob);
}
cv_set_call_checker(cv, disable_function_checker, (SV*)cv);
XSRETURN_UNDEF;
}
void
disable_method_call(SV* package, SV* method)
PPCODE:
{
dMY_CXT;
SV* shared_method_sv;
if (!SvIsCOW_shared_hash(method)) {
STRLEN len;
const char* method_buf = SvPV_const(method, len);
shared_method_sv = newSVpvn_share(method_buf, SvUTF8(method) ? -(I32)len : (I32)len, 0);
} else {
shared_method_sv = method;
( run in 0.600 second using v1.01-cache-2.11-cpan-5511b514fd6 )