(derives_compute): Do not subtract NTOKENS from

the pointer DSET returned by malloc; this isn't portable.
Instead, always use DSET[i - NTOKENS] rather than DSET[i].
Similarly for DERIVES.

(derives_compute): Do not bother invoking
int_of_rule_number, since rule numbers are integers.

All uses of XCALLOC, XMALLOC, and XREALLOC changed to use new macros
CALLOC, MALLOC, REALLOC.  All uses of XFREE changed to free.
This commit is contained in:
Paul Eggert
2002-12-13 04:50:32 +00:00
parent 1dd15b6ea6
commit 69cecfeb38

View File

@@ -50,7 +50,7 @@ print_derives (void)
{ {
rule **rp; rule **rp;
fprintf (stderr, "\t%s derives\n", symbols[i]->tag); fprintf (stderr, "\t%s derives\n", symbols[i]->tag);
for (rp = derives[i]; *rp; ++rp) for (rp = derives[i - ntokens]; *rp; ++rp)
{ {
fprintf (stderr, "\t\t%3d ", (*rp)->user_number); fprintf (stderr, "\t\t%3d ", (*rp)->user_number);
rule_rhs_print (*rp, stderr); rule_rhs_print (*rp, stderr);
@@ -68,35 +68,35 @@ derives_compute (void)
int r; int r;
rule **q; rule **q;
/* DSET[NTERM] -- A linked list of the numbers of the rules whose /* DSET[NTERM - NTOKENS] -- A linked list of the numbers of the rules
LHS is NTERM. */ whose LHS is NTERM. */
rule_list **dset = XCALLOC (rule_list *, nvars) - ntokens; rule_list **dset = CALLOC (dset, nvars);
/* DELTS[RULE] -- There are NRULES rule number to attach to nterms. /* DELTS[RULE] -- There are NRULES rule number to attach to nterms.
Instead of performing NRULES allocations for each, have an array Instead of performing NRULES allocations for each, have an array
indexed by rule numbers. */ indexed by rule numbers. */
rule_list *delts = XCALLOC (rule_list, nrules); rule_list *delts = CALLOC (delts, nrules);
for (r = nrules - 1; r >= 0; --r) for (r = nrules - 1; r >= 0; --r)
{ {
symbol_number lhs = rules[r].lhs->number; symbol_number lhs = rules[r].lhs->number;
rule_list *p = &delts[r]; rule_list *p = &delts[r];
/* A new LHS is found. */ /* A new LHS is found. */
p->next = dset[lhs]; p->next = dset[lhs - ntokens];
p->value = &rules[r]; p->value = &rules[r];
dset[lhs] = p; dset[lhs - ntokens] = p;
} }
/* DSET contains what we need under the form of a linked list. Make /* DSET contains what we need under the form of a linked list. Make
it a single array. */ it a single array. */
derives = XCALLOC (rule **, nvars) - ntokens; CALLOC (derives, nvars);
q = XCALLOC (rule *, nvars + int_of_rule_number (nrules)); CALLOC (q, nvars + nrules);
for (i = ntokens; i < nsyms; i++) for (i = ntokens; i < nsyms; i++)
{ {
rule_list *p = dset[i]; rule_list *p = dset[i - ntokens];
derives[i] = q; derives[i - ntokens] = q;
while (p) while (p)
{ {
*q++ = p->value; *q++ = p->value;
@@ -108,7 +108,7 @@ derives_compute (void)
if (trace_flag & trace_sets) if (trace_flag & trace_sets)
print_derives (); print_derives ();
free (dset + ntokens); free (dset);
free (delts); free (delts);
} }
@@ -116,6 +116,6 @@ derives_compute (void)
void void
derives_free (void) derives_free (void)
{ {
XFREE (derives[ntokens]); free (derives[0]);
XFREE (derives + ntokens); free (derives);
} }