diff options
| author | dgp <dgp@users.sourceforge.net> | 2015-10-21 13:50:55 (GMT) |
|---|---|---|
| committer | dgp <dgp@users.sourceforge.net> | 2015-10-21 13:50:55 (GMT) |
| commit | 7640d1e89870823d479a0d11a07c197995643143 (patch) | |
| tree | 7339a003ab56cd793a40da29f03f7f18a52a80bb /generic/regguts.h | |
| parent | dfb834e3952d92bad9447ddc06161797e0878afc (diff) | |
| parent | cf8194b6a0e7cb2d78e2861a9e259f5d33b0f736 (diff) | |
| download | tcl-7640d1e89870823d479a0d11a07c197995643143.zip tcl-7640d1e89870823d479a0d11a07c197995643143.tar.gz tcl-7640d1e89870823d479a0d11a07c197995643143.tar.bz2 | |
[1080042][8f245009b0] Big bundle of regexp engine fixes and improvements
contributed from Tom Lane of the postgres project.
Diffstat (limited to 'generic/regguts.h')
| -rw-r--r-- | generic/regguts.h | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/generic/regguts.h b/generic/regguts.h index ac625d5..72bdcb3 100644 --- a/generic/regguts.h +++ b/generic/regguts.h @@ -265,8 +265,10 @@ struct arc { struct state *from; /* where it's from (and contained within) */ struct state *to; /* where it's to */ struct arc *outchain; /* *from's outs chain or free chain */ -#define freechain outchain + struct arc *outchainRev; /* back-link in *from's outs chain */ +#define freechain outchain /* we do not maintain "freechainRev" */ struct arc *inchain; /* *to's ins chain */ + struct arc *inchainRev; /* back-link in *to's ins chain */ struct arc *colorchain; /* color's arc chain */ struct arc *colorchainRev; /* back-link in color's arc chain */ }; @@ -305,9 +307,6 @@ struct nfa { struct colormap *cm; /* the color map */ color bos[2]; /* colors, if any, assigned to BOS and BOL */ color eos[2]; /* colors, if any, assigned to EOS and EOL */ - size_t size; /* Current NFA size; differs from nstates as - * it also counts the number of states created - * by children of this state. */ struct vars *v; /* simplifies compile error reporting */ struct nfa *parent; /* parent NFA, if any */ }; @@ -337,11 +336,16 @@ struct cnfa { #define NULLCNFA(cnfa) ((cnfa).nstates == 0) /* - * Used to limit the maximum NFA size to something sane. [Bug 1810264] + * This symbol limits the transient heap space used by the regex compiler, + * and thereby also the maximum complexity of NFAs that we'll deal with. + * Currently we only count NFA states and arcs against this; the other + * transient data is generally not large enough to notice compared to those. + * Note that we do not charge anything for the final output data structures + * (the compacted NFA and the colormap). */ - -#ifndef REG_MAX_STATES -# define REG_MAX_STATES 100000 +#ifndef REG_MAX_COMPILE_SPACE +#define REG_MAX_COMPILE_SPACE \ + (100000 * sizeof(struct state) + 100000 * sizeof(struct arcbatch)) #endif /* |
