diff options
author | Nicholas Clark <nick@ccl4.org> | 2005-01-04 19:32:01 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2005-01-04 19:32:01 +0000 |
commit | 8cad210e12216ccddc97072654425cc8a94696ff (patch) | |
tree | 052f337f291e757771aea36cfeadf7b00362136d /xsutils.c | |
parent | 42262798c481d45af93e570836f42d0cd872e008 (diff) | |
download | perl-8cad210e12216ccddc97072654425cc8a94696ff.tar.gz |
Make the switch statement discriminate similar names more
efficiently.
p4raw-id: //depot/perl@23745
Diffstat (limited to 'xsutils.c')
-rw-r--r-- | xsutils.c | 33 |
1 files changed, 13 insertions, 20 deletions
@@ -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); |