aboutsummaryrefslogtreecommitdiff
path: root/lstrlib.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1998-01-09 12:44:55 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1998-01-09 12:44:55 -0200
commit0e1058cfdd07a3751fce1c79b75241cf770266cf (patch)
treef8ef57ce0f480bfd3653808f17b6b10b45394633 /lstrlib.c
parent26679b1a48de4f7cfcde985764cb31c78ece4fc3 (diff)
downloadlua-0e1058cfdd07a3751fce1c79b75241cf770266cf.tar.gz
lua-0e1058cfdd07a3751fce1c79b75241cf770266cf.tar.bz2
lua-0e1058cfdd07a3751fce1c79b75241cf770266cf.zip
small optimizations in switch order
Diffstat (limited to 'lstrlib.c')
-rw-r--r--lstrlib.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/lstrlib.c b/lstrlib.c
index cca70bc5..34b9da42 100644
--- a/lstrlib.c
+++ b/lstrlib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lstrlib.c,v 1.4 1997/12/15 17:58:49 roberto Exp roberto $ 2** $Id: lstrlib.c,v 1.5 1997/12/17 20:48:58 roberto Exp roberto $
3** Standard library for strings and pattern-matching 3** Standard library for strings and pattern-matching
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -165,14 +165,14 @@ static int matchclass (int c, int cl)
165 int res; 165 int res;
166 if (c == 0) return 0; 166 if (c == 0) return 0;
167 switch (tolower((unsigned char)cl)) { 167 switch (tolower((unsigned char)cl)) {
168 case 'a' : res = isalpha((unsigned char)c); break; 168 case 'w' : res = isalnum((unsigned char)c); break;
169 case 'c' : res = iscntrl((unsigned char)c); break;
170 case 'd' : res = isdigit((unsigned char)c); break; 169 case 'd' : res = isdigit((unsigned char)c); break;
171 case 'l' : res = islower((unsigned char)c); break;
172 case 'p' : res = ispunct((unsigned char)c); break;
173 case 's' : res = isspace((unsigned char)c); break; 170 case 's' : res = isspace((unsigned char)c); break;
171 case 'a' : res = isalpha((unsigned char)c); break;
172 case 'p' : res = ispunct((unsigned char)c); break;
173 case 'l' : res = islower((unsigned char)c); break;
174 case 'u' : res = isupper((unsigned char)c); break; 174 case 'u' : res = isupper((unsigned char)c); break;
175 case 'w' : res = isalnum((unsigned char)c); break; 175 case 'c' : res = iscntrl((unsigned char)c); break;
176 default: return (cl == c); 176 default: return (cl == c);
177 } 177 }
178 return (islower((unsigned char)cl) ? res : !res); 178 return (islower((unsigned char)cl) ? res : !res);
@@ -182,12 +182,12 @@ static int matchclass (int c, int cl)
182int luaI_singlematch (int c, char *p, char **ep) 182int luaI_singlematch (int c, char *p, char **ep)
183{ 183{
184 switch (*p) { 184 switch (*p) {
185 case '\0':
186 *ep = p;
187 return 0;
188 case '.': 185 case '.':
189 *ep = p+1; 186 *ep = p+1;
190 return (c != 0); 187 return (c != 0);
188 case '\0':
189 *ep = p;
190 return 0;
191 case ESC: 191 case ESC:
192 if (*(++p) == '\0') 192 if (*(++p) == '\0')
193 luaL_verror("incorrect pattern (ends with `%c')", ESC); 193 luaL_verror("incorrect pattern (ends with `%c')", ESC);
@@ -294,6 +294,12 @@ static char *match (char *s, char *p, struct Capture *cap)
294 return res; 294 return res;
295 p=ep+1; goto init; /* else return match(s, ep+1, cap); */ 295 p=ep+1; goto init; /* else return match(s, ep+1, cap); */
296 } 296 }
297 case '?': { /* optional */
298 char *res;
299 if (s1 && (res = match(s1, ep+1, cap)))
300 return res;
301 p=ep+1; goto init; /* else return match(s, ep+1, cap); */
302 }
297 case '-': { /* repetition */ 303 case '-': { /* repetition */
298 char *res; 304 char *res;
299 if ((res = match(s, ep+1, cap)) != 0) 305 if ((res = match(s, ep+1, cap)) != 0)
@@ -305,12 +311,6 @@ static char *match (char *s, char *p, struct Capture *cap)
305 else 311 else
306 return NULL; 312 return NULL;
307 } 313 }
308 case '?': { /* optional */
309 char *res;
310 if (s1 && (res = match(s1, ep+1, cap)))
311 return res;
312 p=ep+1; goto init; /* else return match(s, ep+1, cap); */
313 }
314 default: 314 default:
315 if (s1) { s=s1; p=ep; goto init; } /* return match(s1, ep, cap); */ 315 if (s1) { s=s1; p=ep; goto init; } /* return match(s1, ep, cap); */
316 else return NULL; 316 else return NULL;