X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=xsutils.c;h=a20b0d26586f13a754a5fd72b6e51234617d5ec5;hb=e1ec3a884f8d8c64eb7e391b2a363f47cbeed570;hp=17b06234fe144bdcc8eb5997cbd4fea3adafdbf1;hpb=4c79ee7a1e7564ef83d0ac25d6677fdebb3ec7aa;p=p5sagit%2Fp5-mst-13.2.git diff --git a/xsutils.c b/xsutils.c index 17b0623..a20b0d2 100644 --- a/xsutils.c +++ b/xsutils.c @@ -1,6 +1,7 @@ /* xsutils.c * - * Copyright (c) 1999-2003, Larry Wall + * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 + * by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -45,7 +46,7 @@ void XS_attributes_bootstrap(pTHX_ CV *cv); void Perl_boot_core_xsutils(pTHX) { - char *file = __FILE__; + const char file[] = __FILE__; newXS("attributes::bootstrap", XS_attributes_bootstrap, file); } @@ -70,28 +71,32 @@ modify_SV_attributes(pTHX_ SV *sv, SV **retlist, SV **attrlist, int numattrs) switch (SvTYPE(sv)) { case SVt_PVCV: switch ((int)len) { +#ifdef CVf_ASSERTION + case 9: + if (memEQ(name, "assertion", 9)) { + if (negated) + CvFLAGS((CV*)sv) &= ~CVf_ASSERTION; + else + CvFLAGS((CV*)sv) |= CVf_ASSERTION; + continue; + } + break; +#endif case 6: - switch (*name) { - case 'a': - if (strEQ(name, "assertion")) { - if (negated) - CvFLAGS((CV*)sv) &= ~CVf_ASSERTION; - else - CvFLAGS((CV*)sv) |= CVf_ASSERTION; - continue; - } - break; + switch (name[3]) { case 'l': #ifdef CVf_LVALUE - if (strEQ(name, "lvalue")) { + if (memEQ(name, "lvalue", 6)) { if (negated) CvFLAGS((CV*)sv) &= ~CVf_LVALUE; else CvFLAGS((CV*)sv) |= CVf_LVALUE; continue; } + break; + case 'k': #endif /* defined CVf_LVALUE */ - if (strEQ(name, "locked")) { + if (memEQ(name, "locked", 6)) { if (negated) CvFLAGS((CV*)sv) &= ~CVf_LOCKED; else @@ -99,8 +104,8 @@ modify_SV_attributes(pTHX_ SV *sv, SV **retlist, SV **attrlist, int numattrs) continue; } break; - case 'm': - if (strEQ(name, "method")) { + case 'h': + if (memEQ(name, "method", 6)) { if (negated) CvFLAGS((CV*)sv) &= ~CVf_METHOD; else @@ -108,15 +113,6 @@ modify_SV_attributes(pTHX_ SV *sv, SV **retlist, SV **attrlist, int numattrs) continue; } break; - case 'u': - if (strEQ(name, "unique")) { - if (negated) - GvUNIQUE_off(CvGV((CV*)sv)); - else - GvUNIQUE_on(CvGV((CV*)sv)); - continue; - } - break; } break; } @@ -124,17 +120,17 @@ modify_SV_attributes(pTHX_ SV *sv, SV **retlist, SV **attrlist, int numattrs) default: switch ((int)len) { case 6: - switch (*name) { - case 's': - if (strEQ(name, "shared")) { + switch (name[5]) { + case 'd': + if (memEQ(name, "share", 5)) { if (negated) Perl_croak(aTHX_ "A variable may not be unshared"); SvSHARE(sv); continue; } break; - case 'u': - if (strEQ(name, "unique")) { + case 'e': + if (memEQ(name, "uniqu", 5)) { if (SvTYPE(sv) == SVt_PVGV) { if (negated) GvUNIQUE_off(sv); @@ -163,7 +159,7 @@ modify_SV_attributes(pTHX_ SV *sv, SV **retlist, SV **attrlist, int numattrs) XS(XS_attributes_bootstrap) { dXSARGS; - char *file = __FILE__; + const char file[] = __FILE__; if( items > 1 ) Perl_croak(aTHX_ "Usage: attributes::bootstrap $module"); @@ -247,11 +243,7 @@ XS(XS_attributes__guess_stash) { dXSARGS; SV *rv, *sv; -#ifdef dXSTARGET - dXSTARGET; -#else - SV * TARG = sv_newmortal(); -#endif + dXSTARG; if (items != 1) { usage: @@ -295,9 +287,7 @@ usage: sv_setpv(TARG, HvNAME(stash)); } -#ifdef dXSTARGET SvSETMAGIC(TARG); -#endif XSRETURN(1); } @@ -305,11 +295,7 @@ XS(XS_attributes_reftype) { dXSARGS; SV *rv, *sv; -#ifdef dXSTARGET - dXSTARGET; -#else - SV * TARG = sv_newmortal(); -#endif + dXSTARG; if (items != 1) { usage: @@ -325,9 +311,7 @@ usage: goto usage; sv = SvRV(rv); sv_setpv(TARG, sv_reftype(sv, 0)); -#ifdef dXSTARGET SvSETMAGIC(TARG); -#endif XSRETURN(1); } @@ -335,11 +319,6 @@ usage: XS(XS_attributes__warn_reserved) { dXSARGS; -#ifdef dXSTARGET - dXSTARGET; -#else - SV * TARG = sv_newmortal(); -#endif if (items != 0) { Perl_croak(aTHX_ @@ -347,11 +326,7 @@ XS(XS_attributes__warn_reserved) } EXTEND(SP,1); - ST(0) = TARG; - sv_setiv(TARG, ckWARN(WARN_RESERVED) != 0); -#ifdef dXSTARGET - SvSETMAGIC(TARG); -#endif + ST(0) = boolSV(ckWARN(WARN_RESERVED)); XSRETURN(1); }