From ac92492294ca52fe2596f6353a3fe2800052f676 Mon Sep 17 00:00:00 2001 From: Norihiro Tanaka Date: Wed, 11 Dec 2019 12:53:09 -0800 Subject: [PATCH] dfa: separate parse and compile phase MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit ‘dfamust’ must be called after parsing and before tokens are reordered, but both are executed in the compilation phase. Token reordering was introduced in Gnulib commit 2018-10-22T15:01:08Z!noritnk@kcn.ne.jp (5c7a0371823876cca7a1347fa09ca26bbbff0c98). * lib/dfa.c (dfaparse): Change it to global function. (dfacomp): If first argument is NULL, skip parse. * lib/dfa.h: (dfaparse): Add a prototype. --- ChangeLog | 12 ++++++++++++ lib/dfa.c | 6 ++++-- lib/dfa.h | 3 +++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index a5577f7c3d..f80f33b385 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2019-12-11 Norihiro Tanaka + + dfa: separate parse and compile phase + ‘dfamust’ must be called after parsing and before tokens are + reordered, but both are executed in the compilation phase. + Token reordering was introduced in Gnulib commit + 2018-10-22T15:01:08Z!noritnk@kcn.ne.jp + (5c7a0371823876cca7a1347fa09ca26bbbff0c98). + * lib/dfa.c (dfaparse): Change it to global function. + (dfacomp): If first argument is NULL, skip parse. + * lib/dfa.h: (dfaparse): Add a prototype. + 2019-12-11 Bruno Haible unistd tests: Fix link error on MSVC. diff --git a/lib/dfa.c b/lib/dfa.c index 329a2092a7..1e125b4d24 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 60512e2940..221f7d172a 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. */ -- 2.39.5