/[pcre]/code/trunk/pcre_internal.h
ViewVC logotype

Diff of /code/trunk/pcre_internal.h

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

revision 507 by ph10, Wed Mar 10 16:08:01 2010 UTC revision 574 by ph10, Sat Nov 20 17:47:27 2010 UTC
# Line 408  capturing parenthesis numbers in back re Line 408  capturing parenthesis numbers in back re
408    
409  /* When UTF-8 encoding is being used, a character is no longer just a single  /* When UTF-8 encoding is being used, a character is no longer just a single
410  byte. The macros for character handling generate simple sequences when used in  byte. The macros for character handling generate simple sequences when used in
411  byte-mode, and more complicated ones for UTF-8 characters. BACKCHAR should  byte-mode, and more complicated ones for UTF-8 characters. GETCHARLENTEST is
412  never be called in byte mode. To make sure it can never even appear when UTF-8  not used when UTF-8 is not supported, so it is not defined, and BACKCHAR should
413  support is omitted, we don't even define it. */  never be called in byte mode. To make sure they can never even appear when
414    UTF-8 support is omitted, we don't even define them. */
415    
416  #ifndef SUPPORT_UTF8  #ifndef SUPPORT_UTF8
417  #define GETCHAR(c, eptr) c = *eptr;  #define GETCHAR(c, eptr) c = *eptr;
# Line 418  support is omitted, we don't even define Line 419  support is omitted, we don't even define
419  #define GETCHARINC(c, eptr) c = *eptr++;  #define GETCHARINC(c, eptr) c = *eptr++;
420  #define GETCHARINCTEST(c, eptr) c = *eptr++;  #define GETCHARINCTEST(c, eptr) c = *eptr++;
421  #define GETCHARLEN(c, eptr, len) c = *eptr;  #define GETCHARLEN(c, eptr, len) c = *eptr;
422    /* #define GETCHARLENTEST(c, eptr, len) */
423  /* #define BACKCHAR(eptr) */  /* #define BACKCHAR(eptr) */
424    
425  #else   /* SUPPORT_UTF8 */  #else   /* SUPPORT_UTF8 */
426    
427    /* These macros were originally written in the form of loops that used data
428    from the tables whose names start with _pcre_utf8_table. They were rewritten by
429    a user so as not to use loops, because in some environments this gives a
430    significant performance advantage, and it seems never to do any harm. */
431    
432    /* Base macro to pick up the remaining bytes of a UTF-8 character, not
433    advancing the pointer. */
434    
435    #define GETUTF8(c, eptr) \
436        { \
437        if ((c & 0x20) == 0) \
438          c = ((c & 0x1f) << 6) | (eptr[1] & 0x3f); \
439        else if ((c & 0x10) == 0) \
440          c = ((c & 0x0f) << 12) | ((eptr[1] & 0x3f) << 6) | (eptr[2] & 0x3f); \
441        else if ((c & 0x08) == 0) \
442          c = ((c & 0x07) << 18) | ((eptr[1] & 0x3f) << 12) | \
443          ((eptr[2] & 0x3f) << 6) | (eptr[3] & 0x3f); \
444        else if ((c & 0x04) == 0) \
445          c = ((c & 0x03) << 24) | ((eptr[1] & 0x3f) << 18) | \
446              ((eptr[2] & 0x3f) << 12) | ((eptr[3] & 0x3f) << 6) | \
447              (eptr[4] & 0x3f); \
448        else \
449          c = ((c & 0x01) << 30) | ((eptr[1] & 0x3f) << 24) | \
450              ((eptr[2] & 0x3f) << 18) | ((eptr[3] & 0x3f) << 12) | \
451              ((eptr[4] & 0x3f) << 6) | (eptr[5] & 0x3f); \
452        }
453    
454  /* Get the next UTF-8 character, not advancing the pointer. This is called when  /* Get the next UTF-8 character, not advancing the pointer. This is called when
455  we know we are in UTF-8 mode. */  we know we are in UTF-8 mode. */
456    
457  #define GETCHAR(c, eptr) \  #define GETCHAR(c, eptr) \
458    c = *eptr; \    c = *eptr; \
459    if (c >= 0xc0) \    if (c >= 0xc0) GETUTF8(c, eptr);
     { \  
     int gcii; \  
     int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \  
     int gcss = 6*gcaa; \  
     c = (c & _pcre_utf8_table3[gcaa]) << gcss; \  
     for (gcii = 1; gcii <= gcaa; gcii++) \  
       { \  
       gcss -= 6; \  
       c |= (eptr[gcii] & 0x3f) << gcss; \  
       } \  
     }  
