/[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 1376 by ph10, Sat Oct 12 18:02:11 2013 UTC revision 1379 by ph10, Mon Oct 14 13:54:07 2013 UTC
# Line 151  static const pcre_uint8 coptable[] = { Line 151  static const pcre_uint8 coptable[] = {
151    /* Character class & ref repeats                                         */    /* Character class & ref repeats                                         */
152    0, 0, 0, 0, 0, 0,              /* *, *?, +, +?, ?, ??                    */    0, 0, 0, 0, 0, 0,              /* *, *?, +, +?, ?, ??                    */
153    0, 0,                          /* CRRANGE, CRMINRANGE                    */    0, 0,                          /* CRRANGE, CRMINRANGE                    */
154      0, 0, 0, 0,                    /* Possessive *+, ++, ?+, CRPOSRANGE      */
155    0,                             /* CLASS                                  */    0,                             /* CLASS                                  */
156    0,                             /* NCLASS                                 */    0,                             /* NCLASS                                 */
157    0,                             /* XCLASS - variable length               */    0,                             /* XCLASS - variable length               */
# Line 222  static const pcre_uint8 poptable[] = { Line 223  static const pcre_uint8 poptable[] = {
223    /* Character class & ref repeats                                         */    /* Character class & ref repeats                                         */
224    1, 1, 1, 1, 1, 1,              /* *, *?, +, +?, ?, ??                    */    1, 1, 1, 1, 1, 1,              /* *, *?, +, +?, ?, ??                    */
225    1, 1,                          /* CRRANGE, CRMINRANGE                    */    1, 1,                          /* CRRANGE, CRMINRANGE                    */
226      1, 1, 1, 1,                    /* Possessive *+, ++, ?+, CRPOSRANGE      */
227    1,                             /* CLASS                                  */    1,                             /* CLASS                                  */
228    1,                             /* NCLASS                                 */    1,                             /* NCLASS                                 */
229    1,                             /* XCLASS - variable length               */    1,                             /* XCLASS - variable length               */
# Line 1101  for (;;) Line 1103  for (;;)
1103            /* Perl space used to exclude VT, but from Perl 5.18 it is included,            /* Perl space used to exclude VT, but from Perl 5.18 it is included,
1104            which means that Perl space and POSIX space are now identical. PCRE            which means that Perl space and POSIX space are now identical. PCRE
1105            was changed at release 8.34. */            was changed at release 8.34. */
1106    
1107            case PT_SPACE:    /* Perl space */            case PT_SPACE:    /* Perl space */
1108            case PT_PXSPACE:  /* POSIX space */            case PT_PXSPACE:  /* POSIX space */
1109            switch(c)            switch(c)
# Line 1110  for (;;) Line 1112  for (;;)
1112              VSPACE_CASES:              VSPACE_CASES:
1113              OK = TRUE;              OK = TRUE;
1114              break;              break;
1115    
1116              default:              default:
1117              OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;              OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;
1118              break;              break;
1119              }              }
1120            break;            break;
1121    
1122            case PT_WORD:            case PT_WORD:
# Line 1359  for (;;) Line 1361  for (;;)
1361            /* Perl space used to exclude VT, but from Perl 5.18 it is included,            /* Perl space used to exclude VT, but from Perl 5.18 it is included,
1362            which means that Perl space and POSIX space are now identical. PCRE            which means that Perl space and POSIX space are now identical. PCRE
1363            was changed at release 8.34. */            was changed at release 8.34. */
1364    
1365            case PT_SPACE:    /* Perl space */            case PT_SPACE:    /* Perl space */
1366            case PT_PXSPACE:  /* POSIX space */            case PT_PXSPACE:  /* POSIX space */
1367            switch(c)            switch(c)
# Line 1368  for (;;) Line 1370  for (;;)
1370              VSPACE_CASES:              VSPACE_CASES:
1371              OK = TRUE;              OK = TRUE;
1372              break;              break;
1373    
1374              default:              default:
1375              OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;              OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;
1376              break;              break;
1377              }              }
1378            break;            break;
1379    
1380            case PT_WORD:            case PT_WORD:
# Line 1611  for (;;) Line 1613  for (;;)
1613            /* Perl space used to exclude VT, but from Perl 5.18 it is included,            /* Perl space used to exclude VT, but from Perl 5.18 it is included,
1614            which means that Perl space and POSIX space are now identical. PCRE            which means that Perl space and POSIX space are now identical. PCRE
1615            was changed at release 8.34. */            was changed at release 8.34. */
1616    
1617            case PT_SPACE:    /* Perl space */            case PT_SPACE:    /* Perl space */
1618            case PT_PXSPACE:  /* POSIX space */            case PT_PXSPACE:  /* POSIX space */
1619            switch(c)            switch(c)
# Line 1620  for (;;) Line 1622  for (;;)
1622              VSPACE_CASES:              VSPACE_CASES:
1623              OK = TRUE;              OK = TRUE;
1624              break;              break;
1625    
1626              default:              default:
1627              OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;              OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;
1628              break;              break;
1629              }              }
1630            break;            break;
1631    
1632            case PT_WORD:            case PT_WORD:
# Line 1888  for (;;) Line 1890  for (;;)
1890            /* Perl space used to exclude VT, but from Perl 5.18 it is included,            /* Perl space used to exclude VT, but from Perl 5.18 it is included,
1891            which means that Perl space and POSIX space are now identical. PCRE            which means that Perl space and POSIX space are now identical. PCRE
1892            was changed at release 8.34. */            was changed at release 8.34. */
1893    
1894            case PT_SPACE:    /* Perl space */            case PT_SPACE:    /* Perl space */
1895            case PT_PXSPACE:  /* POSIX space */            case PT_PXSPACE:  /* POSIX space */
1896            switch(c)            switch(c)
# Line 1897  for (;;) Line 1899  for (;;)
1899              VSPACE_CASES:              VSPACE_CASES:
1900              OK = TRUE;              OK = TRUE;
1901              break;              break;
1902    
1903              default:              default:
1904              OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;              OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;
1905              break;              break;
1906              }              }
1907            break;            break;
1908    
1909            case PT_WORD:            case PT_WORD:
# Line 2569  for (;;) Line 2571  for (;;)
2571            {            {
2572            case OP_CRSTAR:            case OP_CRSTAR:
2573            case OP_CRMINSTAR:            case OP_CRMINSTAR:
2574              case OP_CRPOSSTAR:
2575            ADD_ACTIVE(next_state_offset + 1, 0);            ADD_ACTIVE(next_state_offset + 1, 0);
2576            if (isinclass) { ADD_NEW(state_offset, 0); }            if (isinclass)
2577                {
2578                if (*ecode == OP_CRPOSSTAR)
2579                  {
2580                  active_count--;           /* Remove non-match possibility */
2581                  next_active_state--;
2582                  }
2583                ADD_NEW(state_offset, 0);
2584                }
2585            break;            break;
2586    
2587            case OP_CRPLUS:            case OP_CRPLUS:
2588            case OP_CRMINPLUS:            case OP_CRMINPLUS:
2589              case OP_CRPOSPLUS:
2590            count = current_state->count;  /* Already matched */            count = current_state->count;  /* Already matched */
2591            if (count > 0) { ADD_ACTIVE(next_state_offset + 1, 0); }            if (count > 0) { ADD_ACTIVE(next_state_offset + 1, 0); }
2592            if (isinclass) { count++; ADD_NEW(state_offset, count); }            if (isinclass)
2593                {
2594                if (count > 0 && *ecode == OP_CRPOSPLUS)
2595                  {
2596                  active_count--;           /* Remove non-match possibility */
2597                  next_active_state--;
2598                  }
2599                count++;
2600                ADD_NEW(state_offset, count);
2601                }
2602            break;            break;
2603    
2604            case OP_CRQUERY:            case OP_CRQUERY:
2605            case OP_CRMINQUERY:            case OP_CRMINQUERY:
2606              case OP_CRPOSQUERY:
2607            ADD_ACTIVE(next_state_offset + 1, 0);            ADD_ACTIVE(next_state_offset + 1, 0);
2608            if (isinclass) { ADD_NEW(next_state_offset + 1, 0); }            if (isinclass)
2609                {
2610                if (*ecode == OP_CRPOSQUERY)
2611                  {
2612                  active_count--;           /* Remove non-match possibility */
2613                  next_active_state--;
2614                  }
2615                ADD_NEW(next_state_offset + 1, 0);
2616                }
2617            break;            break;
2618    
2619            case OP_CRRANGE:            case OP_CRRANGE:
2620            case OP_CRMINRANGE:            case OP_CRMINRANGE:
2621              case OP_CRPOSRANGE:
2622            count = current_state->count;  /* Already matched */            count = current_state->count;  /* Already matched */
2623            if (count >= (int)GET2(ecode, 1))            if (count >= (int)GET2(ecode, 1))
2624              { ADD_ACTIVE(next_state_offset + 1 + 2 * IMM2_SIZE, 0); }              { ADD_ACTIVE(next_state_offset + 1 + 2 * IMM2_SIZE, 0); }
2625            if (isinclass)            if (isinclass)
2626              {              {
2627              int max = (int)GET2(ecode, 1 + IMM2_SIZE);              int max = (int)GET2(ecode, 1 + IMM2_SIZE);
2628                if (*ecode == OP_CRPOSRANGE)
2629                  {
2630                  active_count--;           /* Remove non-match possibility */
2631                  next_active_state--;
2632                  }
2633              if (++count >= max && max != 0)   /* Max 0 => no limit */              if (++count >= max && max != 0)   /* Max 0 => no limit */
2634                { ADD_NEW(next_state_offset + 1 + 2 * IMM2_SIZE, 0); }                { ADD_NEW(next_state_offset + 1 + 2 * IMM2_SIZE, 0); }
2635              else              else
# Line 2696  for (;;) Line 2732  for (;;)
2732          /* Back reference conditions and duplicate named recursion conditions          /* Back reference conditions and duplicate named recursion conditions
2733          are not supported */          are not supported */
2734    
2735          if (condcode == OP_CREF || condcode == OP_DNCREF ||          if (condcode == OP_CREF || condcode == OP_DNCREF ||
2736              condcode == OP_DNRREF)              condcode == OP_DNRREF)
2737            return PCRE_ERROR_DFA_UCOND;            return PCRE_ERROR_DFA_UCOND;
2738    

Legend:
Removed from v.1376  
changed lines
  Added in v.1379

  ViewVC Help
Powered by ViewVC 1.1.5