summaryrefslogtreecommitdiff
path: root/xsutils.c
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2005-01-04 19:32:01 +0000
committerNicholas Clark <nick@ccl4.org>2005-01-04 19:32:01 +0000
commit8cad210e12216ccddc97072654425cc8a94696ff (patch)
tree052f337f291e757771aea36cfeadf7b00362136d /xsutils.c
parent42262798c481d45af93e570836f42d0cd872e008 (diff)
downloadperl-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.c33
1 files changed, 13 insertions, 20 deletions
diff --git a/xsutils.c b/xsutils.c
index 59500bc459..49aeeca13d 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);