]> git.saurik.com Git - bison.git/blobdiff - src/derives.c
Change @dircategory from "GNU programming tools" to "Software development".
[bison.git] / src / derives.c
index 10d3adbf51054e0859bbf5ce84cafd25354126a5..0810a726d0c555db181448ea4a6c13a841aa5541 100644 (file)
@@ -1,6 +1,6 @@
 /* Match rules with nonterminals for bison,
 
 /* Match rules with nonterminals for bison,
 
-   Copyright (C) 1984, 1989, 2000, 2001, 2002 Free Software
+   Copyright (C) 1984, 1989, 2000, 2001, 2002, 2003 Free Software
    Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
    Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -37,7 +37,7 @@ typedef struct rule_list
   rule *value;
 } rule_list;
 
   rule *value;
 } rule_list;
 
-rule ***derives = NULL;
+rule ***derives;
 
 static void
 print_derives (void)
 
 static void
 print_derives (void)
@@ -50,7 +50,7 @@ print_derives (void)
     {
       rule **rp;
       fprintf (stderr, "\t%s derives\n", symbols[i]->tag);
     {
       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);
        {
          fprintf (stderr, "\t\t%3d ", (*rp)->user_number);
          rule_rhs_print (*rp, stderr);
@@ -65,38 +65,38 @@ void
 derives_compute (void)
 {
   symbol_number i;
 derives_compute (void)
 {
   symbol_number i;
-  int r;
+  rule_number r;
   rule **q;
 
   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 = xcalloc (nvars, sizeof *dset);
 
   /* 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.  */
 
   /* 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 = xnmalloc (nrules, sizeof *delts);
 
   for (r = nrules - 1; r >= 0; --r)
     {
       symbol_number lhs = rules[r].lhs->number;
       rule_list *p = &delts[r];
       /* A new LHS is found.  */
 
   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];
       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.  */
 
     }
 
   /* 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));
+  derives = xnmalloc (nvars, sizeof *derives);
+  q = xnmalloc (nvars + nrules, sizeof *q);
 
   for (i = ntokens; i < nsyms; i++)
     {
 
   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;
       while (p)
        {
          *q++ = p->value;
@@ -108,7 +108,7 @@ derives_compute (void)
   if (trace_flag & trace_sets)
     print_derives ();
 
   if (trace_flag & trace_sets)
     print_derives ();
 
-  free (dset + ntokens);
+  free (dset);
   free (delts);
 }
 
   free (delts);
 }
 
@@ -116,6 +116,6 @@ derives_compute (void)
 void
 derives_free (void)
 {
 void
 derives_free (void)
 {
-  XFREE (derives[ntokens]);
-  XFREE (derives + ntokens);
+  free (derives[0]);
+  free (derives);
 }
 }