460    
461  /* Get the next UTF-8 character, testing for UTF-8 mode, and not advancing the  /* Get the next UTF-8 character, testing for UTF-8 mode, and not advancing the
462  pointer. */  pointer. */
463    
464  #define GETCHARTEST(c, eptr) \  #define GETCHARTEST(c, eptr) \
465    c = *eptr; \    c = *eptr; \
466    if (utf8 && c >= 0xc0) \    if (utf8 && c >= 0xc0) GETUTF8(c, eptr);
467    
468    /* Base macro to pick up the remaining bytes of a UTF-8 character, advancing
469    the pointer. */
470    
471    #define GETUTF8INC(c, eptr) \
472      { \      { \
473      int gcii; \      if ((c & 0x20) == 0) \
474      int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \        c = ((c & 0x1f) << 6) | (*eptr++ & 0x3f); \
475      int gcss = 6*gcaa; \      else if ((c & 0x10) == 0) \
     c = (c & _pcre_utf8_table3[gcaa]) << gcss; \  
     for (gcii = 1; gcii <= gcaa; gcii++) \  
476        { \        { \
477        gcss -= 6; \        c = ((c & 0x0f) << 12) | ((*eptr & 0x3f) << 6) | (eptr[1] & 0x3f); \
478        c |= (eptr[gcii] & 0x3f) << gcss; \        eptr += 2; \
479          } \
480        else if ((c & 0x08) == 0) \
481          { \
482          c = ((c & 0x07) << 18) | ((*eptr & 0x3f) << 12) | \
483              ((eptr[1] & 0x3f) << 6) | (eptr[2] & 0x3f); \
484          eptr += 3; \
485          } \
486        else if ((c & 0x04) == 0) \
487          { \
488          c = ((c & 0x03) << 24) | ((*eptr & 0x3f) << 18) | \
489              ((eptr[1] & 0x3f) << 12) | ((eptr[2] & 0x3f) << 6) | \
490              (eptr[3] & 0x3f); \
491          eptr += 4; \
492          } \
493        else \
494          { \
495          c = ((c & 0x01) << 30) | ((*eptr & 0x3f) << 24) | \
496              ((eptr[1] & 0x3f) << 18) | ((eptr[2] & 0x3f) << 12) | \
497              ((eptr[3] & 0x3f) << 6) | (eptr[4] & 0x3f); \
498          eptr += 5; \
499        } \        } \
500      }      }
501    
# Line 463  know we are in UTF-8 mode. */ Line 504  know we are in UTF-8 mode. */
504    
505  #define GETCHARINC(c, eptr) \  #define GETCHARINC(c, eptr) \
506    c = *eptr++; \    c = *eptr++; \
507    if (c >= 0xc0) \    if (c >= 0xc0) GETUTF8INC(c, eptr);
     { \  
     int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \  
     int gcss = 6*gcaa; \  
     c = (c & _pcre_utf8_table3[gcaa]) << gcss; \  
     while (gcaa-- > 0) \  
       { \  
       gcss -= 6; \  
       c |= (*eptr++ & 0x3f) << gcss; \  
       } \  
     }  
