X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=xs-src%2FMouseAttribute.xs;h=2caf7be54e9f34b4c1289486f43d9215e9919c93;hb=f50e50d653ac9fbdc9aeeff13bbf5456e603a339;hp=62b259347422bd48fdd506478b37882f1284c79a;hpb=4e7e3250fdc8eeccfd656270b40f6aa9817da9a9;p=gitmo%2FMouse.git diff --git a/xs-src/MouseAttribute.xs b/xs-src/MouseAttribute.xs index 62b2593..2caf7be 100644 --- a/xs-src/MouseAttribute.xs +++ b/xs-src/MouseAttribute.xs @@ -142,6 +142,9 @@ mouse_xa_set_default(pTHX_ AV* const xa, SV* const object) { U16 const flags = (U16)MOUSE_xa_flags(xa); SV* value; + ENTER; + SAVETMPS; + /* get default value by $attr->builder or $attr->default */ if(flags & MOUSEf_ATTR_HAS_BUILDER){ SV* const builder = mcall0s(MOUSE_xa_attribute(xa), "builder"); @@ -162,11 +165,13 @@ mouse_xa_set_default(pTHX_ AV* const xa, SV* const object) { /* store value to slot */ value = set_slot(object, MOUSE_xa_slot(xa), value); - if(flags & MOUSEf_ATTR_IS_WEAK_REF && SvROK(value)){ weaken_slot(object, MOUSE_xa_slot(xa)); } + FREETMPS; + LEAVE; + return value; } @@ -213,6 +218,5 @@ BOOT: INSTALL_SIMPLE_PREDICATE_WITH_KEY(Attribute, has_builder, builder); INSTALL_SIMPLE_PREDICATE_WITH_KEY(Attribute, has_documentation, documentation); - newCONSTSUB(gv_stashpvs("Mouse::Meta::Attribute", TRUE), "accessor_metaclass", - newSVpvs("Mouse::Meta::Method::Accessor::XS")); + INSTALL_CLASS_HOLDER(Attribute, accessor_metaclass, "Mouse::Meta::Method::Accessor::XS");