Signature-Attribute-Checked
view release on metacpan or search on metacpan
lib/Signature/Attribute/Checked.xs view on Meta::CPAN
#include "XSParseSublike.h"
#define HAVE_PERL_VERSION(R, V, S) \
(PERL_REVISION > (R) || (PERL_REVISION == (R) && (PERL_VERSION > (V) || (PERL_VERSION == (V) && (PERL_SUBVERSION >= (S))))))
#include "compilerun_sv.c.inc"
#include "DataChecks.h"
static void apply_Checked(pTHX_ struct XPSSignatureParamContext *ctx, SV *attrvalue, void **attrdata_ptr, void *funcdata)
{
PADNAME *pn = PadnamelistARRAY(PL_comppad_name)[ctx->padix];
if(PadnamePV(pn)[0] != '$')
croak("Can only apply the :Checked attribute to scalar parameters");
SV *checkspec;
{
dSP;
lib/Signature/Attribute/Checked.xs view on Meta::CPAN
#ifndef newPADxVOP
# define newPADxVOP(type, flags, padix) S_newPADxVOP(aTHX_ type, flags, padix)
static OP *S_newPADxVOP(pTHX_ I32 type, I32 flags, PADOFFSET padix)
{
OP *op = newOP(type, flags);
op->op_targ = padix;
return op;
}
#endif
static void post_defop_Checked(pTHX_ struct XPSSignatureParamContext *ctx, void *attrdata, void *funcdata)
{
struct DataChecks_Checker *checker = attrdata;
OP *assertop = make_assertop(checker, newPADxVOP(OP_PADSV, 0, ctx->padix));
ctx->op = op_append_elem(OP_SCOPE,
ctx->op, assertop);
}
static void free_Checked(pTHX_ struct XPSSignatureParamContext *ctx, void *attrdata, void *funcdata)
{
struct DataChecks_Checker *checker = attrdata;
free_checkdata(checker);
}
static const struct XPSSignatureAttributeFuncs funcs_Checked = {
.ver = XSPARSESUBLIKE_ABI_VERSION,
.permit_hintkey = "Signature::Attribute::Checked/Checked",
.apply = apply_Checked,
( run in 0.265 second using v1.01-cache-2.11-cpan-454fe037f31 )