]> Savannah Git Hosting - gnulib.git/commitdiff
dfa: simplify with new function fillset
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 25 Nov 2016 18:43:38 +0000 (10:43 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 25 Nov 2016 19:00:08 +0000 (11:00 -0800)
* lib/dfa.c (fillset): New function.
Use it for clarity when applicable.

ChangeLog
lib/dfa.c

index 01fa184015bdc545eb92e90b56aa1a0682585116..2796a035fa45eadec9ffbbc39848f6a64bcf409d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2016-11-25  Paul Eggert  <eggert@cs.ucla.edu>
 
+       dfa: simplify with new function fillset
+       * lib/dfa.c (fillset): New function.
+       Use it for clarity when applicable.
+
        dfa: fix glitches with on-demand states
        Also, adjust commentary to better match new code.
        Some of these glitches predate the recent change.
index 234f29ec788cd3205f9c9cebf3996037048c7093..55782324e34bdceb119517467a60e68fca637e11 100644 (file)
--- a/lib/dfa.c
+++ b/lib/dfa.c
@@ -695,10 +695,17 @@ zeroset (charclass s)
 }
 
 static void
-notset (charclass s)
+fillset (charclass s)
 {
   int i;
+  for (i = 0; i < CHARCLASS_WORDS; i++)
+    s[i] = CHARCLASS_WORD_MASK;
+}
 
+static void
+notset (charclass s)
+{
+  int i;
   for (i = 0; i < CHARCLASS_WORDS; ++i)
     s[i] = CHARCLASS_WORD_MASK & ~s[i];
 }
@@ -1409,8 +1416,7 @@ lex (struct dfa *dfa)
             goto normal_char;
           if (dfa->canychar == (size_t) -1)
             {
-              zeroset (ccl);
-              notset (ccl);
+              fillset (ccl);
               if (!(dfa->syntax.syntax_bits & RE_DOT_NEWLINE))
                 clrbit ('\n', ccl);
               if (dfa->syntax.syntax_bits & RE_DOT_NOT_NULL)
@@ -2536,8 +2542,7 @@ dfastate (state_num s, struct dfa *d, unsigned char uc, state_num trans[])
   group.elems = xnmalloc (d->nleaves, sizeof *group.elems);
   group.nelem = 0;
 
-  zeroset (label);
-  notset (label);
+  fillset (label);
 
   for (i = 0; i < d->states[s].elems.nelem; ++i)
     {
@@ -3333,7 +3338,6 @@ static void
 dfassbuild (struct dfa *d)
 {
   size_t i, j;
-  charclass ccl;
   bool have_achar = false;
   bool have_nchar = false;
   struct dfa *sup = dfaalloc ();
@@ -3370,14 +3374,16 @@ dfassbuild (struct dfa *d)
         case ANYCHAR:
         case MBCSET:
         case BACKREF:
-          zeroset (ccl);
-          notset (ccl);
-          sup->tokens[j++] = CSET + charclass_index (sup, ccl);
-          sup->tokens[j++] = STAR;
-          if (d->tokens[i + 1] == QMARK || d->tokens[i + 1] == STAR
-              || d->tokens[i + 1] == PLUS)
-            i++;
-          have_achar = true;
+          {
+            charclass ccl;
+            fillset (ccl);
+            sup->tokens[j++] = CSET + charclass_index (sup, ccl);
+            sup->tokens[j++] = STAR;
+            if (d->tokens[i + 1] == QMARK || d->tokens[i + 1] == STAR
+                || d->tokens[i + 1] == PLUS)
+              i++;
+            have_achar = true;
+          }
           break;
         case BEGWORD:
         case ENDWORD: