mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-17 16:23:04 +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;
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user