X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=universal.c;h=fa0ccd309b5536d50376a472c1d4ecbff7358096;hb=4d7c789858ca4beacd2cf4028e969fabc2a97426;hp=01e2fe46a4e5d7c77cb7197f9343b262238cc170;hpb=86aa3d53944626afcd8ef8309b4b4aa32f7968c9;p=p5sagit%2Fp5-mst-13.2.git diff --git a/universal.c b/universal.c index 01e2fe4..fa0ccd3 100644 --- a/universal.c +++ b/universal.c @@ -161,7 +161,7 @@ Perl_sv_does(pTHX_ SV *sv, const char *name) XPUSHs(sv_2mortal(newSVpv(name, 0))); PUTBACK; - methodname = sv_2mortal(newSVpv("isa", 0)); + methodname = sv_2mortal(newSVpvs("isa")); /* ugly hack: use the SvSCREAM flag so S_method_common * can figure out we're calling DOES() and not isa(), * and report eventual errors correctly. --rgs */ @@ -176,26 +176,6 @@ Perl_sv_does(pTHX_ SV *sv, const char *name) return does_it; } -regexp * -Perl_get_re_arg( pTHX_ SV *sv, U32 flags, MAGIC **mgp) { - MAGIC *mg; - if (sv) { - if (SvMAGICAL(sv)) - mg_get(sv); - if (SvROK(sv) && - (sv = (SV*)SvRV(sv)) && /* assign deliberate */ - SvTYPE(sv) == SVt_PVMG && - (mg = mg_find(sv, PERL_MAGIC_qr))) /* assign deliberate */ - { - if (mgp) *mgp = mg; - return (regexp *)mg->mg_obj; - } - } - if (mgp) *mgp = NULL; - return ((flags && PL_curpm) ? PM_GETRE(PL_curpm) : NULL); -} - - PERL_XS_EXPORT_C void XS_UNIVERSAL_isa(pTHX_ CV *cv); PERL_XS_EXPORT_C void XS_UNIVERSAL_can(pTHX_ CV *cv); PERL_XS_EXPORT_C void XS_UNIVERSAL_DOES(pTHX_ CV *cv); @@ -1075,22 +1055,17 @@ XS(XS_re_is_regexp) { dVAR; dXSARGS; + PERL_UNUSED_VAR(cv); + if (items != 1) Perl_croak(aTHX_ "Usage: %s(%s)", "re::is_regexp", "sv"); - PERL_UNUSED_VAR(cv); /* -W */ - PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; - { - SV * sv = ST(0); - if ( Perl_get_re_arg( aTHX_ sv, 0, NULL ) ) - { - XSRETURN_YES; - } else { - XSRETURN_NO; - } - /* NOTREACHED */ - PUTBACK; - return; + + if (SvRXOK(ST(0))) { + XSRETURN_YES; + } else { + XSRETURN_NO; } } @@ -1143,11 +1118,11 @@ XS(XS_re_regname) XSRETURN_UNDEF; if (items == 2 && SvTRUE(ST(1))) { - flags = RXf_HASH_ALL; + flags = RXapif_ALL; } else { - flags = RXf_HASH_ONE; + flags = RXapif_ONE; } - ret = CALLREG_NAMED_BUFF_FETCH(rx, ST(0), (flags | RXf_HASH_REGNAME)); + ret = CALLREG_NAMED_BUFF_FETCH(rx, ST(0), (flags | RXapif_REGNAME)); if (ret) { if (SvROK(ret)) @@ -1182,14 +1157,14 @@ XS(XS_re_regnames) XSRETURN_UNDEF; if (items == 1 && SvTRUE(ST(0))) { - flags = RXf_HASH_ALL; + flags = RXapif_ALL; } else { - flags = RXf_HASH_ONE; + flags = RXapif_ONE; } SP -= items; - ret = CALLREG_NAMED_BUFF_ALL(rx, (flags | RXf_HASH_REGNAMES)); + ret = CALLREG_NAMED_BUFF_ALL(rx, (flags | RXapif_REGNAMES)); SPAGAIN; @@ -1452,8 +1427,8 @@ XS(XS_Tie_Hash_NamedCapture_flags) if (items != 0) Perl_croak(aTHX_ "Usage: Tie::Hash::NamedCapture::flags()"); - XPUSHs(sv_2mortal(newSVuv(RXf_HASH_ONE))); - XPUSHs(sv_2mortal(newSVuv(RXf_HASH_ALL))); + XPUSHs(sv_2mortal(newSVuv(RXapif_ONE))); + XPUSHs(sv_2mortal(newSVuv(RXapif_ALL))); PUTBACK; return; }