From d12d3256043a792fe65830ff6469bba6418876e1 Mon Sep 17 00:00:00 2001 From: Norihiro Tanaka Date: Sat, 23 Mar 2019 08:19:11 +0900 Subject: [PATCH] dfa: separate parse and compile phase DFAMUST() must be called after parse and before tokens re-order which is introduced in commit 5c7a0371823876cca7a1347fa09ca26bbbff0c98, but both are executed in compilation phase. * lib/dfa.c (dfaparse): Change it to global function. (dfacomp): If first argument is NULL, skip parse. * lib/dfa.h: (dfaparse): Add a prototype. --- lib/dfa.c | 6 ++++-- lib/dfa.h | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/dfa.c b/lib/dfa.c index 329a209..1e125b4 100644 --- a/lib/dfa.c +++ b/lib/dfa.c @@ -1969,7 +1969,7 @@ regexp (struct dfa *dfa) /* Main entry point for the parser. S is a string to be parsed, len is the length of the string, so s can include NUL characters. D is a pointer to the struct dfa to parse into. */ -static void +void dfaparse (char const *s, size_t len, struct dfa *d) { d->lex.ptr = s; @@ -3745,7 +3745,9 @@ dfassbuild (struct dfa *d) void dfacomp (char const *s, size_t len, struct dfa *d, bool searchflag) { - dfaparse (s, len, d); + if (s != NULL) + dfaparse (s, len, d); + dfassbuild (d); if (dfa_supported (d)) diff --git a/lib/dfa.h b/lib/dfa.h index 60512e2..221f7d1 100644 --- a/lib/dfa.h +++ b/lib/dfa.h @@ -71,6 +71,9 @@ extern struct dfamust *dfamust (struct dfa const *); /* Free the storage held by the components of a struct dfamust. */ extern void dfamustfree (struct dfamust *); +/* Parse the given string of given length into the given struct dfa. */ +extern void dfaparse (char const *, size_t, struct dfa *); + /* Compile the given string of the given length into the given struct dfa. Final argument is a flag specifying whether to build a searching or an exact matcher. */ -- 1.7.1