X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=xs-src%2FMouseAttribute.xs;h=30163fbb06ba11ec39217bb93c202e352922f893;hb=f2dbeb5f05a2ff0bb63d422b5fea73554612ce87;hp=62b259347422bd48fdd506478b37882f1284c79a;hpb=4e7e3250fdc8eeccfd656270b40f6aa9817da9a9;p=gitmo%2FMouse.git diff --git a/xs-src/MouseAttribute.xs b/xs-src/MouseAttribute.xs index 62b2593..30163fb 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_SIMPLE_READER_WITH_DEFAULTS(Attribute, accessor_metaclass, "Mouse::Meta::Method::Accessor::XS");