bug-grep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 7/9] dfa: move nalloc to position_set structure


From: Paolo Bonzini
Subject: [PATCH 7/9] dfa: move nalloc to position_set structure
Date: Tue, 3 Jan 2012 09:38:20 +0100

* src/dfa.c (position_set): Add alloc.
(alloc_posset): Initialize it.
(dfaanalyze): Use it instead of the nalloc array or nelem.
---
 src/dfa.c |   16 +++++++---------
 1 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/src/dfa.c b/src/dfa.c
index 4644cab..03676b0 100644
--- a/src/dfa.c
+++ b/src/dfa.c
@@ -247,6 +247,7 @@ typedef struct
 {
   position *elems;             /* Elements of this position set. */
   int nelem;                   /* Number of elements in this set. */
+  size_t alloc;                        /* Number of elements allocated in 
ELEMS.  */
 } position_set;
 
 /* Sets of leaves are also stored as arrays. */
@@ -1835,6 +1836,7 @@ static void
 alloc_posset (position_set *s, size_t size)
 {
   MALLOC(s->elems, size);
+  s->alloc = size;
   s->nelem = 0;
 }
 
@@ -2103,7 +2105,6 @@ dfaanalyze (struct dfa *d, int searchflag)
   position *firstpos;          /* Array where firstpos elements are stored. */
   int *nlastpos;               /* Element count stack for lastpos sets. */
   position *lastpos;           /* Array where lastpos elements are stored. */
-  int *nalloc;                 /* Sizes of arrays allocated to follow sets. */
   position_set tmp;            /* Temporary set for merging sets. */
   position_set merged;         /* Result of merging sets. */
   int wants_newline;           /* True if some position wants newline info. */
@@ -2135,7 +2136,6 @@ dfaanalyze (struct dfa *d, int searchflag)
   o_nlast = nlastpos;
   MALLOC(lastpos, d->nleaves);
   o_lastpos = lastpos, lastpos += d->nleaves;
-  CALLOC(nalloc, d->tindex);
   alloc_posset(&merged, d->nleaves);
 
   CALLOC(d->follows, d->tindex);
@@ -2163,7 +2163,7 @@ dfaanalyze (struct dfa *d, int searchflag)
           {
             merge(&tmp, &d->follows[pos[j].index], &merged);
             REALLOC_IF_NECESSARY(d->follows[pos[j].index].elems,
-                                 nalloc[pos[j].index], merged.nelem);
+                                 d->follows[pos[j].index].alloc, merged.nelem);
             copy(&merged, &d->follows[pos[j].index]);
           }
 
@@ -2183,7 +2183,7 @@ dfaanalyze (struct dfa *d, int searchflag)
           {
             merge(&tmp, &d->follows[pos[j].index], &merged);
             REALLOC_IF_NECESSARY(d->follows[pos[j].index].elems,
-                                 nalloc[pos[j].index], merged.nelem);
+                                 d->follows[pos[j].index].alloc, merged.nelem);
             copy(&merged, &d->follows[pos[j].index]);
           }
 
@@ -2243,8 +2243,7 @@ dfaanalyze (struct dfa *d, int searchflag)
         firstpos->constraint = lastpos->constraint = NO_CONSTRAINT;
 
         /* Allocate the follow set for this position. */
-        nalloc[i] = 1;
-        alloc_posset(&d->follows[i], nalloc[i]);
+        alloc_posset(&d->follows[i], 1);
         break;
       }
 #ifdef DEBUG
@@ -2292,8 +2291,8 @@ dfaanalyze (struct dfa *d, int searchflag)
 #endif
         copy(&d->follows[i], &merged);
         epsclosure(&merged, d);
-        if (d->follows[i].nelem < merged.nelem)
-          REALLOC(d->follows[i].elems, merged.nelem);
+        REALLOC_IF_NECESSARY(d->follows[i].elems, d->follows[i].alloc,
+                            merged.nelem);
         copy(&merged, &d->follows[i]);
       }
 
@@ -2321,7 +2320,6 @@ dfaanalyze (struct dfa *d, int searchflag)
   free(o_firstpos);
   free(o_nlast);
   free(o_lastpos);
-  free(nalloc);
   free(merged.elems);
 }
 
-- 
1.7.7.1





reply via email to

[Prev in Thread] Current Thread [Next in Thread]