Mouse::Util::does_role() respects $thing->does() method
[gitmo/Mouse.git] / xs-src / MouseUtil.xs
index 2d557a6..3ec7d8c 100644 (file)
@@ -112,10 +112,13 @@ mouse_throw_error(SV* const metaobject, SV* const data /* not used */, const cha
             mPUSHs(newSVpvs("depth"));
             mPUSHi(-1);
         }
-
         PUTBACK;
-
-        call_method("throw_error", G_VOID);
+        if(SvOK(metaobject)) {
+            call_method("throw_error", G_VOID);
+        }
+        else {
+            call_pv("Mouse::Util::throw_error", G_VOID);
+        }
         croak("throw_error() did not throw the error (%"SVf")", message);
     }
 }
@@ -320,7 +323,7 @@ mouse_install_sub(pTHX_ GV* const gv, SV* const code_ref) {
 
     if(GvCVu(gv)){ /* delete *slot{gv} to work around "redefine" warning */
         SvREFCNT_dec(GvCV(gv));
-        GvCV(gv) = NULL;
+        GvCV_set(gv, NULL);
     }
 
     sv_setsv_mg((SV*)gv, code_ref); /* *gv = $code_ref */