Change class holders to simple readers
[gitmo/Mouse.git] / xs-src / MouseAttribute.xs
index 62b2593..30163fb 100644 (file)
@@ -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");