X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/b0299a2ebb1a000b67d23d3cfecb52f699dd734a..ec3bc39:/src/lalr.c

diff --git a/src/lalr.c b/src/lalr.c
index e1e2719d..643f8fd9 100644
--- a/src/lalr.c
+++ b/src/lalr.c
@@ -27,11 +27,12 @@
 #include "system.h"
 #include "bitset.h"
 #include "bitsetv.h"
+#include "quotearg.h"
+#include "symtab.h"
+#include "gram.h"
 #include "reader.h"
 #include "types.h"
 #include "LR0.h"
-#include "symtab.h"
-#include "gram.h"
 #include "complain.h"
 #include "lalr.h"
 #include "nullable.h"
@@ -169,8 +170,8 @@ set_goto_map (void)
       shifts *sp = states[state]->shifts;
       for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
 	{
-	  if (ngotos == MAXSHORT)
-	    fatal (_("too many gotos (max %d)"), MAXSHORT);
+	  if (ngotos == SHRT_MAX)
+	    fatal (_("too many gotos (max %d)"), SHRT_MAX);
 
 	  ngotos++;
 	  goto_map[SHIFT_SYMBOL (sp, i)]++;
@@ -216,7 +217,7 @@ set_goto_map (void)
 `----------------------------------------------------------*/
 
 static int
-map_goto (int state, int symbol)
+map_goto (int state, token_number_t symbol)
 {
   int high;
   int low;
@@ -266,7 +267,7 @@ initialize_F (void)
 
       for (; j < sp->nshifts; j++)
 	{
-	  int symbol = SHIFT_SYMBOL (sp, j);
+	  token_number_t symbol = SHIFT_SYMBOL (sp, j);
 	  if (nullable[symbol])
 	    edge[nedges++] = map_goto (stateno, symbol);
 	}
@@ -274,7 +275,7 @@ initialize_F (void)
       if (nedges)
 	{
 	  reads[i] = XCALLOC (short, nedges + 1);
-	  shortcpy (reads[i], edge, nedges);
+	  memcpy (reads[i], edge, nedges * sizeof (edge[0]));
 	  reads[i][nedges] = -1;
 	  nedges = 0;
 	}
@@ -407,14 +408,14 @@ build_relations (void)
   for (i = 0; i < ngotos; i++)
     {
       int nedges = 0;
-      int symbol1 = states[to_state[i]]->accessing_symbol;
+      token_number_t symbol1 = states[to_state[i]]->accessing_symbol;
       short *rulep;
 
       for (rulep = derives[symbol1]; *rulep > 0; rulep++)
 	{
 	  int done;
 	  int length = 1;
-	  short *rp;
+	  item_number_t *rp;
 	  state_t *state = states[from_state[i]];
 	  states1[0] = state->number;
 
@@ -425,7 +426,8 @@ build_relations (void)
 	      for (j = 0; j < sp->nshifts; j++)
 		{
 		  state = states[sp->shifts[j]];
-		  if (state->accessing_symbol == *rp)
+		  if (state->accessing_symbol
+		      == item_number_as_token_number (*rp))
 		    break;
 		}
 
@@ -444,7 +446,9 @@ build_relations (void)
 	      /* JF added rp>=ritem &&   I hope to god its right! */
 	      if (rp >= ritem && ISVAR (*rp))
 		{
-		  edge[nedges++] = map_goto (states1[--length], *rp);
+		  /* Downcasting from item_number_t to token_number_t. */
+		  edge[nedges++] = map_goto (states1[--length],
+					     item_number_as_token_number (*rp));
 		  if (nullable[*rp])
 		    done = 0;
 		}
@@ -559,9 +563,9 @@ lookaheads_print (FILE *out)
 
       for (j = 0; j < states[i]->nlookaheads; ++j)
 	for (k = 0; k < ntokens; ++k)
-	  if (bitset_test (LA[states[i]->lookaheadsp + j], j))
+	  if (bitset_test (LA[states[i]->lookaheadsp + j], k))
 	    fprintf (out, "   on %d (%s) -> rule %d\n",
-		     k, symbols[k]->tag,
+		     k, quotearg_style (escape_quoting_style, symbols[k]->tag),
 		     LArule[states[i]->lookaheadsp + j]->number - 1);
     }
   fprintf (out, "Lookaheads: END\n");