aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2010-01-04 14:37:19 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2010-01-04 14:37:19 -0200
commit1fd4c482a03770384b8cedae466c85dd3346205a (patch)
tree5c82db76f87637c0fbfb7e5f8357ad9a5b1010ca
parent35e729fa6d96f39015c991e4036fbdb0a9c8977b (diff)
downloadlua-1fd4c482a03770384b8cedae466c85dd3346205a.tar.gz
lua-1fd4c482a03770384b8cedae466c85dd3346205a.tar.bz2
lua-1fd4c482a03770384b8cedae466c85dd3346205a.zip
reorganization of switch in function 'match' (details)
-rw-r--r--lstrlib.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/lstrlib.c b/lstrlib.c
index c34a82ef..c3a424f9 100644
--- a/lstrlib.c
+++ b/lstrlib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lstrlib.c,v 1.146 2009/12/17 12:26:09 roberto Exp roberto $ 2** $Id: lstrlib.c,v 1.147 2009/12/17 12:50:20 roberto Exp roberto $
3** Standard library for string operations and pattern-matching 3** Standard library for string operations and pattern-matching
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -384,7 +384,15 @@ static const char *match (MatchState *ms, const char *s, const char *p) {
384 case ')': { /* end capture */ 384 case ')': { /* end capture */
385 return end_capture(ms, s, p+1); 385 return end_capture(ms, s, p+1);
386 } 386 }
387 case L_ESC: { 387 case '\0': { /* end of pattern */
388 return s; /* match succeeded */
389 }
390 case '$': {
391 if (*(p+1) == '\0') /* is the `$' the last char in pattern? */
392 return (s == ms->src_end) ? s : NULL; /* check end of string */
393 else goto dflt;
394 }
395 case L_ESC: { /* escaped sequences not in the format class[*+?-]? */
388 switch (*(p+1)) { 396 switch (*(p+1)) {
389 case 'b': { /* balanced string? */ 397 case 'b': { /* balanced string? */
390 s = matchbalance(ms, s, p+2); 398 s = matchbalance(ms, s, p+2);
@@ -403,25 +411,17 @@ static const char *match (MatchState *ms, const char *s, const char *p) {
403 !matchbracketclass(uchar(*s), p, ep-1)) return NULL; 411 !matchbracketclass(uchar(*s), p, ep-1)) return NULL;
404 p=ep; goto init; /* else return match(ms, s, ep); */ 412 p=ep; goto init; /* else return match(ms, s, ep); */
405 } 413 }
406 default: { 414 case '0': case '1': case '2': case '3':
407 if (isdigit(uchar(*(p+1)))) { /* capture results (%0-%9)? */ 415 case '4': case '5': case '6': case '7':
408 s = match_capture(ms, s, uchar(*(p+1))); 416 case '8': case '9': { /* capture results (%0-%9)? */
409 if (s == NULL) return NULL; 417 s = match_capture(ms, s, uchar(*(p+1)));
410 p+=2; goto init; /* else return match(ms, s, p+2) */ 418 if (s == NULL) return NULL;
411 } 419 p+=2; goto init; /* else return match(ms, s, p+2) */
412 goto dflt; /* case default */
413 } 420 }
421 default: break; /* go through to 'dflt' */
414 } 422 }
415 } 423 }
416 case '\0': { /* end of pattern */ 424 default: dflt: { /* pattern class plus optional sufix */
417 return s; /* match succeeded */
418 }
419 case '$': {
420 if (*(p+1) == '\0') /* is the `$' the last char in pattern? */
421 return (s == ms->src_end) ? s : NULL; /* check end of string */
422 else goto dflt;
423 }
424 default: dflt: { /* it is a pattern item */
425 const char *ep = classend(ms, p); /* points to what is next */ 425 const char *ep = classend(ms, p); /* points to what is next */
426 int m = s<ms->src_end && singlematch(uchar(*s), p, ep); 426 int m = s<ms->src_end && singlematch(uchar(*s), p, ep);
427 switch (*ep) { 427 switch (*ep) {