summaryrefslogtreecommitdiff
path: root/src/pcre2_intmodedep.h
diff options
context:
space:
mode:
authorph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069>2015-08-09 16:29:35 +0000
committerph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069>2015-08-09 16:29:35 +0000
commitc5489cdada19f23cb3c25c9a4771447a84dbb556 (patch)
treef8bda69987e9554194faaa8992daac40e98292b1 /src/pcre2_intmodedep.h
parent1e0c21fe7dc6124a8f574c44c0916abc1adc3ddc (diff)
downloadpcre2-c5489cdada19f23cb3c25c9a4771447a84dbb556.tar.gz
Re-write recursion handling to fix another compiler bug and make it all less
error-prone. git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@338 6239d852-aaf2-0410-a92c-79f79f948069
Diffstat (limited to 'src/pcre2_intmodedep.h')
-rw-r--r--src/pcre2_intmodedep.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/pcre2_intmodedep.h b/src/pcre2_intmodedep.h
index f20f71e..704c375 100644
--- a/src/pcre2_intmodedep.h
+++ b/src/pcre2_intmodedep.h
@@ -647,6 +647,13 @@ typedef struct recurse_check {
PCRE2_SPTR group;
} recurse_check;
+/* Structure for building a cache when filling in recursion offsets. */
+
+typedef struct recurse_cache {
+ PCRE2_SPTR group;
+ int recno;
+} recurse_cache;
+
/* Structure for maintaining a chain of pointers to the currently incomplete
branches, for testing for left recursion while compiling. */
@@ -678,7 +685,6 @@ typedef struct compile_block {
PCRE2_SPTR start_code; /* The start of the compiled code */
PCRE2_SPTR start_pattern; /* The start of the pattern */
PCRE2_SPTR end_pattern; /* The end of the pattern */
- PCRE2_UCHAR *hwm; /* High watermark of workspace */
PCRE2_UCHAR *name_table; /* The name/number table */
size_t workspace_size; /* Size of workspace */
uint16_t names_found; /* Number of entries so far */
@@ -701,6 +707,7 @@ typedef struct compile_block {
int req_varyopt; /* "After variable item" flag for reqbyte */
BOOL had_accept; /* (*ACCEPT) encountered */
BOOL had_pruneorskip; /* (*PRUNE) or (*SKIP) encountered */
+ BOOL had_recurse; /* Had a recursion or subroutine call */
BOOL check_lookbehind; /* Lookbehinds need later checking */
BOOL dupnames; /* Duplicate names exist */
BOOL iscondassert; /* Next assert is a condition */