]> Savannah Git Hosting - gnulib.git/commitdiff
dfa: separate parse and compile phase
authorNorihiro Tanaka <noritnk@kcn.ne.jp>
Wed, 11 Dec 2019 20:53:09 +0000 (12:53 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 11 Dec 2019 23:09:38 +0000 (15:09 -0800)
‘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
lib/dfa.c
lib/dfa.h

index a5577f7c3dbe2f821ffc0efa7a4dcb1abea1d41d..f80f33b385a5b354acb06a229a88990752da37c8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2019-12-11  Norihiro Tanaka  <noritnk@kcn.ne.jp>
+
+       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  <bruno@clisp.org>
 
        unistd tests: Fix link error on MSVC.
index 329a2092a7eeeaeb1ee5379738ec2050f61a862e..1e125b4d242bd79f523048bc23b61685bcb9e249 100644 (file)
--- 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))
index 60512e294062ae30c684a88d34eb8d50e05dc8d0..221f7d172a591f910907821bdaec3f430d77c662 100644 (file)
--- 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. */