Object-Pad-FieldAttr-Isa
view release on metacpan or search on metacpan
lib/Object/Pad/FieldAttr/Isa.xs view on Meta::CPAN
croak("Field %" SVf " requires an object of type %" SVf,
SVfARG(data->fieldname), SVfARG(data->classname));
return 1;
}
static const MGVTBL vtbl = {
.svt_set = &magic_set,
};
static bool isa_apply(pTHX_ FieldMeta *fieldmeta, SV *value, SV **attrdata_ptr, void *_funcdata)
{
struct Data *data;
Newx(data, 1, struct Data);
data->is_weak = false;
data->fieldname = SvREFCNT_inc(mop_field_get_name(fieldmeta));
data->classname = SvREFCNT_inc(value);
*attrdata_ptr = (SV *)data;
return TRUE;
}
static void isa_seal(pTHX_ FieldMeta *fieldmeta, SV *attrdata, void *_funcdata)
{
struct Data *data = (struct Data *)attrdata;
if(mop_field_get_attribute(fieldmeta, "weak"))
data->is_weak = true;
}
static void isa_post_makefield(pTHX_ FieldMeta *fieldmeta, SV *attrdata, void *_funcdata, SV *field)
{
sv_magicext(field, newSV(0), PERL_MAGIC_ext, &vtbl, (char *)attrdata, 0);
}
static const struct FieldHookFuncs isa_hooks = {
.ver = OBJECTPAD_ABIVERSION,
.flags = OBJECTPAD_FLAG_ATTR_MUST_VALUE,
.permit_hintkey = "Object::Pad::FieldAttr::Isa/Isa",
.apply = &isa_apply,
( run in 0.333 second using v1.01-cache-2.11-cpan-454fe037f31 )