/[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 517 by ph10, Wed May 5 10:44:20 2010 UTC revision 534 by ph10, Thu Jun 3 18:26:05 2010 UTC
# Line 255  enum { RM1=1, RM2,  RM3,  RM4,  RM5,  RM Line 255  enum { RM1=1, RM2,  RM3,  RM4,  RM5,  RM
255         RM21,  RM22, RM23, RM24, RM25, RM26, RM27, RM28, RM29, RM30,         RM21,  RM22, RM23, RM24, RM25, RM26, RM27, RM28, RM29, RM30,
256         RM31,  RM32, RM33, RM34, RM35, RM36, RM37, RM38, RM39, RM40,         RM31,  RM32, RM33, RM34, RM35, RM36, RM37, RM38, RM39, RM40,
257         RM41,  RM42, RM43, RM44, RM45, RM46, RM47, RM48, RM49, RM50,         RM41,  RM42, RM43, RM44, RM45, RM46, RM47, RM48, RM49, RM50,
258         RM51,  RM52, RM53, RM54, RM55, RM56, RM57, RM58 };         RM51,  RM52, RM53, RM54, RM55, RM56, RM57, RM58, RM59, RM60,
259           RM61,  RM62 };
260    
261  /* These versions of the macros use the stack, as normal. There are debugging  /* These versions of the macros use the stack, as normal. There are debugging
262  versions and production versions. Note that the "rw" argument of RMATCH isn't  versions and production versions. Note that the "rw" argument of RMATCH isn't
# Line 294  argument of match(), which never changes Line 295  argument of match(), which never changes
295  #define RMATCH(ra,rb,rc,rd,re,rf,rg,rw)\  #define RMATCH(ra,rb,rc,rd,re,rf,rg,rw)\
296    {\    {\
297    heapframe *newframe = (pcre_stack_malloc)(sizeof(heapframe));\    heapframe *newframe = (pcre_stack_malloc)(sizeof(heapframe));\
298      if (newframe == NULL) RRETURN(PCRE_ERROR_NOMEMORY);\
299    frame->Xwhere = rw; \    frame->Xwhere = rw; \
300    newframe->Xeptr = ra;\    newframe->Xeptr = ra;\
301    newframe->Xecode = rb;\    newframe->Xecode = rb;\
# Line 314  argument of match(), which never changes Line 316  argument of match(), which never changes
316    
317  #define RRETURN(ra)\  #define RRETURN(ra)\
318    {\    {\
319    heapframe *newframe = frame;\    heapframe *oldframe = frame;\
320    frame = newframe->Xprevframe;\    frame = oldframe->Xprevframe;\
321    (pcre_stack_free)(newframe);\    (pcre_stack_free)(oldframe);\
322    if (frame != NULL)\    if (frame != NULL)\
323      {\      {\
324      rrc = ra;\      rrc = ra;\
# Line 487  heap whenever RMATCH() does a "recursion Line 489  heap whenever RMATCH() does a "recursion
489    
490  #ifdef NO_RECURSE  #ifdef NO_RECURSE
491  heapframe *frame = (pcre_stack_malloc)(sizeof(heapframe));  heapframe *frame = (pcre_stack_malloc)(sizeof(heapframe));
492    if (frame == NULL) RRETURN(PCRE_ERROR_NOMEMORY);
493  frame->Xprevframe = NULL;            /* Marks the top level */  frame->Xprevframe = NULL;            /* Marks the top level */
494    
495  /* Copy in the original argument variables */  /* Copy in the original argument variables */
# Line 793  for (;;) Line 796  for (;;)
796        save_capture_last = md->capture_last;        save_capture_last = md->capture_last;
797    
798        DPRINTF(("saving %d %d %d\n", save_offset1, save_offset2, save_offset3));        DPRINTF(("saving %d %d %d\n", save_offset1, save_offset2, save_offset3));
799        md->offset_vector[md->offset_end - number] = eptr - md->start_subject;        md->offset_vector[md->offset_end - number] =
800            (int)(eptr - md->start_subject);
801    
802        flags = (op == OP_SCBRA)? match_cbegroup : 0;        flags = (op == OP_SCBRA)? match_cbegroup : 0;
803        do        do
# Line 888  for (;;) Line 892  for (;;)
892          cb.callout_number   = ecode[LINK_SIZE+2];          cb.callout_number   = ecode[LINK_SIZE+2];
893          cb.offset_vector    = md->offset_vector;          cb.offset_vector    = md->offset_vector;
894          cb.subject          = (PCRE_SPTR)md->start_subject;          cb.subject          = (PCRE_SPTR)md->start_subject;
895          cb.subject_length   = md->end_subject - md->start_subject;          cb.subject_length   = (int)(md->end_subject - md->start_subject);
896          cb.start_match      = mstart - md->start_subject;          cb.start_match      = (int)(mstart - md->start_subject);
897          cb.current_position = eptr - md->start_subject;          cb.current_position = (int)(eptr - md->start_subject);
898          cb.pattern_position = GET(ecode, LINK_SIZE + 3);          cb.pattern_position = GET(ecode, LINK_SIZE + 3);
899          cb.next_item_length = GET(ecode, 3 + 2*LINK_SIZE);          cb.next_item_length = GET(ecode, 3 + 2*LINK_SIZE);
900          cb.capture_top      = offset_top/2;          cb.capture_top      = offset_top/2;
# Line 1116  for (;;) Line 1120  for (;;)
1120        {        {
1121        md->offset_vector[offset] =        md->offset_vector[offset] =
1122          md->offset_vector[md->offset_end - number];          md->offset_vector[md->offset_end - number];
1123        md->offset_vector[offset+1] = eptr - md->start_subject;        md->offset_vector[offset+1] = (int)(eptr - md->start_subject);
1124        if (offset_top <= offset) offset_top = offset + 2;        if (offset_top <= offset) offset_top = offset + 2;
1125        }        }
1126      ecode += 3;      ecode += 3;
# Line 1279  for (;;) Line 1283  for (;;)
1283        cb.callout_number   = ecode[1];        cb.callout_number   = ecode[1];
1284        cb.offset_vector    = md->offset_vector;        cb.offset_vector    = md->offset_vector;
1285        cb.subject          = (PCRE_SPTR)md->start_subject;        cb.subject          = (PCRE_SPTR)md->start_subject;
1286        cb.subject_length   = md->end_subject - md->start_subject;        cb.subject_length   = (int)(md->end_subject - md->start_subject);
1287        cb.start_match      = mstart - md->start_subject;        cb.start_match      = (int)(mstart - md->start_subject);
1288        cb.current_position = eptr - md->start_subject;        cb.current_position = (int)(eptr - md->start_subject);
1289        cb.pattern_position = GET(ecode, 2);        cb.pattern_position = GET(ecode, 2);
1290        cb.next_item_length = GET(ecode, 2 + LINK_SIZE);        cb.next_item_length = GET(ecode, 2 + LINK_SIZE);
1291        cb.capture_top      = offset_top/2;        cb.capture_top      = offset_top/2;
# Line 1558  for (;;) Line 1562  for (;;)
1562          {          {
1563          md->offset_vector[offset] =          md->offset_vector[offset] =
1564            md->offset_vector[md->offset_end - number];            md->offset_vector[md->offset_end - number];
1565          md->offset_vector[offset+1] = eptr - md->start_subject;          md->offset_vector[offset+1] = (int)(eptr - md->start_subject);
1566          if (offset_top <= offset) offset_top = offset + 2;          if (offset_top <= offset) offset_top = offset + 2;
1567          }          }
1568    
# Line 1718  for (;;) Line 1722  for (;;)
1722  #ifdef SUPPORT_UTF8  #ifdef SUPPORT_UTF8
1723        if (utf8)        if (utf8)
1724          {          {
1725            /* Get status of previous character */
1726    
1727          if (eptr == md->start_subject) prev_is_word = FALSE; else          if (eptr == md->start_subject) prev_is_word = FALSE; else
1728            {            {
1729            USPTR lastptr = eptr - 1;            USPTR lastptr = eptr - 1;
1730            while((*lastptr & 0xc0) == 0x80) lastptr--;            while((*lastptr & 0xc0) == 0x80) lastptr--;
1731            if (lastptr < md->start_used_ptr) md->start_used_ptr = lastptr;            if (lastptr < md->start_used_ptr) md->start_used_ptr = lastptr;
1732            GETCHAR(c, lastptr);            GETCHAR(c, lastptr);
1733    #ifdef SUPPORT_UCP
1734              if (md->use_ucp)
1735                {
1736                if (c == '_') prev_is_word = TRUE; else
1737                  {
1738                  int cat = UCD_CATEGORY(c);
1739                  prev_is_word = (cat == ucp_L || cat == ucp_N);
1740                  }
1741                }
1742              else
1743    #endif
1744            prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;            prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
1745            }            }
1746    
1747            /* Get status of next character */
1748    
1749          if (eptr >= md->end_subject)          if (eptr >= md->end_subject)
1750            {            {
1751            SCHECK_PARTIAL();            SCHECK_PARTIAL();
# Line 1734  for (;;) Line 1754  for (;;)
1754          else          else
1755            {            {
1756            GETCHAR(c, eptr);            GETCHAR(c, eptr);
1757    #ifdef SUPPORT_UCP
1758              if (md->use_ucp)
1759                {
1760                if (c == '_') cur_is_word = TRUE; else
1761                  {
1762                  int cat = UCD_CATEGORY(c);
1763                  cur_is_word = (cat == ucp_L || cat == ucp_N);
1764                  }
1765                }
1766              else
1767    #endif
1768            cur_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;            cur_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
1769            }            }
1770          }          }
1771        else        else
1772  #endif  #endif
1773    
1774        /* Not in UTF-8 mode */        /* Not in UTF-8 mode, but we may still have PCRE_UCP set, and for
1775          consistency with the behaviour of \w we do use it in this case. */
1776    
1777          {          {
1778            /* Get status of previous character */
1779    
1780          if (eptr == md->start_subject) prev_is_word = FALSE; else          if (eptr == md->start_subject) prev_is_word = FALSE; else
1781            {            {
1782            if (eptr <= md->start_used_ptr) md->start_used_ptr = eptr - 1;            if (eptr <= md->start_used_ptr) md->start_used_ptr = eptr - 1;
1783    #ifdef SUPPORT_UCP
1784              if (md->use_ucp)
1785                {
1786                c = eptr[-1];
1787                if (c == '_') prev_is_word = TRUE; else
1788                  {
1789                  int cat = UCD_CATEGORY(c);
1790                  prev_is_word = (cat == ucp_L || cat == ucp_N);
1791                  }
1792                }
1793              else
1794    #endif
1795            prev_is_word = ((md->ctypes[eptr[-1]] & ctype_word) != 0);            prev_is_word = ((md->ctypes[eptr[-1]] & ctype_word) != 0);
1796            }            }
1797    
1798            /* Get status of next character */
1799    
1800          if (eptr >= md->end_subject)          if (eptr >= md->end_subject)
1801            {            {
1802            SCHECK_PARTIAL();            SCHECK_PARTIAL();
1803            cur_is_word = FALSE;            cur_is_word = FALSE;
1804            }            }
1805          else cur_is_word = ((md->ctypes[*eptr] & ctype_word) != 0);          else
1806    #ifdef SUPPORT_UCP
1807            if (md->use_ucp)
1808              {
1809              c = *eptr;
1810              if (c == '_') cur_is_word = TRUE; else
1811                {
1812                int cat = UCD_CATEGORY(c);
1813                cur_is_word = (cat == ucp_L || cat == ucp_N);
1814                }
1815              }
1816            else
1817    #endif
1818            cur_is_word = ((md->ctypes[*eptr] & ctype_word) != 0);
1819          }          }
1820    
1821        /* Now see if the situation is what we want */        /* Now see if the situation is what we want */
# Line 2076  for (;;) Line 2138  for (;;)
2138          if ((ecode[2] != prop->script) == (op == OP_PROP))          if ((ecode[2] != prop->script) == (op == OP_PROP))
2139            MRRETURN(MATCH_NOMATCH);            MRRETURN(MATCH_NOMATCH);
2140          break;          break;
2141    
2142          /* These are specials */          /* These are specials */
2143    
2144          case PT_ALNUM:          case PT_ALNUM:
2145          if ((_pcre_ucp_gentype[prop->chartype] == ucp_L ||          if ((_pcre_ucp_gentype[prop->chartype] == ucp_L ||
2146               _pcre_ucp_gentype[prop->chartype] == ucp_N) == (op == OP_NOTPROP))               _pcre_ucp_gentype[prop->chartype] == ucp_N) == (op == OP_NOTPROP))
2147            MRRETURN(MATCH_NOMATCH);            MRRETURN(MATCH_NOMATCH);
2148          break;          break;
2149    
2150          case PT_SPACE:    /* Perl space */          case PT_SPACE:    /* Perl space */
2151          if ((_pcre_ucp_gentype[prop->chartype] == ucp_Z ||          if ((_pcre_ucp_gentype[prop->chartype] == ucp_Z ||
2152               c == CHAR_HT || c == CHAR_NL || c == CHAR_FF || c == CHAR_CR)               c == CHAR_HT || c == CHAR_NL || c == CHAR_FF || c == CHAR_CR)
2153                 == (op == OP_NOTPROP))                 == (op == OP_NOTPROP))
2154            MRRETURN(MATCH_NOMATCH);            MRRETURN(MATCH_NOMATCH);
2155          break;          break;
2156    
2157          case PT_PXSPACE:  /* POSIX space */          case PT_PXSPACE:  /* POSIX space */
2158          if ((_pcre_ucp_gentype[prop->chartype] == ucp_Z ||          if ((_pcre_ucp_gentype[prop->chartype] == ucp_Z ||
2159               c == CHAR_HT || c == CHAR_NL || c == CHAR_VT ||               c == CHAR_HT || c == CHAR_NL || c == CHAR_VT ||
2160               c == CHAR_FF || c == CHAR_CR)               c == CHAR_FF || c == CHAR_CR)
2161                 == (op == OP_NOTPROP))                 == (op == OP_NOTPROP))
2162            MRRETURN(MATCH_NOMATCH);            MRRETURN(MATCH_NOMATCH);
2163          break;          break;
2164    
2165          case PT_WORD:          case PT_WORD:
2166          if ((_pcre_ucp_gentype[prop->chartype] == ucp_L ||          if ((_pcre_ucp_gentype[prop->chartype] == ucp_L ||
2167               _pcre_ucp_gentype[prop->chartype] == ucp_N ||               _pcre_ucp_gentype[prop->chartype] == ucp_N ||
2168               c == CHAR_UNDERSCORE) == (op == OP_NOTPROP))               c == CHAR_UNDERSCORE) == (op == OP_NOTPROP))
2169            MRRETURN(MATCH_NOMATCH);            MRRETURN(MATCH_NOMATCH);
2170          break;          break;
2171    
2172          /* This should never occur */          /* This should never occur */
2173    
2174          default:          default:
# Line 2174  for (;;) Line 2236  for (;;)
2236        referenced subpattern. */        referenced subpattern. */
2237    
2238        if (offset >= offset_top || md->offset_vector[offset] < 0)        if (offset >= offset_top || md->offset_vector[offset] < 0)
2239          length = (md->jscript_compat)? 0 : md->end_subject - eptr + 1;          length = (md->jscript_compat)? 0 : (int)(md->end_subject - eptr + 1);
2240        else        else
2241          length = md->offset_vector[offset+1] - md->offset_vector[offset];          length = md->offset_vector[offset+1] - md->offset_vector[offset];
2242    
# Line 3524  for (;;) Line 3586  for (;;)
3586                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
3587              }              }
3588            break;            break;
3589    
3590            case PT_ALNUM:            case PT_ALNUM:
3591            for (i = 1; i <= min; i++)            for (i = 1; i <= min; i++)
3592              {              {
# Line 3534  for (;;) Line 3596  for (;;)
3596                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
3597                }                }
3598              GETCHARINCTEST(c, eptr);              GETCHARINCTEST(c, eptr);
3599              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
3600              if ((prop_category == ucp_L || prop_category == ucp_N)              if ((prop_category == ucp_L || prop_category == ucp_N)
3601                     == prop_fail_result)                     == prop_fail_result)
3602                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
3603              }              }
3604            break;            break;
3605    
3606            case PT_SPACE:    /* Perl space */            case PT_SPACE:    /* Perl space */
3607            for (i = 1; i <= min; i++)            for (i = 1; i <= min; i++)
3608              {              {
# Line 3550  for (;;) Line 3612  for (;;)
3612                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
3613                }                }
3614              GETCHARINCTEST(c, eptr);              GETCHARINCTEST(c, eptr);
3615              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
3616              if ((prop_category == ucp_Z || c == CHAR_HT || c == CHAR_NL ||              if ((prop_category == ucp_Z || c == CHAR_HT || c == CHAR_NL ||
3617                   c == CHAR_FF || c == CHAR_CR)                   c == CHAR_FF || c == CHAR_CR)
3618                     == prop_fail_result)                     == prop_fail_result)
3619                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
3620              }              }
3621            break;            break;
3622    
3623            case PT_PXSPACE:  /* POSIX space */            case PT_PXSPACE:  /* POSIX space */
3624            for (i = 1; i <= min; i++)            for (i = 1; i <= min; i++)
3625              {              {
# Line 3567  for (;;) Line 3629  for (;;)
3629                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
3630                }                }
3631              GETCHARINCTEST(c, eptr);              GETCHARINCTEST(c, eptr);
3632              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
3633              if ((prop_category == ucp_Z || c == CHAR_HT || c == CHAR_NL ||              if ((prop_category == ucp_Z || c == CHAR_HT || c == CHAR_NL ||
3634                   c == CHAR_VT || c == CHAR_FF || c == CHAR_CR)                   c == CHAR_VT || c == CHAR_FF || c == CHAR_CR)
3635                     == prop_fail_result)                     == prop_fail_result)
3636                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
3637              }              }
3638            break;            break;
3639    
3640            case PT_WORD:            case PT_WORD:
3641            for (i = 1; i <= min; i++)            for (i = 1; i <= min; i++)
3642              {              {
3643              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
# Line 3584  for (;;) Line 3646  for (;;)
3646                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
3647                }                }
3648              GETCHARINCTEST(c, eptr);              GETCHARINCTEST(c, eptr);
3649              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
3650              if ((prop_category == ucp_L || prop_category == ucp_N ||              if ((prop_category == ucp_L || prop_category == ucp_N ||
3651                   c == CHAR_UNDERSCORE)                   c == CHAR_UNDERSCORE)
3652                     == prop_fail_result)                     == prop_fail_result)
3653                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
3654              }              }
3655            break;            break;
3656    
3657            /* This should not occur */            /* This should not occur */
3658    
3659            default:            default:
# Line 4154  for (;;) Line 4216  for (;;)
4216                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4217                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
4218                }                }
4219              GETCHARINC(c, eptr);              GETCHARINCTEST(c, eptr);
4220              if (prop_fail_result) MRRETURN(MATCH_NOMATCH);              if (prop_fail_result) MRRETURN(MATCH_NOMATCH);
4221              }              }
4222            /* Control never gets here */            /* Control never gets here */
# Line 4170  for (;;) Line 4232  for (;;)
4232                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4233                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
4234                }                }
4235              GETCHARINC(c, eptr);              GETCHARINCTEST(c, eptr);
4236              prop_chartype = UCD_CHARTYPE(c);              prop_chartype = UCD_CHARTYPE(c);
4237              if ((prop_chartype == ucp_Lu ||              if ((prop_chartype == ucp_Lu ||
4238                   prop_chartype == ucp_Ll ||                   prop_chartype == ucp_Ll ||
# Line 4190  for (;;) Line 4252  for (;;)
4252                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4253                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
4254                }                }
4255              GETCHARINC(c, eptr);              GETCHARINCTEST(c, eptr);
4256              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
4257              if ((prop_category == prop_value) == prop_fail_result)              if ((prop_category == prop_value) == prop_fail_result)
4258                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
# Line 4208  for (;;) Line 4270  for (;;)
4270                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4271                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
4272                }                }
4273              GETCHARINC(c, eptr);              GETCHARINCTEST(c, eptr);
4274              prop_chartype = UCD_CHARTYPE(c);              prop_chartype = UCD_CHARTYPE(c);
4275              if ((prop_chartype == prop_value) == prop_fail_result)              if ((prop_chartype == prop_value) == prop_fail_result)
4276                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
# Line 4226  for (;;) Line 4288  for (;;)
4288                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4289                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
4290                }                }
4291              GETCHARINC(c, eptr);              GETCHARINCTEST(c, eptr);
4292              prop_script = UCD_SCRIPT(c);              prop_script = UCD_SCRIPT(c);
4293              if ((prop_script == prop_value) == prop_fail_result)              if ((prop_script == prop_value) == prop_fail_result)
4294                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
# Line 4236  for (;;) Line 4298  for (;;)
4298            case PT_ALNUM:            case PT_ALNUM:
4299            for (fi = min;; fi++)            for (fi = min;; fi++)
4300              {              {
4301              RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM39);              RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM59);
4302              if (rrc != MATCH_NOMATCH) RRETURN(rrc);              if (rrc != MATCH_NOMATCH) RRETURN(rrc);
4303              if (fi >= max) MRRETURN(MATCH_NOMATCH);              if (fi >= max) MRRETURN(MATCH_NOMATCH);
4304              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
# Line 4244  for (;;) Line 4306  for (;;)
4306                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4307                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
4308                }                }
4309              GETCHARINC(c, eptr);              GETCHARINCTEST(c, eptr);
4310              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
4311              if ((prop_category == ucp_L || prop_category == ucp_N)              if ((prop_category == ucp_L || prop_category == ucp_N)
4312                     == prop_fail_result)                     == prop_fail_result)
4313                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
4314              }              }
4315            /* Control never gets here */            /* Control never gets here */
4316    
4317            case PT_SPACE:    /* Perl space */            case PT_SPACE:    /* Perl space */
4318            for (fi = min;; fi++)            for (fi = min;; fi++)
4319              {              {
4320              RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM39);              RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM60);
4321              if (rrc != MATCH_NOMATCH) RRETURN(rrc);              if (rrc != MATCH_NOMATCH) RRETURN(rrc);
4322              if (fi >= max) MRRETURN(MATCH_NOMATCH);              if (fi >= max) MRRETURN(MATCH_NOMATCH);
4323              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
# Line 4263  for (;;) Line 4325  for (;;)
4325                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4326                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
4327                }                }
4328              GETCHARINC(c, eptr);              GETCHARINCTEST(c, eptr);
4329              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
4330              if ((prop_category == ucp_Z || c == CHAR_HT || c == CHAR_NL ||              if ((prop_category == ucp_Z || c == CHAR_HT || c == CHAR_NL ||
4331                   c == CHAR_FF || c == CHAR_CR)                   c == CHAR_FF || c == CHAR_CR)
4332                     == prop_fail_result)                     == prop_fail_result)
4333                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
4334              }              }
4335            /* Control never gets here */            /* Control never gets here */
4336    
4337            case PT_PXSPACE:  /* POSIX space */            case PT_PXSPACE:  /* POSIX space */
4338            for (fi = min;; fi++)            for (fi = min;; fi++)
4339              {              {
4340              RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM39);              RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM61);
4341              if (rrc != MATCH_NOMATCH) RRETURN(rrc);              if (rrc != MATCH_NOMATCH) RRETURN(rrc);
4342              if (fi >= max) MRRETURN(MATCH_NOMATCH);              if (fi >= max) MRRETURN(MATCH_NOMATCH);
4343              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
# Line 4283  for (;;) Line 4345  for (;;)
4345                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4346                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
4347                }                }
4348              GETCHARINC(c, eptr);              GETCHARINCTEST(c, eptr);
4349              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
4350              if ((prop_category == ucp_Z || c == CHAR_HT || c == CHAR_NL ||              if ((prop_category == ucp_Z || c == CHAR_HT || c == CHAR_NL ||
4351                   c == CHAR_VT || c == CHAR_FF || c == CHAR_CR)                   c == CHAR_VT || c == CHAR_FF || c == CHAR_CR)
4352                     == prop_fail_result)                     == prop_fail_result)
4353                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
4354              }              }
4355            /* Control never gets here */            /* Control never gets here */
4356    
4357            case PT_WORD:            case PT_WORD:
4358            for (fi = min;; fi++)            for (fi = min;; fi++)
4359              {              {
4360              RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM39);              RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM62);
4361              if (rrc != MATCH_NOMATCH) RRETURN(rrc);              if (rrc != MATCH_NOMATCH) RRETURN(rrc);
4362              if (fi >= max) MRRETURN(MATCH_NOMATCH);              if (fi >= max) MRRETURN(MATCH_NOMATCH);
4363              if (eptr >= md->end_subject)              if (eptr >= md->end_subject)
# Line 4303  for (;;) Line 4365  for (;;)
4365                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4366                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
4367                }                }
4368              GETCHARINC(c, eptr);              GETCHARINCTEST(c, eptr);
4369              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
4370              if ((prop_category == ucp_L ||              if ((prop_category == ucp_L ||
4371                   prop_category == ucp_N ||                   prop_category == ucp_N ||
4372                   c == CHAR_UNDERSCORE)                   c == CHAR_UNDERSCORE)
4373                     == prop_fail_result)                     == prop_fail_result)
4374                MRRETURN(MATCH_NOMATCH);                MRRETURN(MATCH_NOMATCH);
4375              }              }
4376            /* Control never gets here */            /* Control never gets here */
4377    
4378            /* This should never occur */            /* This should never occur */
4379    
4380            default:            default:
4381            RRETURN(PCRE_ERROR_INTERNAL);            RRETURN(PCRE_ERROR_INTERNAL);
4382            }            }
# Line 4661  for (;;) Line 4723  for (;;)
4723                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4724                break;                break;
4725                }                }
4726              GETCHARLEN(c, eptr, len);              GETCHARLENTEST(c, eptr, len);
4727              if (prop_fail_result) break;              if (prop_fail_result) break;
4728              eptr+= len;              eptr+= len;
4729              }              }
# Line 4676  for (;;) Line 4738  for (;;)
4738                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4739                break;                break;
4740                }                }
4741              GETCHARLEN(c, eptr, len);              GETCHARLENTEST(c, eptr, len);
4742              prop_chartype = UCD_CHARTYPE(c);              prop_chartype = UCD_CHARTYPE(c);
4743              if ((prop_chartype == ucp_Lu ||              if ((prop_chartype == ucp_Lu ||
4744                   prop_chartype == ucp_Ll ||                   prop_chartype == ucp_Ll ||
# Line 4695  for (;;) Line 4757  for (;;)
4757                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4758                break;                break;
4759                }                }
4760              GETCHARLEN(c, eptr, len);              GETCHARLENTEST(c, eptr, len);
4761              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
4762              if ((prop_category == prop_value) == prop_fail_result)              if ((prop_category == prop_value) == prop_fail_result)
4763                break;                break;
# Line 4712  for (;;) Line 4774  for (;;)
4774                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4775                break;                break;
4776                }                }
4777              GETCHARLEN(c, eptr, len);              GETCHARLENTEST(c, eptr, len);
4778              prop_chartype = UCD_CHARTYPE(c);              prop_chartype = UCD_CHARTYPE(c);
4779              if ((prop_chartype == prop_value) == prop_fail_result)              if ((prop_chartype == prop_value) == prop_fail_result)
4780                break;                break;
# Line 4729  for (;;) Line 4791  for (;;)
4791                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4792                break;                break;
4793                }                }
4794              GETCHARLEN(c, eptr, len);              GETCHARLENTEST(c, eptr, len);
4795              prop_script = UCD_SCRIPT(c);              prop_script = UCD_SCRIPT(c);
4796              if ((prop_script == prop_value) == prop_fail_result)              if ((prop_script == prop_value) == prop_fail_result)
4797                break;                break;
4798              eptr+= len;              eptr+= len;
4799              }              }
4800            break;            break;
4801    
4802            case PT_ALNUM:            case PT_ALNUM:
4803            for (i = min; i < max; i++)            for (i = min; i < max; i++)
4804              {              {
# Line 4746  for (;;) Line 4808  for (;;)
4808                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4809                break;                break;
4810                }                }
4811              GETCHARLEN(c, eptr, len);              GETCHARLENTEST(c, eptr, len);
4812              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
4813              if ((prop_category == ucp_L || prop_category == ucp_N)              if ((prop_category == ucp_L || prop_category == ucp_N)
4814                   == prop_fail_result)                   == prop_fail_result)
4815                break;                break;
4816              eptr+= len;              eptr+= len;
# Line 4764  for (;;) Line 4826  for (;;)
4826                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4827                break;                break;
4828                }                }
4829              GETCHARLEN(c, eptr, len);              GETCHARLENTEST(c, eptr, len);
4830              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
4831              if ((prop_category == ucp_Z || c == CHAR_HT || c == CHAR_NL ||              if ((prop_category == ucp_Z || c == CHAR_HT || c == CHAR_NL ||
4832                   c == CHAR_FF || c == CHAR_CR)                   c == CHAR_FF || c == CHAR_CR)
4833                   == prop_fail_result)                   == prop_fail_result)
4834                break;                break;
4835              eptr+= len;              eptr+= len;
# Line 4783  for (;;) Line 4845  for (;;)
4845                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4846                break;                break;
4847                }                }
4848              GETCHARLEN(c, eptr, len);              GETCHARLENTEST(c, eptr, len);
4849              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
4850              if ((prop_category == ucp_Z || c == CHAR_HT || c == CHAR_NL ||              if ((prop_category == ucp_Z || c == CHAR_HT || c == CHAR_NL ||
4851                   c == CHAR_VT || c == CHAR_FF || c == CHAR_CR)                   c == CHAR_VT || c == CHAR_FF || c == CHAR_CR)
4852                   == prop_fail_result)                   == prop_fail_result)
4853                break;                break;
4854              eptr+= len;              eptr+= len;
# Line 4802  for (;;) Line 4864  for (;;)
4864                SCHECK_PARTIAL();                SCHECK_PARTIAL();
4865                break;                break;
4866                }                }
4867              GETCHARLEN(c, eptr, len);              GETCHARLENTEST(c, eptr, len);
4868              prop_category = UCD_CATEGORY(c);              prop_category = UCD_CATEGORY(c);
4869              if ((prop_category == ucp_L || prop_category == ucp_N ||              if ((prop_category == ucp_L || prop_category == ucp_N ||
4870                   c == CHAR_UNDERSCORE) == prop_fail_result)                   c == CHAR_UNDERSCORE) == prop_fail_result)
# Line 5404  switch (frame->Xwhere) Line 5466  switch (frame->Xwhere)
5466    LBL(32) LBL(34) LBL(42) LBL(46)    LBL(32) LBL(34) LBL(42) LBL(46)
5467  #ifdef SUPPORT_UCP  #ifdef SUPPORT_UCP
5468    LBL(36) LBL(37) LBL(38) LBL(39) LBL(40) LBL(41) LBL(44) LBL(45)    LBL(36) LBL(37) LBL(38) LBL(39) LBL(40) LBL(41) LBL(44) LBL(45)
5469      LBL(59) LBL(60) LBL(61) LBL(62)
5470  #endif  /* SUPPORT_UCP */  #endif  /* SUPPORT_UCP */
5471  #endif  /* SUPPORT_UTF8 */  #endif  /* SUPPORT_UTF8 */
5472    default:    default:
# Line 5607  end_subject = md->end_subject; Line 5670  end_subject = md->end_subject;
5670    
5671  md->endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;  md->endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
5672  utf8 = md->utf8 = (re->options & PCRE_UTF8) != 0;  utf8 = md->utf8 = (re->options & PCRE_UTF8) != 0;
5673    md->use_ucp = (re->options & PCRE_UCP) != 0;
5674  md->jscript_compat = (re->options & PCRE_JAVASCRIPT_COMPAT) != 0;  md->jscript_compat = (re->options & PCRE_JAVASCRIPT_COMPAT) != 0;
5675    
5676  md->notbol = (options & PCRE_NOTBOL) != 0;  md->notbol = (options & PCRE_NOTBOL) != 0;
# Line 6115  if (rc == MATCH_MATCH || rc == MATCH_ACC Line 6179  if (rc == MATCH_MATCH || rc == MATCH_ACC
6179    
6180    if (offsetcount < 2) rc = 0; else    if (offsetcount < 2) rc = 0; else
6181      {      {
6182      offsets[0] = md->start_match_ptr - md->start_subject;      offsets[0] = (int)(md->start_match_ptr - md->start_subject);
6183      offsets[1] = md->end_match_ptr - md->start_subject;      offsets[1] = (int)(md->end_match_ptr - md->start_subject);
6184      }      }
6185    
6186    DPRINTF((">>>> returning %d\n", rc));    DPRINTF((">>>> returning %d\n", rc));
# Line 6148  if (start_partial != NULL) Line 6212  if (start_partial != NULL)
6212    md->mark = NULL;    md->mark = NULL;
6213    if (offsetcount > 1)    if (offsetcount > 1)
6214      {      {
6215      offsets[0] = start_partial - (USPTR)subject;      offsets[0] = (int)(start_partial - (USPTR)subject);
6216      offsets[1] = end_subject - (USPTR)subject;      offsets[1] = (int)(end_subject - (USPTR)subject);
6217      }      }
6218    rc = PCRE_ERROR_PARTIAL;    rc = PCRE_ERROR_PARTIAL;
6219    }    }

Legend:
Removed from v.517  
changed lines
  Added in v.534

  ViewVC Help
Powered by ViewVC 1.1.5