stop using excludes within moose, since it's no longer necessary
[gitmo/Moose.git] / xs / Moose.xs
index b4945ef..06b983e 100644 (file)
@@ -86,20 +86,48 @@ unset_export_flag (pTHX_ SV *sv, MAGIC *mymg)
     return 0;
 }
 
-EXTERN_C XS(boot_Class__MOP);
-EXTERN_C XS(boot_Class__MOP__Mixin__HasAttributes);
-EXTERN_C XS(boot_Class__MOP__Mixin__HasMethods);
-EXTERN_C XS(boot_Class__MOP__Package);
-EXTERN_C XS(boot_Class__MOP__Mixin__AttributeCore);
-EXTERN_C XS(boot_Class__MOP__Method);
-EXTERN_C XS(boot_Class__MOP__Method__Inlined);
-EXTERN_C XS(boot_Class__MOP__Method__Generated);
-EXTERN_C XS(boot_Class__MOP__Class);
-EXTERN_C XS(boot_Class__MOP__Attribute);
-EXTERN_C XS(boot_Class__MOP__Instance);
+#ifndef SvRXOK
+/* SvRXOK appeared before SVt_REGEXP did, so this implementation assumes magic
+ * based qr//. Note re::is_regexp isn't in 5.8, hence the need for this XS.
+ */
+#define SvRXOK(sv) is_regexp(aTHX_ sv)
+
+STATIC int
+is_regexp (pTHX_ SV* sv) {
+    SV* tmpsv;
+
+    if (SvMAGICAL(sv)) {
+        mg_get(sv);
+    }
+
+    if (SvROK(sv) &&
+        (tmpsv = (SV*) SvRV(sv)) &&
+        SvTYPE(tmpsv) == SVt_PVMG &&
+        (mg_find(tmpsv, PERL_MAGIC_qr))) {
+        return TRUE;
+    }
+
+    return FALSE;
+}
+#endif
+
+XS_EXTERNAL(boot_Class__MOP);
+XS_EXTERNAL(boot_Class__MOP__Mixin__HasAttributes);
+XS_EXTERNAL(boot_Class__MOP__Mixin__HasMethods);
+XS_EXTERNAL(boot_Class__MOP__Package);
+XS_EXTERNAL(boot_Class__MOP__Mixin__AttributeCore);
+XS_EXTERNAL(boot_Class__MOP__Method);
+XS_EXTERNAL(boot_Class__MOP__Method__Inlined);
+XS_EXTERNAL(boot_Class__MOP__Method__Generated);
+XS_EXTERNAL(boot_Class__MOP__Method__Overload);
+XS_EXTERNAL(boot_Class__MOP__Class);
+XS_EXTERNAL(boot_Class__MOP__Attribute);
+XS_EXTERNAL(boot_Class__MOP__Instance);
 
 MODULE = Moose  PACKAGE = Moose::Exporter
 
+PROTOTYPES: DISABLE
+
 BOOT:
     mop_prehash_keys();
 
@@ -111,6 +139,7 @@ BOOT:
     MOP_CALL_BOOT (boot_Class__MOP__Method);
     MOP_CALL_BOOT (boot_Class__MOP__Method__Inlined);
     MOP_CALL_BOOT (boot_Class__MOP__Method__Generated);
+    MOP_CALL_BOOT (boot_Class__MOP__Method__Overload);
     MOP_CALL_BOOT (boot_Class__MOP__Class);
     MOP_CALL_BOOT (boot_Class__MOP__Attribute);
     MOP_CALL_BOOT (boot_Class__MOP__Instance);
@@ -126,3 +155,16 @@ _export_is_flagged (SV *sv)
         RETVAL = export_flag_is_set(aTHX_ sv);
     OUTPUT:
         RETVAL
+
+MODULE = Moose  PACKAGE = Moose::Util::TypeConstraints::Builtins
+
+bool
+_RegexpRef (SV *sv=NULL)
+    INIT:
+        if (!items) {
+            sv = DEFSV;
+        }
+    CODE:
+        RETVAL = SvRXOK(sv);
+    OUTPUT:
+        RETVAL