508    
509  /* Get the next character, testing for UTF-8 mode, and advancing the pointer */  /* Get the next character, testing for UTF-8 mode, and advancing the pointer.
510    This is called when we don't know if we are in UTF-8 mode. */
511    
512  #define GETCHARINCTEST(c, eptr) \  #define GETCHARINCTEST(c, eptr) \
513    c = *eptr++; \    c = *eptr++; \
514    if (utf8 && c >= 0xc0) \    if (utf8 && c >= 0xc0) GETUTF8INC(c, eptr);
515    
516    /* Base macro to pick up the remaining bytes of a UTF-8 character, not
517    advancing the pointer, incrementing the length. */
518    
519    #define GETUTF8LEN(c, eptr, len) \
520      { \      { \
521      int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \      if ((c & 0x20) == 0) \
522      int gcss = 6*gcaa; \        { \
523      c = (c & _pcre_utf8_table3[gcaa]) << gcss; \        c = ((c & 0x1f) << 6) | (eptr[1] & 0x3f); \
524      while (gcaa-- > 0) \        len++; \
525          } \
526        else if ((c & 0x10)  == 0) \
527          { \
528          c = ((c & 0x0f) << 12) | ((eptr[1] & 0x3f) << 6) | (eptr[2] & 0x3f); \
529          len += 2; \
530          } \
531        else if ((c & 0x08)  == 0) \
532          {\
533          c = ((c & 0x07) << 18) | ((eptr[1] & 0x3f) << 12) | \
534              ((eptr[2] & 0x3f) << 6) | (eptr[3] & 0x3f); \
535          len += 3; \
536          } \
537        else if ((c & 0x04)  == 0) \
538        { \        { \
539        gcss -= 6; \        c = ((c & 0x03) << 24) | ((eptr[1] & 0x3f) << 18) | \
540        c |= (*eptr++ & 0x3f) << gcss; \            ((eptr[2] & 0x3f) << 12) | ((eptr[3] & 0x3f) << 6) | \
541              (eptr[4] & 0x3f); \
542          len += 4; \
543          } \
544        else \
545          {\
546          c = ((c & 0x01) << 30) | ((eptr[1] & 0x3f) << 24) | \
547              ((eptr[2] & 0x3f) << 18) | ((eptr[3] & 0x3f) << 12) | \
548              ((eptr[4] & 0x3f) << 6) | (eptr[5] & 0x3f); \
549          len += 5; \
550        } \        } \
551      }      }
552    
# Line 496  if there are extra bytes. This is called Line 555  if there are extra bytes. This is called
555    
556  #define GETCHARLEN(c, eptr, len) \  #define GETCHARLEN(c, eptr, len) \
557    c = *eptr; \    c = *eptr; \
558    if (c >= 0xc0) \    if (c >= 0xc0) GETUTF8LEN(c, eptr, len);
     { \  
     int gcii; \  
     int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \  
     int gcss = 6*gcaa; \  
     c = (c & _pcre_utf8_table3[gcaa]) << gcss; \  
     for (gcii = 1; gcii <= gcaa; gcii++) \  
       { \  
       gcss -= 6; \  
       c |= (eptr[gcii] & 0x3f) << gcss; \  
       } \  
     len += gcaa; \  
     }  
559    
560  /* Get the next UTF-8 character, testing for UTF-8 mode, not advancing the  /* Get the next UTF-8 character, testing for UTF-8 mode, not advancing the
561  pointer, incrementing length if there are extra bytes. This is called when we  pointer, incrementing length if there are extra bytes. This is called when we
562  know we are in UTF-8 mode. */  do not know if we are in UTF-8 mode. */
563    
564  #define GETCHARLENTEST(c, eptr, len) \  #define GETCHARLENTEST(c, eptr, len) \
565    c = *eptr; \    c = *eptr; \
566    if (utf8 && c >= 0xc0) \    if (utf8 && c >= 0xc0) GETUTF8LEN(c, eptr, len);
     { \  
     int gcii; \  
     int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \  
     int gcss = 6*gcaa; \  
     c = (c & _pcre_utf8_table3[gcaa]) << gcss; \  
     for (gcii = 1; gcii <= gcaa; gcii++) \  
       { \  
       gcss -= 6; \  
       c |= (eptr[gcii] & 0x3f) << gcss; \  
       } \  
     len += gcaa; \  
     }  
