* src/system.h (LIST_FREE, shortcpy): New.

* src/LR0.c: Use them.
* src/output.c (free_itemsets, free_reductions, free_shifts):
Remove, replaced by LIST_FREE.
This commit is contained in:
Akim Demaille
2001-11-19 09:14:54 +00:00
parent b4a7a230f1
commit 377bd7c9a2
5 changed files with 31 additions and 76 deletions

View File

@@ -1,3 +1,11 @@
2001-11-19 Akim Demaille <akim@epita.fr>
* src/system.h (LIST_FREE, shortcpy): New.
* src/LR0.c: Use them.
* src/output.c (free_itemsets, free_reductions, free_shifts):
Remove, replaced by LIST_FREE.
2001-11-19 Akim Demaille <akim@epita.fr>
* src/state.h (CORE_ALLOC, SHIFTS_ALLOC, ERRS_ALLOC)

View File

@@ -196,9 +196,6 @@ new_state (int symbol)
{
int n;
core *p;
short *isp1;
short *isp2;
short *iend;
#if TRACE
fprintf (stderr, "Entering new_state, symbol = %d, state = %d\n",
@@ -208,18 +205,14 @@ new_state (int symbol)
if (nstates >= MAXSHORT)
fatal (_("too many states (max %d)"), MAXSHORT);
isp1 = kernel_base[symbol];
iend = kernel_end[symbol];
n = iend - isp1;
n = kernel_end[symbol] - kernel_base[symbol];
p = CORE_ALLOC (n);
p->accessing_symbol = symbol;
p->number = nstates;
p->nitems = n;
isp2 = p->items;
while (isp1 < iend)
*isp2++ = *isp1++;
shortcpy (p->items, kernel_base[symbol], n);
last_state->next = p;
last_state = p;
@@ -360,21 +353,13 @@ static void
save_shifts (void)
{
shifts *p;
short *sp1;
short *sp2;
short *send;
p = SHIFTS_ALLOC (nshifts);
p->number = this_state->number;
p->nshifts = nshifts;
sp1 = shiftset;
sp2 = p->shifts;
send = shiftset + nshifts;
while (sp1 < send)
*sp2++ = *sp1++;
shortcpy (p->shifts, shiftset, nshifts);
if (last_shift)
{
@@ -603,8 +588,6 @@ static void
save_reductions (void)
{
short *isp;
short *rp1;
short *rp2;
int item;
int count;
reductions *p;
@@ -630,12 +613,7 @@ save_reductions (void)
p->number = this_state->number;
p->nreds = count;
rp1 = redset;
rp2 = p->rules;
rend = rp1 + count;
for (/* nothing */; rp1 < rend; ++rp1, ++rp2)
*rp2 = *rp1;
shortcpy (p->rules, redset, count);
if (last_reduction)
{

View File

@@ -653,14 +653,7 @@ compute_lookaheads (void)
/* Free LOOKBACK. */
for (i = 0; i < state_table[nstates].lookaheads; i++)
{
shorts *sptmp;
for (sp = lookback[i]; sp; sp = sptmp)
{
sptmp = sp->next;
XFREE (sp);
}
}
LIST_FREE (shorts, lookback[i]);
XFREE (lookback);
XFREE (F);

View File

@@ -760,33 +760,6 @@ token_actions (void)
}
static void
free_shifts (void)
{
shifts *sp, *sptmp; /* JF derefrenced freed ptr */
for (sp = first_shift; sp; sp = sptmp)
{
sptmp = sp->next;
XFREE (sp);
}
}
static void
free_reductions (void)
{
reductions *rp, *rptmp; /* JF fixed freed ptr */
for (rp = first_reduction; rp; rp = rptmp)
{
rptmp = rp->next;
XFREE (rp);
}
}
static void
save_column (int symbol, int default_state)
{
@@ -1136,8 +1109,8 @@ output_actions (void)
width = XCALLOC (short, nvectors);
token_actions ();
free_shifts ();
free_reductions ();
LIST_FREE (shifts, first_shift);
LIST_FREE (reductions, first_reduction);
XFREE (LA);
XFREE (LAruleno);
@@ -1306,18 +1279,6 @@ output_program (void)
}
static void
free_itemsets (void)
{
core *cp, *cptmp;
for (cp = first_state; cp; cp = cptmp)
{
cptmp = cp->next;
XFREE (cp);
}
}
/*----------------------------------------------------------.
| Output the parsing tables and the parser code to ftable. |
`----------------------------------------------------------*/
@@ -1349,7 +1310,7 @@ output (void)
if (!no_parser_flag)
obstack_sgrow (&table_obstack, "#include <stdio.h>\n\n");
free_itemsets ();
LIST_FREE (core, first_state);
output_defines ();
output_token_translations ();
/* if (semantic_parser) */

View File

@@ -279,6 +279,21 @@ do { \
#endif
/* As memcpy, but for shorts. */
#define shortcpy(Dest, Src, Num) \
memcpy (Dest, Src, Num * sizeof (short))
/* Free a linked list. */
#define LIST_FREE(Type, List) \
do { \
Type *_node, *_next; \
for (_node = List; _node; _node = _next) \
{ \
_next = _node->next; \
XFREE (_node); \
} \
} while (0)
/*---------------------------------.
| Debugging the memory allocator. |
`---------------------------------*/