mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +00:00
(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:
@@ -50,7 +50,7 @@ print_derives (void)
|
||||
{
|
||||
rule **rp;
|
||||
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);
|
||||
rule_rhs_print (*rp, stderr);
|
||||
@@ -68,35 +68,35 @@ derives_compute (void)
|
||||
int r;
|
||||
rule **q;
|
||||
|
||||
/* DSET[NTERM] -- A linked list of the numbers of the rules whose
|
||||
LHS is NTERM. */
|
||||
rule_list **dset = XCALLOC (rule_list *, nvars) - ntokens;
|
||||
/* DSET[NTERM - NTOKENS] -- A linked list of the numbers of the rules
|
||||
whose LHS is NTERM. */
|
||||
rule_list **dset = CALLOC (dset, nvars);
|
||||
|
||||
/* DELTS[RULE] -- There are NRULES rule number to attach to nterms.
|
||||
Instead of performing NRULES allocations for each, have an array
|
||||
indexed by rule numbers. */
|
||||
rule_list *delts = XCALLOC (rule_list, nrules);
|
||||
rule_list *delts = CALLOC (delts, nrules);
|
||||
|
||||
for (r = nrules - 1; r >= 0; --r)
|
||||
{
|
||||
symbol_number lhs = rules[r].lhs->number;
|
||||
rule_list *p = &delts[r];
|
||||
/* A new LHS is found. */
|
||||
p->next = dset[lhs];
|
||||
p->next = dset[lhs - ntokens];
|
||||
p->value = &rules[r];
|
||||
dset[lhs] = p;
|
||||
dset[lhs - ntokens] = p;
|
||||
}
|
||||
|
||||
/* DSET contains what we need under the form of a linked list. Make
|
||||
it a single array. */
|
||||
|
||||
derives = XCALLOC (rule **, nvars) - ntokens;
|
||||
q = XCALLOC (rule *, nvars + int_of_rule_number (nrules));
|
||||
CALLOC (derives, nvars);
|
||||
CALLOC (q, nvars + nrules);
|
||||
|
||||
for (i = ntokens; i < nsyms; i++)
|
||||
{
|
||||
rule_list *p = dset[i];
|
||||
derives[i] = q;
|
||||
rule_list *p = dset[i - ntokens];
|
||||
derives[i - ntokens] = q;
|
||||
while (p)
|
||||
{
|
||||
*q++ = p->value;
|
||||
@@ -108,7 +108,7 @@ derives_compute (void)
|
||||
if (trace_flag & trace_sets)
|
||||
print_derives ();
|
||||
|
||||
free (dset + ntokens);
|
||||
free (dset);
|
||||
free (delts);
|
||||
}
|
||||
|
||||
@@ -116,6 +116,6 @@ derives_compute (void)
|
||||
void
|
||||
derives_free (void)
|
||||
{
|
||||
XFREE (derives[ntokens]);
|
||||
XFREE (derives + ntokens);
|
||||
free (derives[0]);
|
||||
free (derives);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user