Change TC hierarchy in XS
[gitmo/Mouse.git] / xs-src / MouseAccessor.xs
index 234e395..6af6b03 100644 (file)
@@ -52,8 +52,6 @@ static MGVTBL mouse_accessor_vtbl; /* MAGIC identity */
 
 SV*
 mouse_accessor_get_self(pTHX_ I32 const ax, I32 const items, CV* const cv) {
-    SV* self;
-
     if(items < 1){
         croak("Too few arguments for %s", GvNAME(CvGV(cv)));
     }
@@ -164,18 +162,11 @@ mouse_apply_type_constraint(pTHX_ AV* const xa, SV* value, U16 const flags){
     }
 
     if(!SvOK(MOUSE_xa_tc_code(xa))){
-        XS(XS_Mouse__Util__TypeConstraints_Item); /* prototype defined in Mouse.xs */
-
         tc_code = mcall0s(tc, "_compiled_type_constraint");
+        av_store(xa, MOUSE_XA_TC_CODE, newSVsv(tc_code));
 
-        if(SvROK(tc_code) && SvTYPE(SvRV(tc_code))
-            && CvXSUB((CV*)SvRV(tc_code)) == XS_Mouse__Util__TypeConstraints_Item){
-            /* built-in type constraints */
-            mouse_tc const id = CvXSUBANY((CV*)SvRV(tc_code)).any_i32;
-            av_store(xa, MOUSE_XA_TC_CODE, newSViv(id));
-        }
-        else{
-            av_store(xa, MOUSE_XA_TC_CODE, newSVsv(tc_code));
+        if(!(SvROK(tc_code) && SvTYPE(SvRV(tc_code)) == SVt_PVCV)){
+            mouse_throw_error(MOUSE_xa_attribute(xa), tc, "Not a CODE reference");
         }
     }
     else{