/[pcre]/code/branches/pcre16/pcre_internal.h
ViewVC logotype

Diff of /code/branches/pcre16/pcre_internal.h

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

revision 457 by ph10, Sat Oct 3 16:24:08 2009 UTC revision 483 by ph10, Mon Jan 4 16:19:17 2010 UTC
# Line 7  Line 7 
7  and semantics are as close as possible to those of the Perl 5 language.  and semantics are as close as possible to those of the Perl 5 language.
8    
9                         Written by Philip Hazel                         Written by Philip Hazel
10             Copyright (c) 1997-2009 University of Cambridge             Copyright (c) 1997-2010 University of Cambridge
11    
12  -----------------------------------------------------------------------------  -----------------------------------------------------------------------------
13  Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
# Line 45  functions whose names all begin with "_p Line 45  functions whose names all begin with "_p
45  #ifndef PCRE_INTERNAL_H  #ifndef PCRE_INTERNAL_H
46  #define PCRE_INTERNAL_H  #define PCRE_INTERNAL_H
47    
48  /* Define DEBUG to get debugging output on stdout. */  /* Define PCRE_DEBUG to get debugging output on stdout. */
49    
50  #if 0  #if 0
51  #define DEBUG  #define PCRE_DEBUG
52  #endif  #endif
53    
54  /* We do not support both EBCDIC and UTF-8 at the same time. The "configure"  /* We do not support both EBCDIC and UTF-8 at the same time. The "configure"
# Line 74  It turns out that the Mac Debugging.h he Line 74  It turns out that the Mac Debugging.h he
74  be absolutely sure we get our version. */  be absolutely sure we get our version. */
75    
76  #undef DPRINTF  #undef DPRINTF
77  #ifdef DEBUG  #ifdef PCRE_DEBUG
78  #define DPRINTF(p) printf p  #define DPRINTF(p) printf p
79  #else  #else
80  #define DPRINTF(p) /* Nothing */  #define DPRINTF(p) /* Nothing */
# Line 86  setjmp and stdarg are used is when NO_RE Line 86  setjmp and stdarg are used is when NO_RE
86    
87  #include <ctype.h>  #include <ctype.h>
88  #include <limits.h>  #include <limits.h>
 #include <setjmp.h>  
 #include <stdarg.h>  
