X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=xs%2FMoose.xs;h=06b983e4d6599b1a5bf120c2a556fd55b6600ba8;hb=00bbc132f9e1cb2b1a44aa287887cafa27a84577;hp=b4945ef3587b072bae772046c2bb3b45a443000e;hpb=38bf2a2585e26a47c919fd4c286b7716acb51c00;p=gitmo%2FMoose.git diff --git a/xs/Moose.xs b/xs/Moose.xs index b4945ef..06b983e 100644 --- a/xs/Moose.xs +++ b/xs/Moose.xs @@ -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