112 |
#include <stdlib.h> |
#include <stdlib.h> |
113 |
#include <string.h> |
#include <string.h> |
114 |
|
|
115 |
|
/* Valgrind (memcheck) support */ |
116 |
|
|
117 |
|
#ifdef SUPPORT_VALGRIND |
118 |
|
#include <valgrind/memcheck.h> |
119 |
|
#endif |
120 |
|
|
121 |
/* When compiling a DLL for Windows, the exported symbols have to be declared |
/* When compiling a DLL for Windows, the exported symbols have to be declared |
122 |
using some MS magic. I found some useful information on this web page: |
using some MS magic. I found some useful information on this web page: |
123 |
http://msdn2.microsoft.com/en-us/library/y4h7bcy6(VS.80).aspx. According to the |
http://msdn2.microsoft.com/en-us/library/y4h7bcy6(VS.80).aspx. According to the |
200 |
typedef unsigned int pcre_uint16; |
typedef unsigned int pcre_uint16; |
201 |
typedef int pcre_int16; |
typedef int pcre_int16; |
202 |
#else |
#else |
203 |
#error Cannot determine a type for 16-bit unsigned integers |
# error Cannot determine a type for 16-bit unsigned integers |
204 |
#endif |
#endif |
205 |
|
|
206 |
#if UINT_MAX == 4294967295 |
#if UINT_MAX == 4294967295 |
210 |
typedef unsigned long int pcre_uint32; |
typedef unsigned long int pcre_uint32; |
211 |
typedef long int pcre_int32; |
typedef long int pcre_int32; |
212 |
#else |
#else |
213 |
#error Cannot determine a type for 32-bit unsigned integers |
# error Cannot determine a type for 32-bit unsigned integers |
214 |
#endif |
#endif |
215 |
|
|
216 |
/* When checking for integer overflow in pcre_compile(), we need to handle |
/* When checking for integer overflow in pcre_compile(), we need to handle |
221 |
have stdint.h (e.g. Solaris) may have inttypes.h. The macro int64_t may be set |
have stdint.h (e.g. Solaris) may have inttypes.h. The macro int64_t may be set |
222 |
by "configure". */ |
by "configure". */ |
223 |
|
|
224 |
#if HAVE_STDINT_H |
#if defined HAVE_STDINT_H |
225 |
#include <stdint.h> |
#include <stdint.h> |
226 |
#elif HAVE_INTTYPES_H |
#elif defined HAVE_INTTYPES_H |
227 |
#include <inttypes.h> |
#include <inttypes.h> |
228 |
#endif |
#endif |
229 |
|
|
279 |
#define MAX_255(c) ((c) <= 255u) |
#define MAX_255(c) ((c) <= 255u) |
280 |
#define TABLE_GET(c, table, default) (MAX_255(c)? ((table)[c]):(default)) |
#define TABLE_GET(c, table, default) (MAX_255(c)? ((table)[c]):(default)) |
281 |
|
|
|
/* Assert that pcre_uchar32 is a 32-bit type */ |
|
|
typedef int __assert_pcre_uchar32_size[sizeof(pcre_uchar) == 4 ? 1 : -1]; |
|
|
|
|
282 |
#else |
#else |
283 |
#error Unsupported compiling mode |
#error Unsupported compiling mode |
284 |
#endif /* COMPILE_PCRE[8|16|32] */ |
#endif /* COMPILE_PCRE[8|16|32] */ |
348 |
#include "pcre.h" |
#include "pcre.h" |
349 |
#include "ucp.h" |
#include "ucp.h" |
350 |
|
|
351 |
|
#ifdef COMPILE_PCRE32 |
352 |
|
/* Assert that the public PCRE_UCHAR32 is a 32-bit type */ |
353 |
|
typedef int __assert_pcre_uchar32_size[sizeof(PCRE_UCHAR32) == 4 ? 1 : -1]; |
354 |
|
#endif |
355 |
|
|
356 |
/* When compiling for use with the Virtual Pascal compiler, these functions |
/* When compiling for use with the Virtual Pascal compiler, these functions |
357 |
need to have their names changed. PCRE must be compiled with the -DVPCOMPAT |
need to have their names changed. PCRE must be compiled with the -DVPCOMPAT |
358 |
option on the command line. */ |
option on the command line. */ |
532 |
a[n] = (d) >> 8; \ |
a[n] = (d) >> 8; \ |
533 |
a[(n)+1] = (d) & 255 |
a[(n)+1] = (d) & 255 |
534 |
|
|
535 |
|
/* For reasons that I do not understand, the expression in this GET2 macro is |
536 |
|
treated by gcc as a signed expression, even when a is declared as unsigned. It |
537 |
|
seems that any kind of arithmetic results in a signed value. */ |
538 |
|
|
539 |
#define GET2(a,n) \ |
#define GET2(a,n) \ |
540 |
(((a)[n] << 8) | (a)[(n)+1]) |
(unsigned int)(((a)[n] << 8) | (a)[(n)+1]) |
541 |
|
|
542 |
#elif defined COMPILE_PCRE16 |
#elif defined COMPILE_PCRE16 |
543 |
|
|
778 |
we know we are in UTF mode. */ |
we know we are in UTF mode. */ |
779 |
|
|
780 |
#define RAWUCHARINC(eptr) \ |
#define RAWUCHARINC(eptr) \ |
781 |
(*(eptr)++) |
(*((eptr)++)) |
782 |
|
|
783 |
/* Returns the next uchar, testing for UTF mode, and not advancing the |
/* Returns the next uchar, testing for UTF mode, and not advancing the |
784 |
pointer. */ |
pointer. */ |
790 |
pointer. */ |
pointer. */ |
791 |
|
|
792 |
#define RAWUCHARINCTEST(eptr) \ |
#define RAWUCHARINCTEST(eptr) \ |
793 |
(*(eptr)++) |
(*((eptr)++)) |
794 |
|
|
795 |
/* 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 |
796 |
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 |
897 |
we know we are in UTF mode. */ |
we know we are in UTF mode. */ |
898 |
|
|
899 |
#define RAWUCHARINC(eptr) \ |
#define RAWUCHARINC(eptr) \ |
900 |
(*(eptr)++) |
(*((eptr)++)) |
901 |
|
|
902 |
/* Returns the next uchar, testing for UTF mode, and not advancing the |
/* Returns the next uchar, testing for UTF mode, and not advancing the |
903 |
pointer. */ |
pointer. */ |
909 |
pointer. */ |
pointer. */ |
910 |
|
|
911 |
#define RAWUCHARINCTEST(eptr) \ |
#define RAWUCHARINCTEST(eptr) \ |
912 |
(*(eptr)++) |
(*((eptr)++)) |
913 |
|
|
914 |
/* 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 |
915 |
it is. This is called only in UTF-16 mode - we don't put a test within the |
it is. This is called only in UTF-16 mode - we don't put a test within the |
934 |
#define GET_EXTRALEN(c) (0) |
#define GET_EXTRALEN(c) (0) |
935 |
#define NOT_FIRSTCHAR(c) (0) |
#define NOT_FIRSTCHAR(c) (0) |
936 |
|
|
|
#define UTF32_MASK (0x1fffffu) |
|
|
|
|
937 |
/* Get the next UTF-32 character, not advancing the pointer. This is called when |
/* Get the next UTF-32 character, not advancing the pointer. This is called when |
938 |
we know we are in UTF-32 mode. */ |
we know we are in UTF-32 mode. */ |
939 |
|
|
940 |
#define GETCHAR(c, eptr) \ |
#define GETCHAR(c, eptr) \ |
941 |
c = (*eptr) & UTF32_MASK; |
c = *(eptr); |
942 |
|
|
943 |
/* Get the next UTF-32 character, testing for UTF-32 mode, and not advancing the |
/* Get the next UTF-32 character, testing for UTF-32 mode, and not advancing the |
944 |
pointer. */ |
pointer. */ |
945 |
|
|
946 |
#define GETCHARTEST(c, eptr) \ |
#define GETCHARTEST(c, eptr) \ |
947 |
c = *eptr; \ |
c = *(eptr); |
|
if (utf) c &= UTF32_MASK; |
|
948 |
|
|
949 |
/* Get the next UTF-32 character, advancing the pointer. This is called when we |
/* Get the next UTF-32 character, advancing the pointer. This is called when we |
950 |
know we are in UTF-32 mode. */ |
know we are in UTF-32 mode. */ |
951 |
|
|
952 |
#define GETCHARINC(c, eptr) \ |
#define GETCHARINC(c, eptr) \ |
953 |
c = (*eptr++) & UTF32_MASK; |
c = *((eptr)++); |
954 |
|
|
955 |
/* Get the next character, testing for UTF-32 mode, and advancing the pointer. |
/* Get the next character, testing for UTF-32 mode, and advancing the pointer. |
956 |
This is called when we don't know if we are in UTF-32 mode. */ |
This is called when we don't know if we are in UTF-32 mode. */ |
957 |
|
|
958 |
#define GETCHARINCTEST(c, eptr) \ |
#define GETCHARINCTEST(c, eptr) \ |
959 |
c = *eptr++; \ |
c = *((eptr)++); |
|
if (utf) c &= UTF32_MASK; |
|
960 |
|
|
961 |
/* Get the next UTF-32 character, not advancing the pointer, not incrementing |
/* Get the next UTF-32 character, not advancing the pointer, not incrementing |
962 |
length (since all UTF-32 is of length 1). This is called when we know we are in |
length (since all UTF-32 is of length 1). This is called when we know we are in |
976 |
we know we are in UTF mode. */ |
we know we are in UTF mode. */ |
977 |
|
|
978 |
#define RAWUCHAR(eptr) \ |
#define RAWUCHAR(eptr) \ |
979 |
(*(eptr) & UTF32_MASK) |
(*(eptr)) |
980 |
|
|
981 |
/* Returns the next uchar, advancing the pointer. This is called when |
/* Returns the next uchar, advancing the pointer. This is called when |
982 |
we know we are in UTF mode. */ |
we know we are in UTF mode. */ |
983 |
|
|
984 |
#define RAWUCHARINC(eptr) \ |
#define RAWUCHARINC(eptr) \ |
985 |
(*(eptr)++ & UTF32_MASK) |
(*((eptr)++)) |
986 |
|
|
987 |
/* Returns the next uchar, testing for UTF mode, and not advancing the |
/* Returns the next uchar, testing for UTF mode, and not advancing the |
988 |
pointer. */ |
pointer. */ |
989 |
|
|
990 |
#define RAWUCHARTEST(eptr) \ |
#define RAWUCHARTEST(eptr) \ |
991 |
(utf ? (*(eptr) & UTF32_MASK) : *(eptr)) |
(*(eptr)) |
992 |
|
|
993 |
/* Returns the next uchar, testing for UTF mode, advancing the |
/* Returns the next uchar, testing for UTF mode, advancing the |
994 |
pointer. */ |
pointer. */ |
995 |
|
|
996 |
#define RAWUCHARINCTEST(eptr) \ |
#define RAWUCHARINCTEST(eptr) \ |
997 |
(utf ? (*(eptr)++ & UTF32_MASK) : *(eptr)++) |
(*((eptr)++)) |
998 |
|
|
999 |
/* 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 |
1000 |
it is. This is called only in UTF-32 mode - we don't put a test within the |
it is. This is called only in UTF-32 mode - we don't put a test within the |
1001 |
macro because almost all calls are already within a block of UTF-32 only |
macro because almost all calls are already within a block of UTF-32 only |
1002 |
code. |
code. |
1003 |
These are all no-ops since all UTF-32 characters fit into one pcre_uchar. */ |
These are all no-ops since all UTF-32 characters fit into one pcre_uchar. */ |
1004 |
|
|
1005 |
#define BACKCHAR(eptr) do { } while (0) |
#define BACKCHAR(eptr) do { } while (0) |
1026 |
These values are also required as lists in pcre_compile.c when processing \h, |
These values are also required as lists in pcre_compile.c when processing \h, |
1027 |
\H, \v and \V in a character class. The lists are defined in pcre_tables.c, but |
\H, \v and \V in a character class. The lists are defined in pcre_tables.c, but |
1028 |
macros that define the values are here so that all the definitions are |
macros that define the values are here so that all the definitions are |
1029 |
together. The lists must be in ascending character order, terminated by |
together. The lists must be in ascending character order, terminated by |
1030 |
NOTACHAR (which is 0xffffffff). |
NOTACHAR (which is 0xffffffff). |
1031 |
|
|
1032 |
Any changes should ensure that the various macros are kept in step with each |
Any changes should ensure that the various macros are kept in step with each |
1040 |
CHAR_HT, CHAR_SPACE, 0xa0, \ |
CHAR_HT, CHAR_SPACE, 0xa0, \ |
1041 |
0x1680, 0x180e, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, \ |
0x1680, 0x180e, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, \ |
1042 |
0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202f, 0x205f, 0x3000, \ |
0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202f, 0x205f, 0x3000, \ |
1043 |
NOTACHAR |
NOTACHAR |
1044 |
|
|
1045 |
#define HSPACE_MULTIBYTE_CASES \ |
#define HSPACE_MULTIBYTE_CASES \ |
1046 |
case 0x1680: /* OGHAM SPACE MARK */ \ |
case 0x1680: /* OGHAM SPACE MARK */ \ |
1064 |
case CHAR_HT: \ |
case CHAR_HT: \ |
1065 |
case CHAR_SPACE: \ |
case CHAR_SPACE: \ |
1066 |
case 0xa0 /* NBSP */ |
case 0xa0 /* NBSP */ |
1067 |
|
|
1068 |
#define HSPACE_CASES \ |
#define HSPACE_CASES \ |
1069 |
HSPACE_BYTE_CASES: \ |
HSPACE_BYTE_CASES: \ |
1070 |
HSPACE_MULTIBYTE_CASES |
HSPACE_MULTIBYTE_CASES |
1071 |
|
|
1072 |
#define VSPACE_LIST \ |
#define VSPACE_LIST \ |
1073 |
CHAR_LF, CHAR_VT, CHAR_FF, CHAR_CR, CHAR_NEL, 0x2028, 0x2029, NOTACHAR |
CHAR_LF, CHAR_VT, CHAR_FF, CHAR_CR, CHAR_NEL, 0x2028, 0x2029, NOTACHAR |
1074 |
|
|
1075 |
#define VSPACE_MULTIBYTE_CASES \ |
#define VSPACE_MULTIBYTE_CASES \ |
1076 |
case 0x2028: /* LINE SEPARATOR */ \ |
case 0x2028: /* LINE SEPARATOR */ \ |
1100 |
|
|
1101 |
#ifdef EBCDIC_NL25 |
#ifdef EBCDIC_NL25 |
1102 |
#define VSPACE_LIST \ |
#define VSPACE_LIST \ |
1103 |
CHAR_VT, CHAR_FF, CHAR_CR, CHAR_NEL, CHAR_LF, NOTACHAR |
CHAR_VT, CHAR_FF, CHAR_CR, CHAR_NEL, CHAR_LF, NOTACHAR |
1104 |
#else |
#else |
1105 |
#define VSPACE_LIST \ |
#define VSPACE_LIST \ |
1106 |
CHAR_VT, CHAR_FF, CHAR_CR, CHAR_LF, CHAR_NEL, NOTACHAR |
CHAR_VT, CHAR_FF, CHAR_CR, CHAR_LF, CHAR_NEL, NOTACHAR |
1107 |
#endif |
#endif |
1108 |
|
|
1109 |
#define VSPACE_BYTE_CASES \ |
#define VSPACE_BYTE_CASES \ |
1110 |
case CHAR_LF: \ |
case CHAR_LF: \ |
1181 |
(PCRE_STUDY_JIT_COMPILE|PCRE_STUDY_JIT_PARTIAL_SOFT_COMPILE| \ |
(PCRE_STUDY_JIT_COMPILE|PCRE_STUDY_JIT_PARTIAL_SOFT_COMPILE| \ |
1182 |
PCRE_STUDY_JIT_PARTIAL_HARD_COMPILE|PCRE_STUDY_EXTRA_NEEDED) |
PCRE_STUDY_JIT_PARTIAL_HARD_COMPILE|PCRE_STUDY_EXTRA_NEEDED) |
1183 |
|
|
1184 |
|
#define PUBLIC_JIT_EXEC_OPTIONS \ |
1185 |
|
(PCRE_NO_UTF8_CHECK|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|\ |
1186 |
|
PCRE_NOTEMPTY_ATSTART|PCRE_PARTIAL_SOFT|PCRE_PARTIAL_HARD) |
1187 |
|
|
1188 |
/* Magic number to provide a small check against being handed junk. */ |
/* Magic number to provide a small check against being handed junk. */ |
1189 |
|
|
1190 |
#define MAGIC_NUMBER 0x50435245UL /* 'PCRE' */ |
#define MAGIC_NUMBER 0x50435245UL /* 'PCRE' */ |
1288 |
|
|
1289 |
/* The remaining definitions work in both environments. */ |
/* The remaining definitions work in both environments. */ |
1290 |
|
|
1291 |
|
#define CHAR_NULL '\0' |
1292 |
#define CHAR_HT '\t' |
#define CHAR_HT '\t' |
1293 |
#define CHAR_VT '\v' |
#define CHAR_VT '\v' |
1294 |
#define CHAR_FF '\f' |
#define CHAR_FF '\f' |
1528 |
#define STRING_ANYCRLF_RIGHTPAR "ANYCRLF)" |
#define STRING_ANYCRLF_RIGHTPAR "ANYCRLF)" |
1529 |
#define STRING_BSR_ANYCRLF_RIGHTPAR "BSR_ANYCRLF)" |
#define STRING_BSR_ANYCRLF_RIGHTPAR "BSR_ANYCRLF)" |
1530 |
#define STRING_BSR_UNICODE_RIGHTPAR "BSR_UNICODE)" |
#define STRING_BSR_UNICODE_RIGHTPAR "BSR_UNICODE)" |
1531 |
#ifdef COMPILE_PCRE8 |
#define STRING_UTF8_RIGHTPAR "UTF8)" |
1532 |
#define STRING_UTF_RIGHTPAR "UTF8)" |
#define STRING_UTF16_RIGHTPAR "UTF16)" |
1533 |
#endif |
#define STRING_UTF32_RIGHTPAR "UTF32)" |
1534 |
#ifdef COMPILE_PCRE16 |
#define STRING_UTF_RIGHTPAR "UTF)" |
|
#define STRING_UTF_RIGHTPAR "UTF16)" |
|
|
#endif |
|
|
#ifdef COMPILE_PCRE32 |
|
|
#define STRING_UTF_RIGHTPAR "UTF32)" |
|
|
#endif |
|
1535 |
#define STRING_UCP_RIGHTPAR "UCP)" |
#define STRING_UCP_RIGHTPAR "UCP)" |
1536 |
#define STRING_NO_START_OPT_RIGHTPAR "NO_START_OPT)" |
#define STRING_NO_START_OPT_RIGHTPAR "NO_START_OPT)" |
1537 |
|
|
1553 |
#define CHAR_ESC '\033' |
#define CHAR_ESC '\033' |
1554 |
#define CHAR_DEL '\177' |
#define CHAR_DEL '\177' |
1555 |
|
|
1556 |
|
#define CHAR_NULL '\0' |
1557 |
#define CHAR_SPACE '\040' |
#define CHAR_SPACE '\040' |
1558 |
#define CHAR_EXCLAMATION_MARK '\041' |
#define CHAR_EXCLAMATION_MARK '\041' |
1559 |
#define CHAR_QUOTATION_MARK '\042' |
#define CHAR_QUOTATION_MARK '\042' |
1789 |
#define STRING_ANYCRLF_RIGHTPAR STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS |
#define STRING_ANYCRLF_RIGHTPAR STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS |
1790 |
#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 |
1791 |
#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 |
1792 |
#ifdef COMPILE_PCRE8 |
#define STRING_UTF8_RIGHTPAR STR_U STR_T STR_F STR_8 STR_RIGHT_PARENTHESIS |
1793 |
#define STRING_UTF_RIGHTPAR STR_U STR_T STR_F STR_8 STR_RIGHT_PARENTHESIS |
#define STRING_UTF16_RIGHTPAR STR_U STR_T STR_F STR_1 STR_6 STR_RIGHT_PARENTHESIS |
1794 |
#endif |
#define STRING_UTF32_RIGHTPAR STR_U STR_T STR_F STR_3 STR_2 STR_RIGHT_PARENTHESIS |
1795 |
#ifdef COMPILE_PCRE16 |
#define STRING_UTF_RIGHTPAR STR_U STR_T STR_F STR_RIGHT_PARENTHESIS |
|
#define STRING_UTF_RIGHTPAR STR_U STR_T STR_F STR_1 STR_6 STR_RIGHT_PARENTHESIS |
|
|
#endif |
|
|
#ifdef COMPILE_PCRE32 |
|
|
#define STRING_UTF_RIGHTPAR STR_U STR_T STR_F STR_3 STR_2 STR_RIGHT_PARENTHESIS |
|
|
#endif |
|
1796 |
#define STRING_UCP_RIGHTPAR STR_U STR_C STR_P STR_RIGHT_PARENTHESIS |
#define STRING_UCP_RIGHTPAR STR_U STR_C STR_P STR_RIGHT_PARENTHESIS |
1797 |
#define STRING_NO_START_OPT_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_S STR_T STR_A STR_R STR_T STR_UNDERSCORE STR_O STR_P STR_T STR_RIGHT_PARENTHESIS |
#define STRING_NO_START_OPT_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_S STR_T STR_A STR_R STR_T STR_UNDERSCORE STR_O STR_P STR_T STR_RIGHT_PARENTHESIS |
1798 |
|
|
2398 |
int names_found; /* Number of entries so far */ |
int names_found; /* Number of entries so far */ |
2399 |
int name_entry_size; /* Size of each entry */ |
int name_entry_size; /* Size of each entry */ |
2400 |
int workspace_size; /* Size of workspace */ |
int workspace_size; /* Size of workspace */ |
2401 |
int bracount; /* Count of capturing parens as we compile */ |
unsigned int bracount; /* Count of capturing parens as we compile */ |
2402 |
int final_bracount; /* Saved value after first pass */ |
int final_bracount; /* Saved value after first pass */ |
2403 |
int max_lookbehind; /* Maximum lookbehind (characters) */ |
int max_lookbehind; /* Maximum lookbehind (characters) */ |
2404 |
int top_backref; /* Maximum back reference */ |
int top_backref; /* Maximum back reference */ |
2428 |
|
|
2429 |
typedef struct recursion_info { |
typedef struct recursion_info { |
2430 |
struct recursion_info *prevrec; /* Previous recursion record (or NULL) */ |
struct recursion_info *prevrec; /* Previous recursion record (or NULL) */ |
2431 |
int group_num; /* Number of group that was called */ |
unsigned int group_num; /* Number of group that was called */ |
2432 |
int *offset_save; /* Pointer to start of saved offsets */ |
int *offset_save; /* Pointer to start of saved offsets */ |
2433 |
int saved_max; /* Number of saved offsets */ |
int saved_max; /* Number of saved offsets */ |
2434 |
|
int saved_capture_last; /* Last capture number */ |
2435 |
PCRE_PUCHAR subject_position; /* Position at start of recursion */ |
PCRE_PUCHAR subject_position; /* Position at start of recursion */ |
2436 |
} recursion_info; |
} recursion_info; |
2437 |
|
|
2473 |
const pcre_uint8 *lcc; /* Points to lower casing table */ |
const pcre_uint8 *lcc; /* Points to lower casing table */ |
2474 |
const pcre_uint8 *fcc; /* Points to case-flipping table */ |
const pcre_uint8 *fcc; /* Points to case-flipping table */ |
2475 |
const pcre_uint8 *ctypes; /* Points to table of type maps */ |
const pcre_uint8 *ctypes; /* Points to table of type maps */ |
|
BOOL offset_overflow; /* Set if too many extractions */ |
|
2476 |
BOOL notbol; /* NOTBOL flag */ |
BOOL notbol; /* NOTBOL flag */ |
2477 |
BOOL noteol; /* NOTEOL flag */ |
BOOL noteol; /* NOTEOL flag */ |
2478 |
BOOL utf; /* UTF-8 / UTF-16 flag */ |
BOOL utf; /* UTF-8 / UTF-16 flag */ |
2493 |
PCRE_PUCHAR start_used_ptr; /* Earliest consulted character */ |
PCRE_PUCHAR start_used_ptr; /* Earliest consulted character */ |
2494 |
int partial; /* PARTIAL options */ |
int partial; /* PARTIAL options */ |
2495 |
int end_offset_top; /* Highwater mark at end of match */ |
int end_offset_top; /* Highwater mark at end of match */ |
2496 |
int capture_last; /* Most recent capture number */ |
pcre_int32 capture_last; /* Most recent capture number + overflow flag */ |
2497 |
int start_offset; /* The start offset value */ |
int start_offset; /* The start offset value */ |
2498 |
int match_function_type; /* Set for certain special calls of MATCH() */ |
int match_function_type; /* Set for certain special calls of MATCH() */ |
2499 |
eptrblock *eptrchain; /* Chain of eptrblocks for tail recursions */ |
eptrblock *eptrchain; /* Chain of eptrblocks for tail recursions */ |
2695 |
#ifdef SUPPORT_JIT |
#ifdef SUPPORT_JIT |
2696 |
extern void PRIV(jit_compile)(const REAL_PCRE *, |
extern void PRIV(jit_compile)(const REAL_PCRE *, |
2697 |
PUBL(extra) *, int); |
PUBL(extra) *, int); |
2698 |
extern int PRIV(jit_exec)(const REAL_PCRE *, const PUBL(extra) *, |
extern int PRIV(jit_exec)(const PUBL(extra) *, |
2699 |
const pcre_uchar *, int, int, int, int *, int); |
const pcre_uchar *, int, int, int, int *, int); |
2700 |
extern void PRIV(jit_free)(void *); |
extern void PRIV(jit_free)(void *); |
2701 |
extern int PRIV(jit_get_size)(void *); |
extern int PRIV(jit_get_size)(void *); |