567    
568  /* If the pointer is not at the start of a character, move it back until  /* If the pointer is not at the start of a character, move it back until
569  it is. This is called only in UTF-8 mode - we don't put a test within the macro  it is. This is called only in UTF-8 mode - we don't put a test within the macro
# Line 536  because almost all calls are already wit Line 571  because almost all calls are already wit
571    
572  #define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--  #define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--
573    
574  #endif  #endif  /* SUPPORT_UTF8 */
575    
576    
577  /* In case there is no definition of offsetof() provided - though any proper  /* In case there is no definition of offsetof() provided - though any proper
# Line 580  time, run time, or study time, respectiv Line 615  time, run time, or study time, respectiv
615     PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \     PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \
616     PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT|PCRE_FIRSTLINE| \     PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT|PCRE_FIRSTLINE| \
617     PCRE_DUPNAMES|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE| \     PCRE_DUPNAMES|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE| \
618     PCRE_JAVASCRIPT_COMPAT)     PCRE_JAVASCRIPT_COMPAT|PCRE_UCP)
619    
620  #define PUBLIC_EXEC_OPTIONS \  #define PUBLIC_EXEC_OPTIONS \
621    (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NOTEMPTY_ATSTART| \    (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NOTEMPTY_ATSTART| \
# Line 875  so that PCRE works on both ASCII and EBC Line 910  so that PCRE works on both ASCII and EBC
910  #define STRING_COMMIT0              "COMMIT\0"  #define STRING_COMMIT0              "COMMIT\0"
911  #define STRING_F0                   "F\0"  #define STRING_F0                   "F\0"
912  #define STRING_FAIL0                "FAIL\0"  #define STRING_FAIL0                "FAIL\0"
913    #define STRING_MARK0                "MARK\0"
914  #define STRING_PRUNE0               "PRUNE\0"  #define STRING_PRUNE0               "PRUNE\0"
915  #define STRING_SKIP0                "SKIP\0"  #define STRING_SKIP0                "SKIP\0"
916  #define STRING_THEN                 "THEN"  #define STRING_THEN                 "THEN"
# Line 904  so that PCRE works on both ASCII and EBC Line 940  so that PCRE works on both ASCII and EBC
940  #define STRING_BSR_ANYCRLF_RIGHTPAR "BSR_ANYCRLF)"  #define STRING_BSR_ANYCRLF_RIGHTPAR "BSR_ANYCRLF)"
941  #define STRING_BSR_UNICODE_RIGHTPAR "BSR_UNICODE)"  #define STRING_BSR_UNICODE_RIGHTPAR "BSR_UNICODE)"
942  #define STRING_UTF8_RIGHTPAR        "UTF8)"  #define STRING_UTF8_RIGHTPAR        "UTF8)"
943    #define STRING_UCP_RIGHTPAR         "UCP)"
944    
945  #else  /* SUPPORT_UTF8 */  #else  /* SUPPORT_UTF8 */
946    
# Line 1127  only. */ Line 1164  only. */
1164  #define STRING_COMMIT0              STR_C STR_O STR_M STR_M STR_I STR_T "\0"  #define STRING_COMMIT0              STR_C STR_O STR_M STR_M STR_I STR_T "\0"
1165  #define STRING_F0                   STR_F "\0"  #define STRING_F0                   STR_F "\0"
1166  #define STRING_FAIL0                STR_F STR_A STR_I STR_L "\0"  #define STRING_FAIL0                STR_F STR_A STR_I STR_L "\0"
1167    #define STRING_MARK0                STR_M STR_A STR_R STR_K "\0"
1168  #define STRING_PRUNE0               STR_P STR_R STR_U STR_N STR_E "\0"  #define STRING_PRUNE0               STR_P STR_R STR_U STR_N STR_E "\0"
1169  #define STRING_SKIP0                STR_S STR_K STR_I STR_P "\0"  #define STRING_SKIP0                STR_S STR_K STR_I STR_P "\0"
1170  #define STRING_THEN                 STR_T STR_H STR_E STR_N  #define STRING_THEN                 STR_T STR_H STR_E STR_N
# Line 1156  only. */ Line 1194  only. */
1194  #define STRING_BSR_ANYCRLF_RIGHTPAR STR_B STR_S STR_R STR_UNDERSCORE STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS  #define STRING_BSR_ANYCRLF_RIGHTPAR STR_B STR_S STR_R STR_UNDERSCORE STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS
1195  #define STRING_BSR_UNICODE_RIGHTPAR STR_B STR_S STR_R STR_UNDERSCORE STR_U STR_N STR_I STR_C STR_O STR_D STR_E STR_RIGHT_PARENTHESIS  #define STRING_BSR_UNICODE_RIGHTPAR STR_B STR_S STR_R STR_UNDERSCORE STR_U STR_N STR_I STR_C STR_O STR_D STR_E STR_RIGHT_PARENTHESIS
1196  #define STRING_UTF8_RIGHTPAR        STR_U STR_T STR_F STR_8 STR_RIGHT_PARENTHESIS  #define STRING_UTF8_RIGHTPAR        STR_U STR_T STR_F STR_8 STR_RIGHT_PARENTHESIS
1197    #define STRING_UCP_RIGHTPAR         STR_U STR_C STR_P STR_RIGHT_PARENTHESIS
1198    
1199  #endif  /* SUPPORT_UTF8 */  #endif  /* SUPPORT_UTF8 */
1200    
# Line 1188  only. */ Line 1227  only. */
1227    
1228  #define PT_ANY        0    /* Any property - matches all chars */  #define PT_ANY        0    /* Any property - matches all chars */
1229  #define PT_LAMP       1    /* L& - the union of Lu, Ll, Lt */  #define PT_LAMP       1    /* L& - the union of Lu, Ll, Lt */
1230  #define PT_GC         2    /* General characteristic (e.g. L) */  #define PT_GC         2    /* Specified general characteristic (e.g. L) */
1231  #define PT_PC         3    /* Particular characteristic (e.g. Lu) */  #define PT_PC         3    /* Specified particular characteristic (e.g. Lu) */
1232  #define PT_SC         4    /* Script (e.g. Han) */  #define PT_SC         4    /* Script (e.g. Han) */
1233    #define PT_ALNUM      5    /* Alphanumeric - the union of L and N */
1234    #define PT_SPACE      6    /* Perl space - Z plus 9,10,12,13 */
1235    #define PT_PXSPACE    7    /* POSIX space - Z plus 9,10,11,12,13 */
1236    #define PT_WORD       8    /* Word - L plus N plus underscore */
1237    
1238  /* Flag bits and data types for the extended class (OP_XCLASS) for classes that  /* Flag bits and data types for the extended class (OP_XCLASS) for classes that
1239  contain UTF-8 characters with values greater than 255. */  contain UTF-8 characters with values greater than 255. */
# Line 1207  contain UTF-8 characters with values gre Line 1250  contain UTF-8 characters with values gre
1250  /* These are escaped items that aren't just an encoding of a particular data  /* These are escaped items that aren't just an encoding of a particular data
1251  value such as \n. They must have non-zero values, as check_escape() returns  value such as \n. They must have non-zero values, as check_escape() returns
1252  their negation. Also, they must appear in the same order as in the opcode  their negation. Also, they must appear in the same order as in the opcode
1253  definitions below, up to ESC_z. There's a dummy for OP_ANY because it  definitions below, up to ESC_z. There's a dummy for OP_ALLANY because it
1254  corresponds to "." rather than an escape sequence, and another for OP_ALLANY  corresponds to "." in DOTALL mode rather than an escape sequence. It is also
1255  (which is used for [^] in JavaScript compatibility mode).  used for [^] in JavaScript compatibility mode. In non-DOTALL mode, "." behaves
1256    like \N.
1257    
1258    The special values ESC_DU, ESC_du, etc. are used instead of ESC_D, ESC_d, etc.
1259    when PCRE_UCP is set, when replacement of \d etc by \p sequences is required.
1260    They must be contiguous, and remain in order so that the replacements can be
1261    looked up from a table.
1262    
1263  The final escape must be ESC_REF as subsequent values are used for  The final escape must be ESC_REF as subsequent values are used for
1264  backreferences (\1, \2, \3, etc). There are two tests in the code for an escape  backreferences (\1, \2, \3, etc). There are two tests in the code for an escape
# Line 1219  put in between that don't consume a char Line 1268  put in between that don't consume a char
1268  */  */
1269    
1270  enum { ESC_A = 1, ESC_G, ESC_K, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s,  enum { ESC_A = 1, ESC_G, ESC_K, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s,
1271         ESC_W, ESC_w, ESC_dum1, ESC_dum2, ESC_C, ESC_P, ESC_p, ESC_R, ESC_H,         ESC_W, ESC_w, ESC_N, ESC_dum, ESC_C, ESC_P, ESC_p, ESC_R, ESC_H,
1272         ESC_h, ESC_V, ESC_v, ESC_X, ESC_Z, ESC_z, ESC_E, ESC_Q, ESC_g, ESC_k,         ESC_h, ESC_V, ESC_v, ESC_X, ESC_Z, ESC_z,
1273           ESC_E, ESC_Q, ESC_g, ESC_k,
1274           ESC_DU, ESC_du, ESC_SU, ESC_su, ESC_WU, ESC_wu,
1275         ESC_REF };         ESC_REF };
1276    
   
