}
for(i = 0; i < len; i++){
- SV* const attr = AvARRAY(attrs)[i];
- AV* const xa = mouse_get_xa(aTHX_ AvARRAY(attrs)[i]);
+ SV* const attr = MOUSE_av_at(attrs, i);
+ AV* const xa = mouse_get_xa(aTHX_ attr);
SV* const slot = MOUSE_xa_slot(xa);
U16 const flags = (U16)MOUSE_xa_flags(xa);
}
if(MOUSE_xc_flags(xc) & MOUSEf_XC_IS_ANON){
- set_slot(object, newSVpvs_flags("__ANON__", SVs_TEMP), meta);
+ set_slot(object, newSVpvs_flags("__METACLASS__", SVs_TEMP), meta);
}
FREETMPS;
SV* sv = code_ref; /* used in tryAMAGICunDEREF */
SV** sp = &sv; /* used in tryAMAGICunDEREF */
tryAMAGICunDEREF(to_cv); /* try \&{$code} */
- if(SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV){
- mouse_throw_error(self, NULL, "Not a CODE reference");
+ if(!(SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV)){
+ mouse_throw_error(self, NULL, "You must pass a CODE reference to add_method");
}
code_ref = sv;
}
INSTALL_SIMPLE_READER(Class, roles);
INSTALL_SIMPLE_PREDICATE_WITH_KEY(Class, is_anon_class, anon_serial_id);
- INSTALL_SIMPLE_ACCESSOR_WITH_DEFAULTS(Class, method_metaclass, "Mouse::Meta::Method");
- INSTALL_SIMPLE_ACCESSOR_WITH_DEFAULTS(Class, attribute_metaclass, "Mouse::Meta::Attribute");
- INSTALL_SIMPLE_ACCESSOR_WITH_DEFAULTS(Class, constructor_class, "Mouse::Meta::Method::Constructor::XS");
- INSTALL_SIMPLE_ACCESSOR_WITH_DEFAULTS(Class, destructor_class, "Mouse::Meta::Method::Destructor::XS");
+ INSTALL_CLASS_HOLDER(Class, method_metaclass, "Mouse::Meta::Method");
+ INSTALL_CLASS_HOLDER(Class, attribute_metaclass, "Mouse::Meta::Attribute");
+ INSTALL_CLASS_HOLDER(Class, constructor_class, "Mouse::Meta::Method::Constructor::XS");
+ INSTALL_CLASS_HOLDER(Class, destructor_class, "Mouse::Meta::Method::Destructor::XS");
newCONSTSUB(gv_stashpvs("Mouse::Meta::Method::Constructor::XS", TRUE), "_generate_constructor",
newRV_inc((SV*)get_cvs("Mouse::Object::new", TRUE)));
PPCODE:
{
AV* const xc = mouse_get_xc(aTHX_ self);
- AV* const all_attrs = MOUSE_xc_attrall(xc);
+ AV* const all_attrs = MOUSE_xc_attrall(xc);
I32 const len = AvFILLp(all_attrs) + 1;
I32 i;
INSTALL_SIMPLE_READER_WITH_KEY(Role, get_roles, roles);
INSTALL_SIMPLE_PREDICATE_WITH_KEY(Role, is_anon_role, anon_serial_id);
- INSTALL_SIMPLE_ACCESSOR_WITH_DEFAULTS(Role, method_metaclass, "Mouse::Meta::Role::Method");
+ INSTALL_CLASS_HOLDER(Role, method_metaclass, "Mouse::Meta::Role::Method");
MODULE = Mouse PACKAGE = Mouse::Object
PUSHMARK(SP);
EXTEND(SP, 2);
- PUSHs(RETVAL);
+ PUSHs(RETVAL); /* self */
PUSHs(args);
PUTBACK;