From: Nicholas Clark Date: Tue, 4 Jan 2005 19:32:01 +0000 (+0000) Subject: Make the switch statement discriminate similar names more X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=8cad210e12216ccddc97072654425cc8a94696ff;p=p5sagit%2Fp5-mst-13.2.git Make the switch statement discriminate similar names more efficiently. p4raw-id: //depot/perl@23745 --- diff --git a/xsutils.c b/xsutils.c index 59500bc..49aeeca 100644 --- a/xsutils.c +++ b/xsutils.c @@ -72,7 +72,7 @@ modify_SV_attributes(pTHX_ SV *sv, SV **retlist, SV **attrlist, int numattrs) case SVt_PVCV: switch ((int)len) { case 9: - if (strEQ(name, "assertion")) { + if (memEQ(name, "assertion", 9)) { if (negated) CvFLAGS((CV*)sv) &= ~CVf_ASSERTION; else @@ -81,27 +81,20 @@ modify_SV_attributes(pTHX_ SV *sv, SV **retlist, SV **attrlist, int numattrs) } break; 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 @@ -109,8 +102,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 @@ -125,17 +118,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);