]> git.saurik.com Git - bison.git/blobdiff - src/output.c
* src/output.c (output_rule_data): Fix various range errors:
[bison.git] / src / output.c
index 140f220b59ba7932015bd1e5dacaf8e41858a392..63b1e0dcc884caf9ad5d4d5b6e76ba931dd17126 100644 (file)
@@ -192,8 +192,8 @@ output_gram (void)
   {
     int i;
     short *values = XCALLOC (short, nrules + 1);
-    for (i = 0; i < nrules + 1; ++i)
-      values[i] = rules[i].rhs;
+    for (i = 1; i < nrules + 1; ++i)
+      values[i] = rules[i].rhs - ritem;
     output_table_data (&format_obstack, values,
                       0, 1, nrules + 1);
     XFREE (values);
@@ -246,7 +246,7 @@ output_rule_data (void)
 
   {
     short *values = XCALLOC (short, nrules + 1);
-    for (i = 0; i < nrules + 1; ++i)
+    for (i = 1; i < nrules + 1; ++i)
       values[i] = rules[i].line;
     output_table_data (&format_obstack, values,
                       0, 1, nrules + 1);
@@ -299,7 +299,7 @@ output_rule_data (void)
   /* Output YYR1. */
   {
     short *values = XCALLOC (short, nrules + 1);
-    for (i = 0; i < nrules + 1; ++i)
+    for (i = 1; i < nrules + 1; ++i)
       values[i] = rules[i].lhs;
     output_table_data (&format_obstack, values,
                       0, 1, nrules + 1);
@@ -311,7 +311,7 @@ output_rule_data (void)
   short_tab = XMALLOC (short, nrules + 1);
   for (i = 1; i < nrules; i++)
     short_tab[i] = rules[i + 1].rhs - rules[i].rhs - 1;
-  short_tab[nrules] =  nritems - rules[nrules].rhs - 1;
+  short_tab[nrules] =  nritems - (rules[nrules].rhs - ritem) - 1;
   output_table_data (&format_obstack, short_tab,
                     0, 1, nrules + 1);
   muscle_insert ("r2", obstack_finish (&format_obstack));
@@ -568,6 +568,7 @@ void
 token_definitions_output (FILE *out)
 {
   int i;
+  int first = 1;
   for (i = 0; i < ntokens; ++i)
     {
       bucket *symbol = symbols[i];
@@ -576,7 +577,7 @@ token_definitions_output (FILE *out)
       if (number == SALIAS)
        continue;
       /* Skip error token.  */
-      if (symbol->value == error_token_number)
+      if (symbol->number == error_token_number)
        continue;
       if (symbol->tag[0] == '\'')
        continue;               /* skip literal character */
@@ -594,12 +595,13 @@ token_definitions_output (FILE *out)
       if (strchr (symbol->tag, '.') || strchr (symbol->tag, '$'))
        continue;
 
-      fprintf (out, "# define %s\t%d\n",
-              symbol->tag, number);
+      fprintf (out, "%s  [[[%s]], [%d]]",
+              first ? "" : ",\n", symbol->tag, number);
       if (semantic_parser)
        /* FIXME: This is probably wrong, and should be just as
           above. --akim.  */
-       fprintf (out, "# define T%s\t%d\n", symbol->tag, symbol->value);
+       fprintf (out, "# define T%s\t%d\n", symbol->tag, symbol->number);
+      first = 0;
     }
 }
 
@@ -988,9 +990,9 @@ output_skeleton (void)
   guards_output (out);
   fputs ("]])\n\n", out);
 
-  fputs ("m4_define([b4_tokendef], \n[[", out);
+  fputs ("m4_define([b4_tokens], \n[", out);
   token_definitions_output (out);
-  fputs ("]])\n\n", out);
+  fputs ("])\n\n", out);
 
   muscles_m4_output (out);