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

Diff of /code/trunk/pcre_dfa_exec.c

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

revision 1015 by ph10, Sun Aug 26 16:07:14 2012 UTC revision 1033 by ph10, Mon Sep 10 11:02:48 2012 UTC
# Line 1370  for (;;) Line 1370  for (;;)
1370        if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); }        if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); }
1371        if (clen > 0)        if (clen > 0)
1372          {          {
1373          int lgb, rgb;          int lgb, rgb;
1374          const pcre_uchar *nptr = ptr + clen;          const pcre_uchar *nptr = ptr + clen;
1375          int ncount = 0;          int ncount = 0;
1376          if (count > 0 && codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSPLUS)          if (count > 0 && codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSPLUS)
# Line 1378  for (;;) Line 1378  for (;;)
1378            active_count--;           /* Remove non-match possibility */            active_count--;           /* Remove non-match possibility */
1379            next_active_state--;            next_active_state--;
1380            }            }
1381          lgb = UCD_GRAPHBREAK(c);          lgb = UCD_GRAPHBREAK(c);
1382          while (nptr < end_subject)          while (nptr < end_subject)
1383            {            {
1384            dlen = 1;            dlen = 1;
1385            if (!utf) d = *nptr; else { GETCHARLEN(d, nptr, dlen); }            if (!utf) d = *nptr; else { GETCHARLEN(d, nptr, dlen); }
1386            rgb = UCD_GRAPHBREAK(d);            rgb = UCD_GRAPHBREAK(d);
1387            if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0) break;            if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0) break;
1388            ncount++;            ncount++;
1389            lgb = rgb;            lgb = rgb;
1390            nptr += dlen;            nptr += dlen;
1391            }            }
1392          count++;          count++;
# Line 1406  for (;;) Line 1406  for (;;)
1406          int ncount = 0;          int ncount = 0;
1407          switch (c)          switch (c)
1408            {            {
1409            case 0x000b:            case CHAR_VT:
1410            case 0x000c:            case CHAR_FF:
1411            case 0x0085:            case CHAR_NEL:
1412    #ifndef EBCDIC
1413            case 0x2028:            case 0x2028:
1414            case 0x2029:            case 0x2029:
1415    #endif  /* Not EBCDIC */
1416            if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;            if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;
1417            goto ANYNL01;            goto ANYNL01;
1418    
1419            case 0x000d:            case CHAR_CR:
1420            if (ptr + 1 < end_subject && ptr[1] == 0x0a) ncount = 1;            if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1;
1421            /* Fall through */            /* Fall through */
1422    
1423            ANYNL01:            ANYNL01:
1424            case 0x000a:            case CHAR_LF:
1425            if (count > 0 && codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSPLUS)            if (count > 0 && codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSPLUS)
1426              {              {
1427              active_count--;           /* Remove non-match possibility */              active_count--;           /* Remove non-match possibility */
# Line 1446  for (;;) Line 1448  for (;;)
1448          BOOL OK;          BOOL OK;
1449          switch (c)          switch (c)
1450            {            {
1451            case 0x000a:            case CHAR_LF:
1452            case 0x000b:            case CHAR_VT:
1453            case 0x000c:            case CHAR_FF:
1454            case 0x000d:            case CHAR_CR:
1455            case 0x0085:            case CHAR_NEL:
1456    #ifndef EBCDIC
1457            case 0x2028:            case 0x2028:
1458            case 0x2029:            case 0x2029:
1459    #endif  /* Not EBCDIC */
1460            OK = TRUE;            OK = TRUE;
1461            break;            break;
1462    
# Line 1485  for (;;) Line 1489  for (;;)
1489          BOOL OK;          BOOL OK;
1490          switch (c)          switch (c)
1491            {            {
1492            case 0x09:      /* HT */            case CHAR_HT:
1493            case 0x20:      /* SPACE */            case CHAR_SPACE:
1494    #ifndef EBCDIC
1495            case 0xa0:      /* NBSP */            case 0xa0:      /* NBSP */
1496            case 0x1680:    /* OGHAM SPACE MARK */            case 0x1680:    /* OGHAM SPACE MARK */
1497            case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */            case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */
# Line 1504  for (;;) Line 1509  for (;;)
1509            case 0x202f:    /* NARROW NO-BREAK SPACE */            case 0x202f:    /* NARROW NO-BREAK SPACE */
1510            case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */            case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */
1511            case 0x3000:    /* IDEOGRAPHIC SPACE */            case 0x3000:    /* IDEOGRAPHIC SPACE */
1512    #endif  /* Not EBCDIC */
1513            OK = TRUE;            OK = TRUE;
1514            break;            break;
1515    
# Line 1629  for (;;) Line 1635  for (;;)
1635        ADD_ACTIVE(state_offset + 2, 0);        ADD_ACTIVE(state_offset + 2, 0);
1636        if (clen > 0)        if (clen > 0)
1637          {          {
1638          int lgb, rgb;          int lgb, rgb;
1639          const pcre_uchar *nptr = ptr + clen;          const pcre_uchar *nptr = ptr + clen;
1640          int ncount = 0;          int ncount = 0;
1641          if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSSTAR ||          if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSSTAR ||
# Line 1638  for (;;) Line 1644  for (;;)
1644            active_count--;           /* Remove non-match possibility */            active_count--;           /* Remove non-match possibility */
1645            next_active_state--;            next_active_state--;
1646            }            }
1647          lgb = UCD_GRAPHBREAK(c);          lgb = UCD_GRAPHBREAK(c);
1648          while (nptr < end_subject)          while (nptr < end_subject)
1649            {            {
1650            dlen = 1;            dlen = 1;
1651            if (!utf) d = *nptr; else { GETCHARLEN(d, nptr, dlen); }            if (!utf) d = *nptr; else { GETCHARLEN(d, nptr, dlen); }
1652            rgb = UCD_GRAPHBREAK(d);            rgb = UCD_GRAPHBREAK(d);
1653            if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0) break;            if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0) break;
1654            ncount++;            ncount++;
1655            lgb = rgb;            lgb = rgb;
1656            nptr += dlen;            nptr += dlen;
1657            }            }
1658          ADD_NEW_DATA(-(state_offset + count), 0, ncount);          ADD_NEW_DATA(-(state_offset + count), 0, ncount);
# Line 1673  for (;;) Line 1679  for (;;)
1679          int ncount = 0;          int ncount = 0;
1680          switch (c)          switch (c)
1681            {            {
1682            case 0x000b:            case CHAR_VT:
1683            case 0x000c:            case CHAR_FF:
1684            case 0x0085:            case CHAR_NEL:
1685    #ifndef EBCDIC
1686            case 0x2028:            case 0x2028:
1687            case 0x2029:            case 0x2029:
1688    #endif  /* Not EBCDIC */
1689            if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;            if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;
1690            goto ANYNL02;            goto ANYNL02;
1691    
1692            case 0x000d:            case CHAR_CR:
1693            if (ptr + 1 < end_subject && ptr[1] == 0x0a) ncount = 1;            if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1;
1694            /* Fall through */            /* Fall through */
1695    
1696            ANYNL02:            ANYNL02:
1697            case 0x000a:            case CHAR_LF:
1698            if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSSTAR ||            if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSSTAR ||
1699                codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSQUERY)                codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSQUERY)
1700              {              {
# Line 1721  for (;;) Line 1729  for (;;)
1729          BOOL OK;          BOOL OK;
1730          switch (c)          switch (c)
1731            {            {
1732            case 0x000a:            case CHAR_LF:
1733            case 0x000b:            case CHAR_VT:
1734            case 0x000c:            case CHAR_FF:
1735            case 0x000d:            case CHAR_CR:
1736            case 0x0085:            case CHAR_NEL:
1737    #ifndef EBCDIC
1738            case 0x2028:            case 0x2028:
1739            case 0x2029:            case 0x2029:
1740    #endif  /* Not EBCDIC */
1741            OK = TRUE;            OK = TRUE;
1742            break;            break;
1743    
# Line 1767  for (;;) Line 1777  for (;;)
1777          BOOL OK;          BOOL OK;
1778          switch (c)          switch (c)
1779            {            {
1780            case 0x09:      /* HT */            case CHAR_HT:
1781            case 0x20:      /* SPACE */            case CHAR_SPACE:
1782    #ifndef EBCDIC
1783            case 0xa0:      /* NBSP */            case 0xa0:      /* NBSP */
1784            case 0x1680:    /* OGHAM SPACE MARK */            case 0x1680:    /* OGHAM SPACE MARK */
1785            case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */            case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */
# Line 1786  for (;;) Line 1797  for (;;)
1797            case 0x202f:    /* NARROW NO-BREAK SPACE */            case 0x202f:    /* NARROW NO-BREAK SPACE */
1798            case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */            case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */
1799            case 0x3000:    /* IDEOGRAPHIC SPACE */            case 0x3000:    /* IDEOGRAPHIC SPACE */
1800    #endif  /* Not EBCDIC */
1801            OK = TRUE;            OK = TRUE;
1802            break;            break;
1803    
# Line 1899  for (;;) Line 1911  for (;;)
1911        count = current_state->count;  /* Number already matched */        count = current_state->count;  /* Number already matched */
1912        if (clen > 0)        if (clen > 0)
1913          {          {
1914          int lgb, rgb;          int lgb, rgb;
1915          const pcre_uchar *nptr = ptr + clen;          const pcre_uchar *nptr = ptr + clen;
1916          int ncount = 0;          int ncount = 0;
1917          if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSUPTO)          if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSUPTO)
# Line 1907  for (;;) Line 1919  for (;;)
1919            active_count--;           /* Remove non-match possibility */            active_count--;           /* Remove non-match possibility */
1920            next_active_state--;            next_active_state--;
1921            }            }
1922          lgb = UCD_GRAPHBREAK(c);          lgb = UCD_GRAPHBREAK(c);
1923          while (nptr < end_subject)          while (nptr < end_subject)
1924            {            {
1925            dlen = 1;            dlen = 1;
1926            if (!utf) d = *nptr; else { GETCHARLEN(d, nptr, dlen); }            if (!utf) d = *nptr; else { GETCHARLEN(d, nptr, dlen); }
1927            rgb = UCD_GRAPHBREAK(d);            rgb = UCD_GRAPHBREAK(d);
1928            if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0) break;            if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0) break;
1929            ncount++;            ncount++;
1930            lgb = rgb;            lgb = rgb;
1931            nptr += dlen;            nptr += dlen;
1932            }            }
1933          if (nptr >= end_subject && (md->moptions & PCRE_PARTIAL_HARD) != 0)          if (nptr >= end_subject && (md->moptions & PCRE_PARTIAL_HARD) != 0)
# Line 1941  for (;;) Line 1953  for (;;)
1953          int ncount = 0;          int ncount = 0;
1954          switch (c)          switch (c)
1955            {            {
1956            case 0x000b:            case CHAR_VT:
1957            case 0x000c:            case CHAR_FF:
1958            case 0x0085:            case CHAR_NEL:
1959    #ifndef EBCDIC
1960            case 0x2028:            case 0x2028:
1961            case 0x2029:            case 0x2029:
1962    #endif  /* Not EBCDIC */
1963            if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;            if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;
1964            goto ANYNL03;            goto ANYNL03;
1965    
1966            case 0x000d:            case CHAR_CR:
1967            if (ptr + 1 < end_subject && ptr[1] == 0x0a) ncount = 1;            if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1;
1968            /* Fall through */            /* Fall through */
1969    
1970            ANYNL03:            ANYNL03:
1971            case 0x000a:            case CHAR_LF:
1972            if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSUPTO)            if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSUPTO)
1973              {              {
1974              active_count--;           /* Remove non-match possibility */              active_count--;           /* Remove non-match possibility */
# Line 1985  for (;;) Line 1999  for (;;)
1999          BOOL OK;          BOOL OK;
2000          switch (c)          switch (c)
2001            {            {
2002            case 0x000a:            case CHAR_LF:
2003            case 0x000b:            case CHAR_VT:
2004            case 0x000c:            case CHAR_FF:
2005            case 0x000d:            case CHAR_CR:
2006            case 0x0085:            case CHAR_NEL:
2007    #ifndef EBCDIC
2008            case 0x2028:            case 0x2028:
2009            case 0x2029:            case 0x2029:
2010    #endif  /* Not EBCDIC */
2011            OK = TRUE;            OK = TRUE;
2012            break;            break;
2013    
# Line 2027  for (;;) Line 2043  for (;;)
2043          BOOL OK;          BOOL OK;
2044          switch (c)          switch (c)
2045            {            {
2046            case 0x09:      /* HT */            case CHAR_HT:
2047            case 0x20:      /* SPACE */            case CHAR_SPACE:
2048    #ifndef EBCDIC
2049            case 0xa0:      /* NBSP */            case 0xa0:      /* NBSP */
2050            case 0x1680:    /* OGHAM SPACE MARK */            case 0x1680:    /* OGHAM SPACE MARK */
2051            case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */            case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */
# Line 2046  for (;;) Line 2063  for (;;)
2063            case 0x202f:    /* NARROW NO-BREAK SPACE */            case 0x202f:    /* NARROW NO-BREAK SPACE */
2064            case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */            case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */
2065            case 0x3000:    /* IDEOGRAPHIC SPACE */            case 0x3000:    /* IDEOGRAPHIC SPACE */
2066    #endif  /* Not EBCDIC */
2067            OK = TRUE;            OK = TRUE;
2068            break;            break;
2069    
# Line 2123  for (;;) Line 2141  for (;;)
2141        case OP_EXTUNI:        case OP_EXTUNI:
2142        if (clen > 0)        if (clen > 0)
2143          {          {
2144          int lgb, rgb;          int lgb, rgb;
2145          const pcre_uchar *nptr = ptr + clen;          const pcre_uchar *nptr = ptr + clen;
2146          int ncount = 0;          int ncount = 0;
2147          lgb = UCD_GRAPHBREAK(c);          lgb = UCD_GRAPHBREAK(c);
2148          while (nptr < end_subject)          while (nptr < end_subject)
2149            {            {
2150            dlen = 1;            dlen = 1;
2151            if (!utf) d = *nptr; else { GETCHARLEN(d, nptr, dlen); }            if (!utf) d = *nptr; else { GETCHARLEN(d, nptr, dlen); }
2152            rgb = UCD_GRAPHBREAK(d);            rgb = UCD_GRAPHBREAK(d);
2153            if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0) break;            if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0) break;
2154            ncount++;            ncount++;
2155            lgb = rgb;            lgb = rgb;
2156            nptr += dlen;            nptr += dlen;
2157            }            }
2158          if (nptr >= end_subject && (md->moptions & PCRE_PARTIAL_HARD) != 0)          if (nptr >= end_subject && (md->moptions & PCRE_PARTIAL_HARD) != 0)
# Line 2152  for (;;) Line 2170  for (;;)
2170        case OP_ANYNL:        case OP_ANYNL:
2171        if (clen > 0) switch(c)        if (clen > 0) switch(c)
2172          {          {
2173          case 0x000b:          case CHAR_VT:
2174          case 0x000c:          case CHAR_FF:
2175          case 0x0085:          case CHAR_NEL:
2176    #ifndef EBCDIC
2177          case 0x2028:          case 0x2028:
2178          case 0x2029:          case 0x2029:
2179    #endif  /* Not EBCDIC */
2180          if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;          if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;
2181    
2182          case 0x000a:          case CHAR_LF:
2183          ADD_NEW(state_offset + 1, 0);          ADD_NEW(state_offset + 1, 0);
2184          break;          break;
2185    
2186          case 0x000d:          case CHAR_CR:
2187          if (ptr + 1 >= end_subject)          if (ptr + 1 >= end_subject)
2188            {            {
2189            ADD_NEW(state_offset + 1, 0);            ADD_NEW(state_offset + 1, 0);
2190            if ((md->moptions & PCRE_PARTIAL_HARD) != 0)            if ((md->moptions & PCRE_PARTIAL_HARD) != 0)
2191              reset_could_continue = TRUE;              reset_could_continue = TRUE;
2192            }            }
2193          else if (ptr[1] == 0x0a)          else if (ptr[1] == CHAR_LF)
2194            {            {
2195            ADD_NEW_DATA(-(state_offset + 1), 0, 1);            ADD_NEW_DATA(-(state_offset + 1), 0, 1);
2196            }            }
# Line 2186  for (;;) Line 2206  for (;;)
2206        case OP_NOT_VSPACE:        case OP_NOT_VSPACE:
2207        if (clen > 0) switch(c)        if (clen > 0) switch(c)
2208          {          {
2209          case 0x000a:          case CHAR_LF:
2210          case 0x000b:          case CHAR_VT:
2211          case 0x000c:          case CHAR_FF:
2212          case 0x000d:          case CHAR_CR:
2213          case 0x0085:          case CHAR_NEL:
2214    #ifndef EBCDIC
2215          case 0x2028:          case 0x2028:
2216          case 0x2029:          case 0x2029:
2217    #endif  /* Not EBCDIC */
2218          break;          break;
2219    
2220          default:          default:
# Line 2205  for (;;) Line 2227  for (;;)
2227        case OP_VSPACE:        case OP_VSPACE:
2228        if (clen > 0) switch(c)        if (clen > 0) switch(c)
2229          {          {
2230          case 0x000a:          case CHAR_LF:
2231          case 0x000b:          case CHAR_VT:
2232          case 0x000c:          case CHAR_FF:
2233          case 0x000d:          case CHAR_CR:
2234          case 0x0085:          case CHAR_NEL:
2235    #ifndef EBCDIC
2236          case 0x2028:          case 0x2028:
2237          case 0x2029:          case 0x2029:
2238    #endif  /* Not EBCDIC */
2239          ADD_NEW(state_offset + 1, 0);          ADD_NEW(state_offset + 1, 0);
2240          break;          break;
2241    
# Line 2223  for (;;) Line 2247  for (;;)
2247        case OP_NOT_HSPACE:        case OP_NOT_HSPACE:
2248        if (clen > 0) switch(c)        if (clen > 0) switch(c)
2249          {          {
2250          case 0x09:      /* HT */          case CHAR_HT:
2251          case 0x20:      /* SPACE */          case CHAR_SPACE:
2252    #ifndef EBCDIC
2253          case 0xa0:      /* NBSP */          case 0xa0:      /* NBSP */
2254          case 0x1680:    /* OGHAM SPACE MARK */          case 0x1680:    /* OGHAM SPACE MARK */
2255          case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */          case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */
# Line 2242  for (;;) Line 2267  for (;;)
2267          case 0x202f:    /* NARROW NO-BREAK SPACE */          case 0x202f:    /* NARROW NO-BREAK SPACE */
2268          case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */          case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */
2269          case 0x3000:    /* IDEOGRAPHIC SPACE */          case 0x3000:    /* IDEOGRAPHIC SPACE */
2270    #endif  /* Not EBCDIC */
2271          break;          break;
2272    
2273          default:          default:
# Line 2254  for (;;) Line 2280  for (;;)
2280        case OP_HSPACE:        case OP_HSPACE:
2281        if (clen > 0) switch(c)        if (clen > 0) switch(c)
2282          {          {
2283          case 0x09:      /* HT */          case CHAR_HT:
2284          case 0x20:      /* SPACE */          case CHAR_SPACE:
2285    #ifndef EBCDIC
2286          case 0xa0:      /* NBSP */          case 0xa0:      /* NBSP */
2287          case 0x1680:    /* OGHAM SPACE MARK */          case 0x1680:    /* OGHAM SPACE MARK */
2288          case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */          case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */
# Line 2273  for (;;) Line 2300  for (;;)
2300          case 0x202f:    /* NARROW NO-BREAK SPACE */          case 0x202f:    /* NARROW NO-BREAK SPACE */
2301          case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */          case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */
2302          case 0x3000:    /* IDEOGRAPHIC SPACE */          case 0x3000:    /* IDEOGRAPHIC SPACE */
2303    #endif  /* Not EBCDIC */
2304          ADD_NEW(state_offset + 1, 0);          ADD_NEW(state_offset + 1, 0);
2305          break;          break;
2306          }          }

Legend:
Removed from v.1015  
changed lines
  Added in v.1033

  ViewVC Help
Powered by ViewVC 1.1.5