89  #include <stddef.h>  #include <stddef.h>
90  #include <stdio.h>  #include <stdio.h>
91  #include <stdlib.h>  #include <stdlib.h>
# Line 186  preprocessor time in standard C environm Line 184  preprocessor time in standard C environm
184    #error Cannot determine a type for 32-bit unsigned integers    #error Cannot determine a type for 32-bit unsigned integers
185  #endif  #endif
186    
187    /* When checking for integer overflow in pcre_compile(), we need to handle
188    large integers. If a 64-bit integer type is available, we can use that.
189    Otherwise we have to cast to double, which of course requires floating point
190    arithmetic. Handle this by defining a macro for the appropriate type. If
191    stdint.h is available, include it; it may define INT64_MAX. The macro int64_t
192    may be set by "configure". */
193    
194    #if HAVE_STDINT_H
195    #include <stdint.h>
196    #endif
197    
198    #if defined INT64_MAX || defined int64_t
199    #define INT64_OR_DOUBLE int64_t
200    #else
201    #define INT64_OR_DOUBLE double
202    #endif
203    
204  /* All character handling must be done as unsigned characters. Otherwise there  /* All character handling must be done as unsigned characters. Otherwise there
205  are problems with top-bit-set characters and functions such as isspace().  are problems with top-bit-set characters and functions such as isspace().
206  However, we leave the interface to the outside world as char *, because that  However, we leave the interface to the outside world as char *, because that
# Line 1210  enum { ESC_A = 1, ESC_G, ESC_K, ESC_B, E Line 1225  enum { ESC_A = 1, ESC_G, ESC_K, ESC_B, E
1225  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.
1226    
1227  *** NOTE NOTE NOTE *** Whenever this list is updated, the two macro definitions  *** NOTE NOTE NOTE *** Whenever this list is updated, the two macro definitions
1228  that follow must also be updated to match. There is also a table called  that follow must also be updated to match. There are also tables called
1229  "coptable" in pcre_dfa_exec.c that must be updated. */  "coptable" and "poptable" in pcre_dfa_exec.c that must be updated. */
1230    
1231  enum {  enum {
1232    OP_END,            /* 0 End of pattern */    OP_END,            /* 0 End of pattern */
# Line 1347  enum { Line 1362  enum {
1362    OP_SCBRA,          /* 98 Start of capturing bracket, check empty */    OP_SCBRA,          /* 98 Start of capturing bracket, check empty */
1363    OP_SCOND,          /* 99 Conditional group, check empty */    OP_SCOND,          /* 99 Conditional group, check empty */
1364    
1365      /* The next two pairs must (respectively) be kept together. */
1366    
1367    OP_CREF,           /* 100 Used to hold a capture number as condition */    OP_CREF,           /* 100 Used to hold a capture number as condition */
1368    OP_RREF,           /* 101 Used to hold a recursion number as condition */    OP_NCREF,          /* 101 Same, but generaged by a name reference*/
1369    OP_DEF,            /* 102 The DEFINE condition */    OP_RREF,           /* 102 Used to hold a recursion number as condition */
1370      OP_NRREF,          /* 103 Same, but generaged by a name reference*/
1371      OP_DEF,            /* 104 The DEFINE condition */
1372    
1373    OP_BRAZERO,        /* 103 These two must remain together and in this */    OP_BRAZERO,        /* 105 These two must remain together and in this */
1374    OP_BRAMINZERO,     /* 104 order. */    OP_BRAMINZERO,     /* 106 order. */
1375    
1376    /* These are backtracking control verbs */    /* These are backtracking control verbs */
1377    
1378    OP_PRUNE,          /* 105 */    OP_PRUNE,          /* 107 */
1379    OP_SKIP,           /* 106 */    OP_SKIP,           /* 108 */
1380    OP_THEN,           /* 107 */    OP_THEN,           /* 109 */
1381    OP_COMMIT,         /* 108 */    OP_COMMIT,         /* 110 */
1382    
1383    /* These are forced failure and success verbs */    /* These are forced failure and success verbs */
1384    
1385    OP_FAIL,           /* 109 */    OP_FAIL,           /* 111 */
1386    OP_ACCEPT,         /* 110 */    OP_ACCEPT,         /* 112 */
1387    OP_CLOSE,          /* 111 Used before OP_ACCEPT to close open captures */    OP_CLOSE,          /* 113 Used before OP_ACCEPT to close open captures */
1388    
1389    /* This is used to skip a subpattern with a {0} quantifier */    /* This is used to skip a subpattern with a {0} quantifier */
1390    
1391    OP_SKIPZERO        /* 112 */    OP_SKIPZERO        /* 114 */
1392  };  };
1393    
1394    /* *** NOTE NOTE NOTE *** Whenever the list above is updated, the two macro
1395    definitions that follow must also be updated to match. There are also tables
1396    called "coptable" cna "poptable" in pcre_dfa_exec.c that must be updated. */
1397    
1398    
1399  /* 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
1400  for debugging. The macro is referenced only in pcre_printint.c. */  for debugging. The macro is referenced only in pcre_printint.c. */
# Line 1393  for debugging. The macro is referenced o Line 1416  for debugging. The macro is referenced o
1416    "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",     \    "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",     \
1417    "AssertB", "AssertB not", "Reverse",                            \    "AssertB", "AssertB not", "Reverse",                            \
1418    "Once", "Bra", "CBra", "Cond", "SBra", "SCBra", "SCond",        \    "Once", "Bra", "CBra", "Cond", "SBra", "SCBra", "SCond",        \
1419    "Cond ref", "Cond rec", "Cond def", "Brazero", "Braminzero",    \    "Cond ref", "Cond nref", "Cond rec", "Cond nrec", "Cond def",   \
1420      "Brazero", "Braminzero",                                        \
1421    "*PRUNE", "*SKIP", "*THEN", "*COMMIT", "*FAIL", "*ACCEPT",      \    "*PRUNE", "*SKIP", "*THEN", "*COMMIT", "*FAIL", "*ACCEPT",      \
1422    "Close", "Skip zero"    "Close", "Skip zero"
1423    
# Line 1455  in UTF-8 mode. The code that uses this t Line 1479  in UTF-8 mode. The code that uses this t
1479    1+LINK_SIZE,                   /* SBRA                                   */ \    1+LINK_SIZE,                   /* SBRA                                   */ \
1480    3+LINK_SIZE,                   /* SCBRA                                  */ \    3+LINK_SIZE,                   /* SCBRA                                  */ \
1481    1+LINK_SIZE,                   /* SCOND                                  */ \    1+LINK_SIZE,                   /* SCOND                                  */ \
1482    3,                             /* CREF                                   */ \    3, 3,                          /* CREF, NCREF                            */ \
1483    3,                             /* RREF                                   */ \    3, 3,                          /* RREF, NRREF                            */ \
1484    1,                             /* DEF                                    */ \    1,                             /* DEF                                    */ \
1485    1, 1,                          /* BRAZERO, BRAMINZERO                    */ \    1, 1,                          /* BRAZERO, BRAMINZERO                    */ \
1486    1, 1, 1, 1,                    /* PRUNE, SKIP, THEN, COMMIT,             */ \    1, 1, 1, 1,                    /* PRUNE, SKIP, THEN, COMMIT,             */ \
1487    1, 1, 3, 1                     /* FAIL, ACCEPT, CLOSE, SKIPZERO          */    1, 1, 3, 1                     /* FAIL, ACCEPT, CLOSE, SKIPZERO          */
1488    
1489    
1490  /* A magic value for OP_RREF to indicate the "any recursion" condition. */  /* A magic value for OP_RREF and OP_NRREF to indicate the "any recursion"
1491    condition. */
1492    
1493  #define RREF_ANY  0xffff  #define RREF_ANY  0xffff
1494    
# Line 1521  typedef struct pcre_study_data { Line 1546  typedef struct pcre_study_data {
1546    pcre_uint32 size;               /* Total that was malloced */    pcre_uint32 size;               /* Total that was malloced */
1547    pcre_uint32 flags;              /* Private flags */    pcre_uint32 flags;              /* Private flags */
1548    uschar start_bits[32];          /* Starting char bits */    uschar start_bits[32];          /* Starting char bits */
1549    pcre_uint32 minlength;          /* Minimum subject length */    pcre_uint32 minlength;          /* Minimum subject length */
1550  } pcre_study_data;  } pcre_study_data;
1551    
1552  /* Structure for building a chain of open capturing subpatterns during  /* Structure for building a chain of open capturing subpatterns during
1553  compiling, so that instructions to close them can be compiled when (*ACCEPT) is  compiling, so that instructions to close them can be compiled when (*ACCEPT) is
1554  encountered. */  encountered. */
1555    
1556  typedef struct open_capitem {  typedef struct open_capitem {
1557    struct open_capitem *next;    /* Chain link */    struct open_capitem *next;    /* Chain link */
1558    pcre_uint16 number;           /* Capture number */    pcre_uint16 number;           /* Capture number */
1559  } open_capitem;  } open_capitem;
1560    
1561  /* Structure for passing "static" information around between the functions  /* Structure for passing "static" information around between the functions
1562  doing the compiling, so that they are thread-safe. */  doing the compiling, so that they are thread-safe. */
# Line 1545  typedef struct compile_data { Line 1570  typedef struct compile_data {
1570    const uschar *start_code;     /* The start of the compiled code */    const uschar *start_code;     /* The start of the compiled code */
1571    const uschar *start_pattern;  /* The start of the pattern */    const uschar *start_pattern;  /* The start of the pattern */
1572    const uschar *end_pattern;    /* The end of the pattern */    const uschar *end_pattern;    /* The end of the pattern */
1573    open_capitem *open_caps;      /* Chain of open capture items */    open_capitem *open_caps;      /* Chain of open capture items */
1574    uschar *hwm;                  /* High watermark of workspace */    uschar *hwm;                  /* High watermark of workspace */
1575    uschar *name_table;           /* The name/number table */    uschar *name_table;           /* The name/number table */
1576    int  names_found;             /* Number of entries so far */    int  names_found;             /* Number of entries so far */
# Line 1558  typedef struct compile_data { Line 1583  typedef struct compile_data {
1583    int  external_flags;          /* External flag bits to be set */    int  external_flags;          /* External flag bits to be set */
1584    int  req_varyopt;             /* "After variable item" flag for reqbyte */    int  req_varyopt;             /* "After variable item" flag for reqbyte */
1585    BOOL had_accept;              /* (*ACCEPT) encountered */    BOOL had_accept;              /* (*ACCEPT) encountered */
1586    BOOL check_lookbehind;        /* Lookbehinds need later checking */    BOOL check_lookbehind;        /* Lookbehinds need later checking */
1587    int  nltype;                  /* Newline type */    int  nltype;                  /* Newline type */
1588    int  nllen;                   /* Newline string length */    int  nllen;                   /* Newline string length */
1589    uschar nl[4];                 /* Newline string when fixed length */    uschar nl[4];                 /* Newline string when fixed length */
# Line 1569  branches, for testing for left recursion Line 1594  branches, for testing for left recursion
1594    
1595  typedef struct branch_chain {  typedef struct branch_chain {
1596    struct branch_chain *outer;    struct branch_chain *outer;
1597    uschar *current;    uschar *current_branch;
1598  } branch_chain;  } branch_chain;
1599    
1600  /* Structure for items in a linked list that represents an explicit recursive  /* Structure for items in a linked list that represents an explicit recursive
# Line 1582  typedef struct recursion_info { Line 1607  typedef struct recursion_info {
1607    USPTR save_start;             /* Old value of mstart */    USPTR save_start;             /* Old value of mstart */
1608    int *offset_save;             /* Pointer to start of saved offsets */    int *offset_save;             /* Pointer to start of saved offsets */
1609    int saved_max;                /* Number of saved offsets */    int saved_max;                /* Number of saved offsets */
1610    int offset_top;               /* Current value of offset_top */    int save_offset_top;          /* Current value of offset_top */
1611  } recursion_info;  } recursion_info;
1612    
1613  /* Structure for building a chain of data for holding the values of the subject  /* Structure for building a chain of data for holding the values of the subject
# Line 1607  typedef struct match_data { Line 1632  typedef struct match_data {
1632    int    offset_max;            /* The maximum usable for return data */    int    offset_max;            /* The maximum usable for return data */
1633    int    nltype;                /* Newline type */    int    nltype;                /* Newline type */
1634    int    nllen;                 /* Newline string length */    int    nllen;                 /* Newline string length */
1635      int    name_count;            /* Number of names in name table */
1636      int    name_entry_size;       /* Size of entry in names table */
1637      uschar *name_table;           /* Table of names */
1638    uschar nl[4];                 /* Newline string when fixed */    uschar nl[4];                 /* Newline string when fixed */
1639    const uschar *lcc;            /* Points to lower casing table */    const uschar *lcc;            /* Points to lower casing table */
1640    const uschar *ctypes;         /* Points to table of type maps */    const uschar *ctypes;         /* Points to table of type maps */
# Line 1725  one of the exported public functions. Th Line 1753  one of the exported public functions. Th
1753  sense, but are not part of the PCRE public API. */  sense, but are not part of the PCRE public API. */
1754    
1755  extern const uschar *_pcre_find_bracket(const uschar *, BOOL, int);  extern const uschar *_pcre_find_bracket(const uschar *, BOOL, int);
1756  extern BOOL          _pcre_is_newline(const uschar *, int, const uschar *,  extern BOOL          _pcre_is_newline(USPTR, int, USPTR, int *, BOOL);
                        int *, BOOL);  
1757  extern int           _pcre_ord2utf8(int, uschar *);  extern int           _pcre_ord2utf8(int, uschar *);
1758  extern real_pcre    *_pcre_try_flipped(const real_pcre *, real_pcre *,  extern real_pcre    *_pcre_try_flipped(const real_pcre *, real_pcre *,
1759                         const pcre_study_data *, pcre_study_data *);                         const pcre_study_data *, pcre_study_data *);
1760  extern int           _pcre_valid_utf8(const uschar *, int);  extern int           _pcre_valid_utf8(USPTR, int);
1761  extern BOOL          _pcre_was_newline(const uschar *, int, const uschar *,  extern BOOL          _pcre_was_newline(USPTR, int, USPTR, int *, BOOL);
                        int *, BOOL);  
1762  extern BOOL          _pcre_xclass(int, const uschar *);  extern BOOL          _pcre_xclass(int, const uschar *);
1763    
1764    

Legend:
Removed from v.457  
changed lines
  Added in v.483

  ViewVC Help
Powered by ViewVC 1.1.5