/[pcre]/code/trunk/pcre_exec.c
ViewVC logotype

Diff of /code/trunk/pcre_exec.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1430 by ph10, Tue Dec 31 17:44:40 2013 UTC revision 1431 by ph10, Thu Jan 2 17:41:28 2014 UTC
# Line 6  Line 6 
6  and semantics are as close as possible to those of the Perl 5 language.  and semantics are as close as possible to those of the Perl 5 language.
7    
8                         Written by Philip Hazel                         Written by Philip Hazel
9             Copyright (c) 1997-2013 University of Cambridge             Copyright (c) 1997-2014 University of Cambridge
10    
11  -----------------------------------------------------------------------------  -----------------------------------------------------------------------------
12  Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
# Line 134  pcre_uint32 c; Line 134  pcre_uint32 c;
134  BOOL utf = md->utf;  BOOL utf = md->utf;
135  if (is_subject && length > md->end_subject - p) length = md->end_subject - p;  if (is_subject && length > md->end_subject - p) length = md->end_subject - p;
136  while (length-- > 0)  while (length-- > 0)
137    if (isprint(c = *p++)) printf("%c", (char)c); else printf("\\x{%02x}", c);    if (isprint(c = UCHAR21INCTEST(p))) printf("%c", (char)c); else printf("\\x{%02x}", c);
138  }  }
139  #endif  #endif
140    
# Line 237  if (caseless) Line 237  if (caseless)
237        {        {
238        pcre_uint32 cc, cp;        pcre_uint32 cc, cp;
239        if (eptr >= md->end_subject) return -2;   /* Partial match */        if (eptr >= md->end_subject) return -2;   /* Partial match */
240        cc = *eptr;        cc = UCHAR21TEST(eptr);
241        cp = *p;        cp = UCHAR21TEST(p);
242        if (TABLE_GET(cp, md->lcc, cp) != TABLE_GET(cc, md->lcc, cc)) return -1;        if (TABLE_GET(cp, md->lcc, cp) != TABLE_GET(cc, md->lcc, cc)) return -1;
243        p++;        p++;
244        eptr++;        eptr++;
# Line 254  else Line 254  else
254    while (length-- > 0)    while (length-- > 0)
255      {      {
256      if (eptr >= md->end_subject) return -2;   /* Partial match */      if (eptr >= md->end_subject) return -2;   /* Partial match */
257      if (*p++ != *eptr++) return -1;      if (UCHAR21INCTEST(p) != UCHAR21INCTEST(eptr)) return -1;
258      }      }
259    }    }
260    
# Line 2103  for (;;) Line 2103  for (;;)
2103              eptr + 1 >= md->end_subject &&              eptr + 1 >= md->end_subject &&
2104              NLBLOCK->nltype == NLTYPE_FIXED &&              NLBLOCK->nltype == NLTYPE_FIXED &&
2105              NLBLOCK->nllen == 2 &&              NLBLOCK->nllen == 2 &&
2106              *eptr == NLBLOCK->nl[0])              UCHAR21TEST(eptr) == NLBLOCK->nl[0])
2107            {            {
2108            md->hitend = TRUE;            md->hitend = TRUE;
2109            if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);            if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
# Line 2147  for (;;) Line 2147  for (;;)
2147            eptr + 1 >= md->end_subject &&            eptr + 1 >= md->end_subject &&
2148            NLBLOCK->nltype == NLTYPE_FIXED &&            NLBLOCK->nltype == NLTYPE_FIXED &&
2149            NLBLOCK->nllen == 2 &&            NLBLOCK->nllen == 2 &&
2150            *eptr == NLBLOCK->nl[0])            UCHAR21TEST(eptr) == NLBLOCK->nl[0])
2151          {          {
2152          md->hitend = TRUE;          md->hitend = TRUE;
2153          if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);          if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
# Line 2290  for (;;) Line 2290  for (;;)
2290          eptr + 1 >= md->end_subject &&          eptr + 1 >= md->end_subject &&
2291          NLBLOCK->nltype == NLTYPE_FIXED &&          NLBLOCK->nltype == NLTYPE_FIXED &&
2292          NLBLOCK->nllen == 2 &&          NLBLOCK->nllen == 2 &&
2293          *eptr == NLBLOCK->nl[0])          UCHAR21TEST(eptr) == NLBLOCK->nl[0])
2294        {        {
2295        md->hitend = TRUE;        md->hitend = TRUE;
2296        if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);        if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
# Line 2444  for (;;) Line 2444  for (;;)
2444          {          {
2445          SCHECK_PARTIAL();          SCHECK_PARTIAL();
2446          }          }
2447        else if (*eptr == CHAR_LF) eptr++;        else if (UCHAR21TEST(eptr) == CHAR_LF) eptr++;
2448        break;        break;
2449    
2450        case CHAR_LF:        case CHAR_LF:
# Line 3218  for (;;) Line 3218  for (;;)
3218          CHECK_PARTIAL();             /* Not SCHECK_PARTIAL() */          CHECK_PARTIAL();             /* Not SCHECK_PARTIAL() */
3219          RRETURN(MATCH_NOMATCH);          RRETURN(MATCH_NOMATCH);
3220          }          }
3221        while (length-- > 0) if (*ecode++ != *eptr++) RRETURN(MATCH_NOMATCH);        while (length-- > 0) if (*ecode++ != UCHAR21INC(eptr)) RRETURN(MATCH_NOMATCH);
3222        }        }
3223      else      else
3224  #endif  #endif
# Line 3258  for (;;) Line 3258  for (;;)
3258    
3259        if (fc < 128)        if (fc < 128)
3260          {          {
3261          pcre_uint32 cc = *eptr;          pcre_uint32 cc = UCHAR21(eptr);
3262          if (md->lcc[fc] != TABLE_GET(cc, md->lcc, cc)) RRETURN(MATCH_NOMATCH);          if (md->lcc[fc] != TABLE_GET(cc, md->lcc, cc)) RRETURN(MATCH_NOMATCH);
3263          ecode++;          ecode++;
3264          eptr++;          eptr++;
# Line 3527  for (;;) Line 3527  for (;;)
3527            SCHECK_PARTIAL();            SCHECK_PARTIAL();
3528            RRETURN(MATCH_NOMATCH);            RRETURN(MATCH_NOMATCH);
3529            }            }
3530          cc = *eptr;          cc = UCHAR21TEST(eptr);
3531          if (fc != cc && foc != cc) RRETURN(MATCH_NOMATCH);          if (fc != cc && foc != cc) RRETURN(MATCH_NOMATCH);
3532          eptr++;          eptr++;
3533          }          }
# Line 3545  for (;;) Line 3545  for (;;)
3545              SCHECK_PARTIAL();              SCHECK_PARTIAL();
3546              RRETURN(MATCH_NOMATCH);              RRETURN(MATCH_NOMATCH);
3547              }              }
3548            cc = *eptr;            cc = UCHAR21TEST(eptr);
3549            if (fc != cc && foc != cc) RRETURN(MATCH_NOMATCH);            if (fc != cc && foc != cc) RRETURN(MATCH_NOMATCH);
3550            eptr++;            eptr++;
3551            }            }
# Line 3562  for (;;) Line 3562  for (;;)
3562              SCHECK_PARTIAL();              SCHECK_PARTIAL();
3563              break;              break;
3564              }              }
3565            cc = *eptr;            cc = UCHAR21TEST(eptr);
3566            if (fc != cc && foc != cc) break;            if (fc != cc && foc != cc) break;
3567            eptr++;            eptr++;
3568            }            }
# Line 3589  for (;;) Line 3589  for (;;)
3589            SCHECK_PARTIAL();            SCHECK_PARTIAL();
3590            RRETURN(MATCH_NOMATCH);            RRETURN(MATCH_NOMATCH);
3591            }            }
3592          if (fc != *eptr++) RRETURN(MATCH_NOMATCH);          if (fc != UCHAR21INCTEST(eptr)) RRETURN(MATCH_NOMATCH);
3593          }          }
3594    
3595        if (min == max) continue;        if (min == max) continue;
# Line 3606  for (;;) Line 3606  for (;;)
3606              SCHECK_PARTIAL();              SCHECK_PARTIAL();
3607              RRETURN(MATCH_NOMATCH);              RRETURN(MATCH_NOMATCH);
3608              }              }
3609            if (fc != *eptr++) RRETURN(MATCH_NOMATCH);            if (fc != UCHAR21INCTEST(eptr)) RRETURN(MATCH_NOMATCH);
3610            }            }
3611          /* Control never gets here */          /* Control never gets here */
3612          }          }
# Line 3620  for (;;) Line 3620  for (;;)
3620              SCHECK_PARTIAL();              SCHECK_PARTIAL();
3621              break;              break;
3622              }              }
3623            if (fc != *eptr) break;            if (fc != UCHAR21TEST(eptr)) break;
3624            eptr++;            eptr++;
3625            }            }
3626          if (possessive) continue;    /* No backtracking */          if (possessive) continue;    /* No backtracking */
# Line 4375  for (;;) Line 4375  for (;;)
4375                eptr + 1 >= md->end_subject &&                eptr + 1 >= md->end_subject &&
4376                NLBLOCK->nltype == NLTYPE_FIXED &&                NLBLOCK->nltype == NLTYPE_FIXED &&
4377                NLBLOCK->nllen == 2 &&                NLBLOCK->nllen == 2 &&
4378                *eptr == NLBLOCK->nl[0])                UCHAR21(eptr) == NLBLOCK->nl[0])
4379              {              {
4380              md->hitend = TRUE;              md->hitend = TRUE;
4381              if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);              if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
# Line 4417  for (;;) Line 4417  for (;;)
4417              default: RRETURN(MATCH_NOMATCH);              default: RRETURN(MATCH_NOMATCH);
4418    
4419              case CHAR_CR:              case CHAR_CR:
4420              if (eptr < md->end_subject && *eptr == CHAR_LF) eptr++;              if (eptr < md->end_subject && UCHAR21(eptr) == CHAR_LF) eptr++;
4421              break;              break;
4422    
4423              case CHAR_LF:              case CHAR_LF:
# Line 4527  for (;;) Line 4527  for (;;)
4527              SCHECK_PARTIAL();              SCHECK_PARTIAL();
4528              RRETURN(MATCH_NOMATCH);              RRETURN(MATCH_NOMATCH);
4529              }              }
4530            cc = *eptr;            cc = UCHAR21(eptr);
4531            if (cc >= 128 || (md->ctypes[cc] & ctype_digit) == 0)            if (cc >= 128 || (md->ctypes[cc] & ctype_digit) == 0)
4532              RRETURN(MATCH_NOMATCH);              RRETURN(MATCH_NOMATCH);
4533            eptr++;            eptr++;
# Line 4544  for (;;) Line 4544  for (;;)
4544              SCHECK_PARTIAL();              SCHECK_PARTIAL();
4545              RRETURN(MATCH_NOMATCH);              RRETURN(MATCH_NOMATCH);
4546              }              }
4547            cc = *eptr;            cc = UCHAR21(eptr);
4548            if (cc < 128 && (md->ctypes[cc] & ctype_space) != 0)            if (cc < 128 && (md->ctypes[cc] & ctype_space) != 0)
4549              RRETURN(MATCH_NOMATCH);              RRETURN(MATCH_NOMATCH);
4550            eptr++;            eptr++;
# Line 4561  for (;;) Line 4561  for (;;)
4561              SCHECK_PARTIAL();              SCHECK_PARTIAL();
4562              RRETURN(MATCH_NOMATCH);              RRETURN(MATCH_NOMATCH);
4563              }              }
4564            cc = *eptr;            cc = UCHAR21(eptr);
4565            if (cc >= 128 || (md->ctypes[cc] & ctype_space) == 0)            if (cc >= 128 || (md->ctypes[cc] & ctype_space) == 0)
4566              RRETURN(MATCH_NOMATCH);              RRETURN(MATCH_NOMATCH);
4567            eptr++;            eptr++;
# Line 4578  for (;;) Line 4578  for (;;)
4578              SCHECK_PARTIAL();              SCHECK_PARTIAL();
4579              RRETURN(MATCH_NOMATCH);              RRETURN(MATCH_NOMATCH);
4580              }              }
4581            cc = *eptr;            cc = UCHAR21(eptr);
4582            if (cc < 128 && (md->ctypes[cc] & ctype_word) != 0)            if (cc < 128 && (md->ctypes[cc] & ctype_word) != 0)
4583              RRETURN(MATCH_NOMATCH);              RRETURN(MATCH_NOMATCH);
4584            eptr++;            eptr++;
# Line 4595  for (;;) Line 4595  for (;;)
4595              SCHECK_PARTIAL();              SCHECK_PARTIAL();
4596              RRETURN(MATCH_NOMATCH);              RRETURN(MATCH_NOMATCH);
4597              }              }
4598            cc = *eptr;            cc = UCHAR21(eptr);
4599            if (cc >= 128 || (md->ctypes[cc] & ctype_word) == 0)            if (cc >= 128 || (md->ctypes[cc] & ctype_word) == 0)
4600              RRETURN(MATCH_NOMATCH);              RRETURN(MATCH_NOMATCH);
4601            eptr++;            eptr++;
# Line 5156  for (;;) Line 5156  for (;;)
5156                {                {
5157                default: RRETURN(MATCH_NOMATCH);                default: RRETURN(MATCH_NOMATCH);
5158                case CHAR_CR:                case CHAR_CR:
5159                if (eptr < md->end_subject && *eptr == CHAR_LF) eptr++;                if (eptr < md->end_subject && UCHAR21(eptr) == CHAR_LF) eptr++;
5160                break;                break;
5161    
5162                case CHAR_LF:                case CHAR_LF:
# Line 5695  for (;;) Line 5695  for (;;)
5695                    eptr + 1 >= md->end_subject &&                    eptr + 1 >= md->end_subject &&
5696                    NLBLOCK->nltype == NLTYPE_FIXED &&                    NLBLOCK->nltype == NLTYPE_FIXED &&
5697                    NLBLOCK->nllen == 2 &&                    NLBLOCK->nllen == 2 &&
5698                    *eptr == NLBLOCK->nl[0])                    UCHAR21(eptr) == NLBLOCK->nl[0])
5699                  {                  {
5700                  md->hitend = TRUE;                  md->hitend = TRUE;
5701                  if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);                  if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
# Line 5721  for (;;) Line 5721  for (;;)
5721                    eptr + 1 >= md->end_subject &&                    eptr + 1 >= md->end_subject &&
5722                    NLBLOCK->nltype == NLTYPE_FIXED &&                    NLBLOCK->nltype == NLTYPE_FIXED &&
5723                    NLBLOCK->nllen == 2 &&                    NLBLOCK->nllen == 2 &&
5724                    *eptr == NLBLOCK->nl[0])                    UCHAR21(eptr) == NLBLOCK->nl[0])
5725                  {                  {
5726                  md->hitend = TRUE;                  md->hitend = TRUE;
5727                  if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);                  if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
# Line 5778  for (;;) Line 5778  for (;;)
5778              if (c == CHAR_CR)              if (c == CHAR_CR)
5779                {                {
5780                if (++eptr >= md->end_subject) break;                if (++eptr >= md->end_subject) break;
5781                if (*eptr == CHAR_LF) eptr++;                if (UCHAR21(eptr) == CHAR_LF) eptr++;
5782                }                }
5783              else              else
5784                {                {
# Line 5941  for (;;) Line 5941  for (;;)
5941            if (rrc != MATCH_NOMATCH) RRETURN(rrc);            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
5942            eptr--;            eptr--;
5943            BACKCHAR(eptr);            BACKCHAR(eptr);
5944            if (ctype == OP_ANYNL && eptr > pp  && *eptr == CHAR_NL &&            if (ctype == OP_ANYNL && eptr > pp  && UCHAR21(eptr) == CHAR_NL &&
5945                eptr[-1] == CHAR_CR) eptr--;                UCHAR21(eptr - 1) == CHAR_CR) eptr--;
5946            }            }
5947          }          }
5948        else        else
# Line 6789  for(;;) Line 6789  for(;;)
6789    
6790        if (first_char != first_char2)        if (first_char != first_char2)
6791          while (start_match < end_subject &&          while (start_match < end_subject &&
6792            (smc = *start_match) != first_char && smc != first_char2)            (smc = UCHAR21TEST(start_match)) != first_char && smc != first_char2)
6793            start_match++;            start_match++;
6794        else        else
6795          while (start_match < end_subject && *start_match != first_char)          while (start_match < end_subject && UCHAR21TEST(start_match) != first_char)
6796            start_match++;            start_match++;
6797        }        }
6798    
# Line 6824  for(;;) Line 6824  for(;;)
6824          if (start_match[-1] == CHAR_CR &&          if (start_match[-1] == CHAR_CR &&
6825               (md->nltype == NLTYPE_ANY || md->nltype == NLTYPE_ANYCRLF) &&               (md->nltype == NLTYPE_ANY || md->nltype == NLTYPE_ANYCRLF) &&
6826               start_match < end_subject &&               start_match < end_subject &&
6827               *start_match == CHAR_NL)               UCHAR21TEST(start_match) == CHAR_NL)
6828            start_match++;            start_match++;
6829          }          }
6830        }        }
# Line 6835  for(;;) Line 6835  for(;;)
6835        {        {
6836        while (start_match < end_subject)        while (start_match < end_subject)
6837          {          {
6838          register pcre_uint32 c = *start_match;          register pcre_uint32 c = UCHAR21TEST(start_match);
6839  #ifndef COMPILE_PCRE8  #ifndef COMPILE_PCRE8
6840          if (c > 255) c = 255;          if (c > 255) c = 255;
6841  #endif  #endif
# Line 6893  for(;;) Line 6893  for(;;)
6893            {            {
6894            while (p < end_subject)            while (p < end_subject)
6895              {              {
6896              register pcre_uint32 pp = *p++;              register pcre_uint32 pp = UCHAR21INCTEST(p);
6897              if (pp == req_char || pp == req_char2) { p--; break; }              if (pp == req_char || pp == req_char2) { p--; break; }
6898              }              }
6899            }            }
# Line 6901  for(;;) Line 6901  for(;;)
6901            {            {
6902            while (p < end_subject)            while (p < end_subject)
6903              {              {
6904              if (*p++ == req_char) { p--; break; }              if (UCHAR21INCTEST(p) == req_char) { p--; break; }
6905              }              }
6906            }            }
6907    

Legend:
Removed from v.1430  
changed lines
  Added in v.1431

  ViewVC Help
Powered by ViewVC 1.1.5