aboutsummaryrefslogtreecommitdiff
path: root/src/backend/regex
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2021-02-14 19:53:28 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2021-02-14 19:53:42 -0500
commit2dd6733108f2bea07b0a3469e768bd900c0808b3 (patch)
tree6b9d7faf0edf3c1ccbb6fc3f959434e5931aa856 /src/backend/regex
parentc7ecd6af010e2ac8c5530f3985e97f24531bfa5f (diff)
downloadpostgresql-2dd6733108f2bea07b0a3469e768bd900c0808b3.tar.gz
postgresql-2dd6733108f2bea07b0a3469e768bd900c0808b3.zip
Minor fixes to improve regex debugging code.
When REG_DEBUG is defined, ensure that an un-filled "struct cnfa" is all-zeroes, not just that it has nstates == 0. This is mainly so that looking at "struct subre" structs in gdb doesn't distract one with a lot of garbage fields during regex compilation. Adjust some places that print debug output to have suitable fflush calls afterwards. In passing, correct an erroneous ancient comment: the concatenation subre-s created by parsebranch() have op == '.' not ','. Noted while fooling around with some regex performance improvements.
Diffstat (limited to 'src/backend/regex')
-rw-r--r--src/backend/regex/regc_nfa.c6
-rw-r--r--src/backend/regex/regcomp.c5
2 files changed, 7 insertions, 4 deletions
diff --git a/src/backend/regex/regc_nfa.c b/src/backend/regex/regc_nfa.c
index 92c9c4d795d..cde82625c85 100644
--- a/src/backend/regex/regc_nfa.c
+++ b/src/backend/regex/regc_nfa.c
@@ -2951,11 +2951,11 @@ carc_cmp(const void *a, const void *b)
static void
freecnfa(struct cnfa *cnfa)
{
- assert(cnfa->nstates != 0); /* not empty already */
- cnfa->nstates = 0;
+ assert(!NULLCNFA(*cnfa)); /* not empty already */
FREE(cnfa->stflags);
FREE(cnfa->states);
FREE(cnfa->arcs);
+ ZAPCNFA(*cnfa);
}
/*
@@ -3012,13 +3012,13 @@ dumpstate(struct state *s,
fprintf(f, "\tno out arcs\n");
else
dumparcs(s, f);
- fflush(f);
for (a = s->ins; a != NULL; a = a->inchain)
{
if (a->to != s)
fprintf(f, "\tlink from %d to %d on %d's in-chain\n",
a->from->no, a->to->no, s->no);
}
+ fflush(f);
}
/*
diff --git a/src/backend/regex/regcomp.c b/src/backend/regex/regcomp.c
index 91078dcd806..f0896d2db14 100644
--- a/src/backend/regex/regcomp.c
+++ b/src/backend/regex/regcomp.c
@@ -479,7 +479,10 @@ pg_regcomp(regex_t *re,
#ifdef REG_DEBUG
if (flags & REG_DUMP)
+ {
dump(re, stdout);
+ fflush(stdout);
+ }
#endif
assert(v->err == 0);
@@ -721,7 +724,7 @@ parse(struct vars *v,
*
* This mostly manages concatenation, working closely with parseqatom().
* Concatenated things are bundled up as much as possible, with separate
- * ',' nodes introduced only when necessary due to substructure.
+ * '.' nodes introduced only when necessary due to substructure.
*/
static struct subre *
parsebranch(struct vars *v,