Sub-Disable

 view release on metacpan or  search on metacpan

Disable.xs  view on Meta::CPAN

    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, &params);
    }

Disable.xs  view on Meta::CPAN

        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) {

Disable.xs  view on Meta::CPAN

        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.546 second using v1.01-cache-2.11-cpan-5511b514fd6 )