/[pcre]/code/branches/pcre16/pcre_exec.c
ViewVC logotype

Diff of /code/branches/pcre16/pcre_exec.c

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

revision 462 by ph10, Sat Oct 17 19:55:02 2009 UTC revision 482 by ph10, Mon Jan 4 15:55:46 2010 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-2009 University of Cambridge             Copyright (c) 1997-2010 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 89  static const char rep_max[] = { 0, 0, 0, Line 89  static const char rep_max[] = { 0, 0, 0,
89    
90    
91    
92  #ifdef DEBUG  #ifdef PCRE_DEBUG
93  /*************************************************  /*************************************************
94  *        Debugging function to print chars       *  *        Debugging function to print chars       *
95  *************************************************/  *************************************************/
# Line 141  match_ref(int offset, register USPTR ept Line 141  match_ref(int offset, register USPTR ept
141  {  {
142  USPTR p = md->start_subject + md->offset_vector[offset];  USPTR p = md->start_subject + md->offset_vector[offset];
143    
144  #ifdef DEBUG  #ifdef PCRE_DEBUG
145  if (eptr >= md->end_subject)  if (eptr >= md->end_subject)
146    printf("matching subject <null>");    printf("matching subject <null>");
147  else  else
# Line 254  actuall used in this definition. */ Line 254  actuall used in this definition. */
254  #ifndef NO_RECURSE  #ifndef NO_RECURSE
255  #define REGISTER register  #define REGISTER register
256    
257  #ifdef DEBUG  #ifdef PCRE_DEBUG
258  #define RMATCH(ra,rb,rc,rd,re,rf,rg,rw) \  #define RMATCH(ra,rb,rc,rd,re,rf,rg,rw) \
259    { \    { \
260    printf("match() called in line %d\n", __LINE__); \    printf("match() called in line %d\n", __LINE__); \
# Line 622  TAIL_RECURSE: Line 622  TAIL_RECURSE:
622  /* OK, now we can get on with the real code of the function. Recursive calls  /* OK, now we can get on with the real code of the function. Recursive calls
623  are specified by the macro RMATCH and RRETURN is used to return. When  are specified by the macro RMATCH and RRETURN is used to return. When
624  NO_RECURSE is *not* defined, these just turn into a recursive call to match()  NO_RECURSE is *not* defined, these just turn into a recursive call to match()
625  and a "return", respectively (possibly with some debugging if DEBUG is  and a "return", respectively (possibly with some debugging if PCRE_DEBUG is
626  defined). However, RMATCH isn't like a function call because it's quite a  defined). However, RMATCH isn't like a function call because it's quite a
627  complicated macro. It has to be used in one particular way. This shouldn't,  complicated macro. It has to be used in one particular way. This shouldn't,
628  however, impact performance when true recursion is being used. */  however, impact performance when true recursion is being used. */
# Line 713  for (;;) Line 713  for (;;)
713      number = GET2(ecode, 1+LINK_SIZE);      number = GET2(ecode, 1+LINK_SIZE);
714      offset = number << 1;      offset = number << 1;
715    
716  #ifdef DEBUG  #ifdef PCRE_DEBUG
717      printf("start bracket %d\n", number);      printf("start bracket %d\n", number);
718      printf("subject=");      printf("subject=");
719      pchars(eptr, 16, TRUE, md);      pchars(eptr, 16, TRUE, md);
# Line 1039  for (;;) Line 1039  for (;;)
1039      number = GET2(ecode, 1);      number = GET2(ecode, 1);
1040      offset = number << 1;      offset = number << 1;
1041    
1042  #ifdef DEBUG  #ifdef PCRE_DEBUG
1043        printf("end bracket %d at *ACCEPT", number);        printf("end bracket %d at *ACCEPT", number);
1044        printf("\n");        printf("\n");
1045  #endif  #endif
# Line 1133  for (;;) Line 1133  for (;;)
1133      offset_top = md->end_offset_top;      offset_top = md->end_offset_top;
1134      continue;      continue;
1135    
1136      /* Negative assertion: all branches must fail to match */      /* Negative assertion: all branches must fail to match. Encountering SKIP,
1137        PRUNE, or COMMIT means we must assume failure without checking subsequent
1138        branches. */
1139    
1140      case OP_ASSERT_NOT:      case OP_ASSERT_NOT:
1141      case OP_ASSERTBACK_NOT:      case OP_ASSERTBACK_NOT:
# Line 1142  for (;;) Line 1144  for (;;)
1144        RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL, 0,        RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL, 0,
1145          RM5);          RM5);
1146        if (rrc == MATCH_MATCH) RRETURN(MATCH_NOMATCH);        if (rrc == MATCH_MATCH) RRETURN(MATCH_NOMATCH);
1147          if (rrc == MATCH_SKIP || rrc == MATCH_PRUNE || rrc == MATCH_COMMIT)
1148            {
1149            do ecode += GET(ecode,1); while (*ecode == OP_ALT);
1150            break;
1151            }
1152        if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc);        if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc);
1153        ecode += GET(ecode,1);        ecode += GET(ecode,1);
1154        }        }
# Line 1461  for (;;) Line 1468  for (;;)
1468        number = GET2(prev, 1+LINK_SIZE);        number = GET2(prev, 1+LINK_SIZE);
1469        offset = number << 1;        offset = number << 1;
1470    
1471  #ifdef DEBUG  #ifdef PCRE_DEBUG
1472        printf("end bracket %d", number);        printf("end bracket %d", number);
1473        printf("\n");        printf("\n");
1474  #endif  #endif
# Line 2146  for (;;) Line 2153  for (;;)
2153          pp = eptr;          pp = eptr;
2154          for (i = min; i < max; i++)          for (i = min; i < max; i++)
2155            {            {
2156            if (!match_ref(offset, eptr, length, md, ims))            if (!match_ref(offset, eptr, length, md, ims))
2157              {              {
2158              CHECK_PARTIAL();              CHECK_PARTIAL();
2159              break;              break;
2160              }              }
2161            eptr += length;            eptr += length;
2162            }            }
2163          while (eptr >= pp)          while (eptr >= pp)
# Line 2319  for (;;) Line 2326  for (;;)
2326            for (i = min; i < max; i++)            for (i = min; i < max; i++)
2327              {              {
2328              int len = 1;              int len = 1;
2329              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
2330                {                {
2331                SCHECK_PARTIAL();                SCHECK_PARTIAL();
2332                break;                break;
2333                }                }
2334              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
2335              if (c > 255)              if (c > 255)
2336                {                {
# Line 2349  for (;;) Line 2356  for (;;)
2356            {            {
2357            for (i = min; i < max; i++)            for (i = min; i < max; i++)
2358              {              {
2359              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
2360                {                {
2361                SCHECK_PARTIAL();                SCHECK_PARTIAL();
2362                break;                break;
2363                }                }
2364              c = *eptr;              c = *eptr;
2365              if ((data[c/8] & (1 << (c&7))) == 0) break;              if ((data[c/8] & (1 << (c&7))) == 0) break;
2366              eptr++;              eptr++;
# Line 2458  for (;;) Line 2465  for (;;)
2465          for (i = min; i < max; i++)          for (i = min; i < max; i++)
2466            {            {
2467            int len = 1;            int len = 1;
2468            if (eptr >= md->end_subject)            if (eptr >= md->end_subject)
2469              {              {
2470              SCHECK_PARTIAL();              SCHECK_PARTIAL();
2471              break;              break;
2472              }              }
2473            GETCHARLENTEST(c, eptr, len);            GETCHARLENTEST(c, eptr, len);
2474            if (!_pcre_xclass(c, data)) break;            if (!_pcre_xclass(c, data)) break;
2475            eptr += len;            eptr += len;
# Line 2701  for (;;) Line 2708  for (;;)
2708                       eptr <= md->end_subject - oclength &&                       eptr <= md->end_subject - oclength &&
2709                       memcmp(eptr, occhars, oclength) == 0) eptr += oclength;                       memcmp(eptr, occhars, oclength) == 0) eptr += oclength;
2710  #endif  /* SUPPORT_UCP */  #endif  /* SUPPORT_UCP */
2711              else              else
2712                {                {
2713                CHECK_PARTIAL();                CHECK_PARTIAL();
2714                break;                break;
2715                }                }
2716              }              }
2717    
2718            if (possessive) continue;            if (possessive) continue;
# Line 2783  for (;;) Line 2790  for (;;)
2790          pp = eptr;          pp = eptr;
2791          for (i = min; i < max; i++)          for (i = min; i < max; i++)
2792            {            {
2793            if (eptr >= md->end_subject)            if (eptr >= md->end_subject)
2794              {              {
2795              SCHECK_PARTIAL();              SCHECK_PARTIAL();
2796              break;              break;
2797              }              }
2798            if (fc != md->lcc[*eptr]) break;            if (fc != md->lcc[*eptr]) break;
2799            eptr++;            eptr++;
2800            }            }
# Line 2842  for (;;) Line 2849  for (;;)
2849          pp = eptr;          pp = eptr;
2850          for (i = min; i < max; i++)          for (i = min; i < max; i++)
2851            {            {
2852            if (eptr >= md->end_subject)            if (eptr >= md->end_subject)
2853              {              {
2854              SCHECK_PARTIAL();              SCHECK_PARTIAL();
2855              break;              break;
2856              }              }
2857            if (fc != *eptr) break;            if (fc != *eptr) break;
2858            eptr++;            eptr++;
2859            }            }
# Line 3059  for (;;) Line 3066  for (;;)
3066            for (i = min; i < max; i++)            for (i = min; i < max; i++)
3067              {              {
3068              int len = 1;              int len = 1;
3069              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
3070                {                {
3071                SCHECK_PARTIAL();                SCHECK_PARTIAL();
3072                break;                break;
3073                }                }
3074              GETCHARLEN(d, eptr, len);              GETCHARLEN(d, eptr, len);
3075              if (d < 256) d = md->lcc[d];              if (d < 256) d = md->lcc[d];
3076              if (fc == d) break;              if (fc == d) break;
# Line 3084  for (;;) Line 3091  for (;;)
3091            {            {
3092            for (i = min; i < max; i++)            for (i = min; i < max; i++)
3093              {              {
3094              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
3095                {                {
3096                SCHECK_PARTIAL();                SCHECK_PARTIAL();
3097                break;                break;
3098                }                }
3099              if (fc == md->lcc[*eptr]) break;              if (fc == md->lcc[*eptr]) break;
3100              eptr++;              eptr++;
3101              }              }
# Line 3198  for (;;) Line 3205  for (;;)
3205            for (i = min; i < max; i++)            for (i = min; i < max; i++)
3206              {              {
3207              int len = 1;              int len = 1;
3208              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
3209                {                {
3210                SCHECK_PARTIAL();                SCHECK_PARTIAL();
3211                break;                break;
3212                }                }
3213              GETCHARLEN(d, eptr, len);              GETCHARLEN(d, eptr, len);
3214              if (fc == d) break;              if (fc == d) break;
3215              eptr += len;              eptr += len;
# Line 3222  for (;;) Line 3229  for (;;)
3229            {            {
3230            for (i = min; i < max; i++)            for (i = min; i < max; i++)
3231              {              {
3232              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
3233                {                {
3234                SCHECK_PARTIAL();                SCHECK_PARTIAL();
3235                break;                break;
3236                }                }
3237              if (fc == *eptr) break;              if (fc == *eptr) break;
3238              eptr++;              eptr++;
3239              }              }
# Line 3688  for (;;) Line 3695  for (;;)
3695          case OP_NOT_WORDCHAR:          case OP_NOT_WORDCHAR:
3696          for (i = 1; i <= min; i++)          for (i = 1; i <= min; i++)
3697            {            {
3698            if (eptr >= md->end_subject ||            if (eptr >= md->end_subject)
3699               (*eptr < 128 && (md->ctypes[*eptr] & ctype_word) != 0))              {
3700                SCHECK_PARTIAL();
3701                RRETURN(MATCH_NOMATCH);
3702                }
3703              if (*eptr < 128 && (md->ctypes[*eptr] & ctype_word) != 0)
3704              RRETURN(MATCH_NOMATCH);              RRETURN(MATCH_NOMATCH);
3705            while (++eptr < md->end_subject && (*eptr & 0xc0) == 0x80);            while (++eptr < md->end_subject && (*eptr & 0xc0) == 0x80);
3706            }            }
# Line 4383  for (;;) Line 4394  for (;;)
4394            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4395              {              {
4396              int len = 1;              int len = 1;
4397              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4398                {                {
4399                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4400                break;                break;
4401                }                }
4402              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4403              if (prop_fail_result) break;              if (prop_fail_result) break;
4404              eptr+= len;              eptr+= len;
# Line 4398  for (;;) Line 4409  for (;;)
4409            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4410              {              {
4411              int len = 1;              int len = 1;
4412              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4413                {                {
4414                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4415                break;                break;
4416                }                }
4417              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4418              prop_chartype = UCD_CHARTYPE(c);              prop_chartype = UCD_CHARTYPE(c);
4419              if ((prop_chartype == ucp_Lu ||              if ((prop_chartype == ucp_Lu ||
# Line 4417  for (;;) Line 4428  for (;;)
4428            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4429              {              {
4430              int len = 1;              int len = 1;
4431              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4432                {                {
4433                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4434                break;                break;
4435                }                }
4436              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4437              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
4438              if ((prop_category == prop_value) == prop_fail_result)              if ((prop_category == prop_value) == prop_fail_result)
# Line 4434  for (;;) Line 4445  for (;;)
4445            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4446              {              {
4447              int len = 1;              int len = 1;
4448              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4449                {                {
4450                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4451                break;                break;
4452                }                }
4453              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4454              prop_chartype = UCD_CHARTYPE(c);              prop_chartype = UCD_CHARTYPE(c);
4455              if ((prop_chartype == prop_value) == prop_fail_result)              if ((prop_chartype == prop_value) == prop_fail_result)
# Line 4451  for (;;) Line 4462  for (;;)
4462            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4463              {              {
4464              int len = 1;              int len = 1;
4465              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4466                {                {
4467                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4468                break;                break;
4469                }                }
4470              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4471              prop_script = UCD_SCRIPT(c);              prop_script = UCD_SCRIPT(c);
4472              if ((prop_script == prop_value) == prop_fail_result)              if ((prop_script == prop_value) == prop_fail_result)
# Line 4484  for (;;) Line 4495  for (;;)
4495          {          {
4496          for (i = min; i < max; i++)          for (i = min; i < max; i++)
4497            {            {
4498            if (eptr >= md->end_subject)            if (eptr >= md->end_subject)
4499              {              {
4500              SCHECK_PARTIAL();              SCHECK_PARTIAL();
4501              break;              break;
4502              }              }
4503            GETCHARINCTEST(c, eptr);            GETCHARINCTEST(c, eptr);
4504            prop_category = UCD_CATEGORY(c);            prop_category = UCD_CATEGORY(c);
4505            if (prop_category == ucp_M) break;            if (prop_category == ucp_M) break;
# Line 4544  for (;;) Line 4555  for (;;)
4555              {              {
4556              for (i = min; i < max; i++)              for (i = min; i < max; i++)
4557                {                {
4558                if (eptr >= md->end_subject)                if (eptr >= md->end_subject)
4559                  {                  {
4560                  SCHECK_PARTIAL();                  SCHECK_PARTIAL();
4561                  break;                  break;
4562                  }                  }
4563                if (IS_NEWLINE(eptr)) break;                if (IS_NEWLINE(eptr)) break;
4564                eptr++;                eptr++;
4565                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
# Line 4561  for (;;) Line 4572  for (;;)
4572              {              {
4573              for (i = min; i < max; i++)              for (i = min; i < max; i++)
4574                {                {
4575                if (eptr >= md->end_subject)                if (eptr >= md->end_subject)
4576                  {                  {
4577                  SCHECK_PARTIAL();                  SCHECK_PARTIAL();
4578                  break;                  break;
4579                  }                  }
4580                if (IS_NEWLINE(eptr)) break;                if (IS_NEWLINE(eptr)) break;
4581                eptr++;                eptr++;
4582                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
# Line 4578  for (;;) Line 4589  for (;;)
4589              {              {
4590              for (i = min; i < max; i++)              for (i = min; i < max; i++)
4591                {                {
4592                if (eptr >= md->end_subject)                if (eptr >= md->end_subject)
4593                  {                  {
4594                  SCHECK_PARTIAL();                  SCHECK_PARTIAL();
4595                  break;                  break;
4596                  }                  }
4597                eptr++;                eptr++;
4598                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
4599                }                }
# Line 4598  for (;;) Line 4609  for (;;)
4609              {              {
4610              eptr = md->end_subject;              eptr = md->end_subject;
4611              SCHECK_PARTIAL();              SCHECK_PARTIAL();
4612              }              }
4613            else eptr += c;            else eptr += c;
4614            break;            break;
4615    
# Line 4606  for (;;) Line 4617  for (;;)
4617            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4618              {              {
4619              int len = 1;              int len = 1;
4620              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4621                {                {
4622                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4623                break;                break;
4624                }                }
4625              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4626              if (c == 0x000d)              if (c == 0x000d)
4627                {                {
# Line 4635  for (;;) Line 4646  for (;;)
4646              {              {
4647              BOOL gotspace;              BOOL gotspace;
4648              int len = 1;              int len = 1;
4649              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4650                {                {
4651                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4652                break;                break;
4653                }                }
4654              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4655              switch(c)              switch(c)
4656                {                {
# Line 4677  for (;;) Line 4688  for (;;)
4688              {              {
4689              BOOL gotspace;              BOOL gotspace;
4690              int len = 1;              int len = 1;
4691              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4692                {                {
4693                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4694                break;                break;
4695                }                }
4696              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4697              switch(c)              switch(c)
4698                {                {
# Line 4705  for (;;) Line 4716  for (;;)
4716            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4717              {              {
4718              int len = 1;              int len = 1;
4719              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4720                {                {
4721                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4722                break;                break;
4723                }                }
4724              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4725              if (c < 256 && (md->ctypes[c] & ctype_digit) != 0) break;              if (c < 256 && (md->ctypes[c] & ctype_digit) != 0) break;
4726              eptr+= len;              eptr+= len;
# Line 4720  for (;;) Line 4731  for (;;)
4731            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4732              {              {
4733              int len = 1;              int len = 1;
4734              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4735                {                {
4736                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4737                break;                break;
4738                }                }
4739              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4740              if (c >= 256 ||(md->ctypes[c] & ctype_digit) == 0) break;              if (c >= 256 ||(md->ctypes[c] & ctype_digit) == 0) break;
4741              eptr+= len;              eptr+= len;
# Line 4735  for (;;) Line 4746  for (;;)
4746            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4747              {              {
4748              int len = 1;              int len = 1;
4749              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4750                {                {
4751                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4752                break;                break;
4753                }                }
4754              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4755              if (c < 256 && (md->ctypes[c] & ctype_space) != 0) break;              if (c < 256 && (md->ctypes[c] & ctype_space) != 0) break;
4756              eptr+= len;              eptr+= len;
# Line 4750  for (;;) Line 4761  for (;;)
4761            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4762              {              {
4763              int len = 1;              int len = 1;
4764              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4765                {                {
4766                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4767                break;                break;
4768                }                }
4769              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4770              if (c >= 256 ||(md->ctypes[c] & ctype_space) == 0) break;              if (c >= 256 ||(md->ctypes[c] & ctype_space) == 0) break;
4771              eptr+= len;              eptr+= len;
# Line 4765  for (;;) Line 4776  for (;;)
4776            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4777              {              {
4778              int len = 1;              int len = 1;
4779              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4780                {                {
4781                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4782                break;                break;
4783                }                }
4784              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4785              if (c < 256 && (md->ctypes[c] & ctype_word) != 0) break;              if (c < 256 && (md->ctypes[c] & ctype_word) != 0) break;
4786              eptr+= len;              eptr+= len;
# Line 4780  for (;;) Line 4791  for (;;)
4791            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4792              {              {
4793              int len = 1;              int len = 1;
4794              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4795                {                {
4796                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4797                break;                break;
4798                }                }
4799              GETCHARLEN(c, eptr, len);              GETCHARLEN(c, eptr, len);
4800              if (c >= 256 || (md->ctypes[c] & ctype_word) == 0) break;              if (c >= 256 || (md->ctypes[c] & ctype_word) == 0) break;
4801              eptr+= len;              eptr+= len;
# Line 4816  for (;;) Line 4827  for (;;)
4827            case OP_ANY:            case OP_ANY:
4828            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4829              {              {
4830              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4831                {                {
4832                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4833                break;                break;
4834                }                }
4835              if (IS_NEWLINE(eptr)) break;              if (IS_NEWLINE(eptr)) break;
4836              eptr++;              eptr++;
4837              }              }
# Line 4833  for (;;) Line 4844  for (;;)
4844              {              {
4845              eptr = md->end_subject;              eptr = md->end_subject;
4846              SCHECK_PARTIAL();              SCHECK_PARTIAL();
4847              }              }
4848            else eptr += c;            else eptr += c;
4849            break;            break;
4850    
4851            case OP_ANYNL:            case OP_ANYNL:
4852            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4853              {              {
4854              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4855                {                {
4856                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4857                break;                break;
4858                }                }
4859              c = *eptr;              c = *eptr;
4860              if (c == 0x000d)              if (c == 0x000d)
4861                {                {
# Line 4865  for (;;) Line 4876  for (;;)
4876            case OP_NOT_HSPACE:            case OP_NOT_HSPACE:
4877            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4878              {              {
4879              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4880                {                {
4881                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4882                break;                break;
4883                }                }
4884              c = *eptr;              c = *eptr;
4885              if (c == 0x09 || c == 0x20 || c == 0xa0) break;              if (c == 0x09 || c == 0x20 || c == 0xa0) break;
4886              eptr++;              eptr++;
# Line 4879  for (;;) Line 4890  for (;;)
4890            case OP_HSPACE:            case OP_HSPACE:
4891            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4892              {              {
4893              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4894                {                {
4895                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4896                break;                break;
4897                }                }
4898              c = *eptr;              c = *eptr;
4899              if (c != 0x09 && c != 0x20 && c != 0xa0) break;              if (c != 0x09 && c != 0x20 && c != 0xa0) break;
4900              eptr++;              eptr++;
# Line 4893  for (;;) Line 4904  for (;;)
4904            case OP_NOT_VSPACE:            case OP_NOT_VSPACE:
4905            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4906              {              {
4907              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4908                {                {
4909                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4910                break;                break;
4911                }                }
4912              c = *eptr;              c = *eptr;
4913              if (c == 0x0a || c == 0x0b || c == 0x0c || c == 0x0d || c == 0x85)              if (c == 0x0a || c == 0x0b || c == 0x0c || c == 0x0d || c == 0x85)
4914                break;                break;
# Line 4908  for (;;) Line 4919  for (;;)
4919            case OP_VSPACE:            case OP_VSPACE:
4920            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4921              {              {
4922              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4923                {                {
4924                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4925                break;                break;
4926                }                }
4927              c = *eptr;              c = *eptr;
4928              if (c != 0x0a && c != 0x0b && c != 0x0c && c != 0x0d && c != 0x85)              if (c != 0x0a && c != 0x0b && c != 0x0c && c != 0x0d && c != 0x85)
4929                break;                break;
# Line 4923  for (;;) Line 4934  for (;;)
4934            case OP_NOT_DIGIT:            case OP_NOT_DIGIT:
4935            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4936              {              {
4937              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4938                {                {
4939                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4940                break;                break;
4941                }                }
4942              if ((md->ctypes[*eptr] & ctype_digit) != 0) break;              if ((md->ctypes[*eptr] & ctype_digit) != 0) break;
4943              eptr++;              eptr++;
4944              }              }
# Line 4936  for (;;) Line 4947  for (;;)
4947            case OP_DIGIT:            case OP_DIGIT:
4948            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4949              {              {
4950              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4951                {                {
4952                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4953                break;                break;
4954                }                }
4955              if ((md->ctypes[*eptr] & ctype_digit) == 0) break;              if ((md->ctypes[*eptr] & ctype_digit) == 0) break;
4956              eptr++;              eptr++;
4957              }              }
# Line 4949  for (;;) Line 4960  for (;;)
4960            case OP_NOT_WHITESPACE:            case OP_NOT_WHITESPACE:
4961            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4962              {              {
4963              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4964                {                {
4965                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4966                break;                break;
4967                }                }
4968              if ((md->ctypes[*eptr] & ctype_space) != 0) break;              if ((md->ctypes[*eptr] & ctype_space) != 0) break;
4969              eptr++;              eptr++;
4970              }              }
# Line 4962  for (;;) Line 4973  for (;;)
4973            case OP_WHITESPACE:            case OP_WHITESPACE:
4974            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4975              {              {
4976              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4977                {                {
4978                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4979                break;                break;
4980                }                }
4981              if ((md->ctypes[*eptr] & ctype_space) == 0) break;              if ((md->ctypes[*eptr] & ctype_space) == 0) break;
4982              eptr++;              eptr++;
4983              }              }
# Line 4975  for (;;) Line 4986  for (;;)
4986            case OP_NOT_WORDCHAR:            case OP_NOT_WORDCHAR:
4987            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4988              {              {
4989              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
4990                {                {
4991                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4992                break;                break;
4993                }                }
4994              if ((md->ctypes[*eptr] & ctype_word) != 0) break;              if ((md->ctypes[*eptr] & ctype_word) != 0) break;
4995              eptr++;              eptr++;
4996              }              }
# Line 4988  for (;;) Line 4999  for (;;)
4999            case OP_WORDCHAR:            case OP_WORDCHAR:
5000            for (i = min; i < max; i++)            for (i = min; i < max; i++)
5001              {              {
5002              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
5003                {                {
5004                SCHECK_PARTIAL();                SCHECK_PARTIAL();
5005                break;                break;
5006                }                }
5007              if ((md->ctypes[*eptr] & ctype_word) == 0) break;              if ((md->ctypes[*eptr] & ctype_word) == 0) break;
5008              eptr++;              eptr++;
5009              }              }
# Line 5565  for(;;) Line 5576  for(;;)
5576      bytes to avoid spending too much time in this optimization. */      bytes to avoid spending too much time in this optimization. */
5577    
5578      if (study != NULL && (study->flags & PCRE_STUDY_MINLEN) != 0 &&      if (study != NULL && (study->flags & PCRE_STUDY_MINLEN) != 0 &&
5579          end_subject - start_match < study->minlength)          (pcre_uint32)(end_subject - start_match) < study->minlength)
5580        {        {
5581        rc = MATCH_NOMATCH;        rc = MATCH_NOMATCH;
5582        break;        break;
# Line 5628  for(;;) Line 5639  for(;;)
5639        }        }
5640      }      }
5641    
5642  #ifdef DEBUG  /* Sigh. Some compilers never learn. */  #ifdef PCRE_DEBUG  /* Sigh. Some compilers never learn. */
5643    printf(">>>> Match against: ");    printf(">>>> Match against: ");
5644    pchars(start_match, end_subject - start_match, TRUE, md);    pchars(start_match, end_subject - start_match, TRUE, md);
5645    printf("\n");    printf("\n");

Legend:
Removed from v.462  
changed lines
  Added in v.482

  ViewVC Help
Powered by ViewVC 1.1.5