1277  /* Opcode table: Starting from 1 (i.e. after OP_END), the values up to  /* Opcode table: Starting from 1 (i.e. after OP_END), the values up to
1278  OP_EOD must correspond in order to the list of escapes immediately above.  OP_EOD must correspond in order to the list of escapes immediately above.
1279    
# Line 1247  enum { Line 1297  enum {
1297    OP_WHITESPACE,         /*  9 \s */    OP_WHITESPACE,         /*  9 \s */
1298    OP_NOT_WORDCHAR,       /* 10 \W */    OP_NOT_WORDCHAR,       /* 10 \W */
1299    OP_WORDCHAR,           /* 11 \w */    OP_WORDCHAR,           /* 11 \w */
1300    OP_ANY,            /* 12 Match any character (subject to DOTALL) */    OP_ANY,            /* 12 Match any character except newline */
1301    OP_ALLANY,         /* 13 Match any character (not subject to DOTALL) */    OP_ALLANY,         /* 13 Match any character */
1302    OP_ANYBYTE,        /* 14 Match any byte (\C); different to OP_ANY for UTF-8 */    OP_ANYBYTE,        /* 14 Match any byte (\C); different to OP_ANY for UTF-8 */
1303    OP_NOTPROP,        /* 15 \P (not Unicode property) */    OP_NOTPROP,        /* 15 \P (not Unicode property) */
1304    OP_PROP,           /* 16 \p (Unicode property) */    OP_PROP,           /* 16 \p (Unicode property) */
# Line 1378  enum { Line 1428  enum {
1428    
1429    /* These are backtracking control verbs */    /* These are backtracking control verbs */
1430    
1431    OP_PRUNE,          /* 107 */    OP_MARK,           /* 107 always has an argument */
1432    OP_SKIP,           /* 108 */    OP_PRUNE,          /* 108 */
1433    OP_THEN,           /* 109 */    OP_PRUNE_ARG,      /* 109 same, but with argument */
1434    OP_COMMIT,         /* 110 */    OP_SKIP,           /* 110 */
1435      OP_SKIP_ARG,       /* 111 same, but with argument */
1436      OP_THEN,           /* 112 */
1437      OP_THEN_ARG,       /* 113 same, but with argument */
1438      OP_COMMIT,         /* 114 */
1439    
1440    /* These are forced failure and success verbs */    /* These are forced failure and success verbs */
1441    
1442    OP_FAIL,           /* 111 */    OP_FAIL,           /* 115 */
1443    OP_ACCEPT,         /* 112 */    OP_ACCEPT,         /* 116 */
1444    OP_CLOSE,          /* 113 Used before OP_ACCEPT to close open captures */    OP_CLOSE,          /* 117 Used before OP_ACCEPT to close open captures */
1445    
1446    /* This is used to skip a subpattern with a {0} quantifier */    /* This is used to skip a subpattern with a {0} quantifier */
1447    
1448    OP_SKIPZERO,       /* 114 */    OP_SKIPZERO,       /* 118 */
1449    
1450    /* This is not an opcode, but is used to check that tables indexed by opcode    /* This is not an opcode, but is used to check that tables indexed by opcode
1451    are the correct length, in order to catch updating errors - there have been    are the correct length, in order to catch updating errors - there have been
# Line 1402  enum { Line 1456  enum {
1456    
1457  /* *** NOTE NOTE NOTE *** Whenever the list above is updated, the two macro  /* *** NOTE NOTE NOTE *** Whenever the list above is updated, the two macro
1458  definitions that follow must also be updated to match. There are also tables  definitions that follow must also be updated to match. There are also tables
1459  called "coptable" cna "poptable" in pcre_dfa_exec.c that must be updated. */  called "coptable" and "poptable" in pcre_dfa_exec.c that must be updated. */
1460    
1461    
1462  /* This macro defines textual names for all the opcodes. These are used only  /* This macro defines textual names for all the opcodes. These are used only
# Line 1427  for debugging. The macro is referenced o Line 1481  for debugging. The macro is referenced o
1481    "Once", "Bra", "CBra", "Cond", "SBra", "SCBra", "SCond",        \    "Once", "Bra", "CBra", "Cond", "SBra", "SCBra", "SCond",        \
1482    "Cond ref", "Cond nref", "Cond rec", "Cond nrec", "Cond def",   \    "Cond ref", "Cond nref", "Cond rec", "Cond nrec", "Cond def",   \
1483    "Brazero", "Braminzero",                                        \    "Brazero", "Braminzero",                                        \
1484    "*PRUNE", "*SKIP", "*THEN", "*COMMIT", "*FAIL", "*ACCEPT",      \    "*MARK", "*PRUNE", "*PRUNE", "*SKIP", "*SKIP",                  \
1485      "*THEN", "*THEN", "*COMMIT", "*FAIL", "*ACCEPT",                \
1486    "Close", "Skip zero"    "Close", "Skip zero"
1487    
1488    
# Line 1493  in UTF-8 mode. The code that uses this t Line 1548  in UTF-8 mode. The code that uses this t
1548    3, 3,                          /* RREF, NRREF                            */ \    3, 3,                          /* RREF, NRREF                            */ \
1549    1,                             /* DEF                                    */ \    1,                             /* DEF                                    */ \
1550    1, 1,                          /* BRAZERO, BRAMINZERO                    */ \    1, 1,                          /* BRAZERO, BRAMINZERO                    */ \
1551    1, 1, 1, 1,                    /* PRUNE, SKIP, THEN, COMMIT,             */ \    3, 1, 3,                       /* MARK, PRUNE, PRUNE_ARG                 */ \
1552    1, 1, 3, 1                     /* FAIL, ACCEPT, CLOSE, SKIPZERO          */    1, 3,                          /* SKIP, SKIP_ARG                         */ \
1553      1+LINK_SIZE, 3+LINK_SIZE,      /* THEN, THEN_ARG                         */ \
1554      1, 1, 1, 3, 1                  /* COMMIT, FAIL, ACCEPT, CLOSE, SKIPZERO  */
1555    
1556    
1557  /* A magic value for OP_RREF and OP_NRREF to indicate the "any recursion"  /* A magic value for OP_RREF and OP_NRREF to indicate the "any recursion"
# Line 1512  enum { ERR0,  ERR1,  ERR2,  ERR3,  ERR4, Line 1569  enum { ERR0,  ERR1,  ERR2,  ERR3,  ERR4,
1569         ERR30, ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39,         ERR30, ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39,
1570         ERR40, ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47, ERR48, ERR49,         ERR40, ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47, ERR48, ERR49,
1571         ERR50, ERR51, ERR52, ERR53, ERR54, ERR55, ERR56, ERR57, ERR58, ERR59,         ERR50, ERR51, ERR52, ERR53, ERR54, ERR55, ERR56, ERR57, ERR58, ERR59,
1572         ERR60, ERR61, ERR62, ERR63, ERR64, ERR65, ERRCOUNT };         ERR60, ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68,
1573           ERRCOUNT };
1574    
1575  /* The real format of the start of the pcre block; the index of names and the  /* The real format of the start of the pcre block; the index of names and the
1576  code vector run on as long as necessary after the end. We store an explicit  code vector run on as long as necessary after the end. We store an explicit
# Line 1655  typedef struct match_data { Line 1713  typedef struct match_data {
1713    BOOL   noteol;                /* NOTEOL flag */    BOOL   noteol;                /* NOTEOL flag */
1714    BOOL   utf8;                  /* UTF8 flag */    BOOL   utf8;                  /* UTF8 flag */
1715    BOOL   jscript_compat;        /* JAVASCRIPT_COMPAT flag */    BOOL   jscript_compat;        /* JAVASCRIPT_COMPAT flag */
1716      BOOL   use_ucp;               /* PCRE_UCP flag */
1717    BOOL   endonly;               /* Dollar not before final \n */    BOOL   endonly;               /* Dollar not before final \n */
1718    BOOL   notempty;              /* Empty string match not wanted */    BOOL   notempty;              /* Empty string match not wanted */
1719    BOOL   notempty_atstart;      /* Empty string match at start not wanted */    BOOL   notempty_atstart;      /* Empty string match at start not wanted */
# Line 1674  typedef struct match_data { Line 1733  typedef struct match_data {
1733    int    eptrn;                 /* Next free eptrblock */    int    eptrn;                 /* Next free eptrblock */
1734    recursion_info *recursive;    /* Linked list of recursion data */    recursion_info *recursive;    /* Linked list of recursion data */
1735    void  *callout_data;          /* To pass back to callouts */    void  *callout_data;          /* To pass back to callouts */
1736      const uschar *mark;           /* Mark pointer to pass back */
1737  } match_data;  } match_data;
1738    
1739  /* A similar structure is used for the same purpose by the DFA matching  /* A similar structure is used for the same purpose by the DFA matching

Legend:
Removed from v.507  
changed lines
  Added in v.574

  ViewVC Help
Powered by ViewVC 1.1.5