[Top][All Lists]
[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
- Re: [PATCH 3/9] dfa: use MALLOC/REALLOC always, (continued)
- [PATCH 4/9] dfa: use a separate data type for grps, Paolo Bonzini, 2012/01/03
- [PATCH 5/9] dfa: introduce alloc_posset, Paolo Bonzini, 2012/01/03
- [PATCH 6/9] dfa: remove dead assignment, Paolo Bonzini, 2012/01/03
- [PATCH 7/9] dfa: move nalloc to position_set structure,
Paolo Bonzini <=
- [PATCH 8/9] dfa: change position_set nelem to size_t, Paolo Bonzini, 2012/01/03
- [PATCH 9/9] dfa: automatically resize position_sets, Paolo Bonzini, 2012/01/03