]> git.saurik.com Git - bison.git/blobdiff - src/tables.c
(conflict_row, pack_vector): Use abort rather than assert.
[bison.git] / src / tables.c
index 17883e1fde316bddea9daf1df663d18cd93d4744..0ebcd2a18e35496125f679ac16f720a461af39ae 100644 (file)
@@ -1,4 +1,4 @@
-/* Output the generated parsing program for bison,
+/* Output the generated parsing program for Bison.
    Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002
    Free Software Foundation, Inc.
 
@@ -33,9 +33,9 @@
 #include "conflicts.h"
 #include "tables.h"
 
-/* Several tables will be indexed both by state and nonterminal
-   numbers.  We call `vector' such a thing (= either a state or a
-   symbol number.
+/* Several tables are indexed both by state and nonterminal numbers.
+   We call such an index a `vector'; i.e., a vector is either a state
+   or a nonterminal number.
 
    Of course vector_number_t ought to be wide enough to contain
    state_number_t and symbol_number_t.  */
@@ -82,7 +82,7 @@ static base_t *width = NULL;
 /* For a given state, N = ACTROW[SYMBOL]:
 
    If N = 0, stands for `run the default action'.
-   If N = MIN, stands for `raise a parse error'.
+   If N = MIN, stands for `raise a syntax error'.
    If N > 0, stands for `shift SYMBOL and go to n'.
    If N < 0, stands for `reduce -N'.  */
 typedef short action_t;
@@ -116,7 +116,7 @@ static int conflict_list_free;
 static size_t table_size = 32768;
 base_t *table = NULL;
 base_t *check = NULL;
-/* The value used in TABLE to denote explicit parse errors
+/* The value used in TABLE to denote explicit syntax errors
    (%nonassoc), a negative infinite.  First defaults to ACTION_MIN,
    but in order to keep small tables, renumbered as TABLE_ERROR, which
    is the smallest (non error) value minus 1.  */
@@ -190,14 +190,16 @@ conflict_row (state_t *state)
              && (actrow[j]
                  != rule_number_as_item_number (reds->rules[i]->number)))
            {
-             assert (conflict_list_free > 0);
+             if (conflict_list_free <= 0)
+               abort ();
              conflict_list[conflict_list_cnt] = reds->rules[i]->number + 1;
              conflict_list_cnt += 1;
              conflict_list_free -= 1;
            }
 
        /* Leave a 0 at the end.  */
-       assert (conflict_list_free > 0);
+       if (conflict_list_free <= 0)
+         abort ();
        conflict_list_cnt += 1;
        conflict_list_free -= 1;
       }
@@ -654,13 +656,17 @@ pack_vector (vector_number_t vector)
   base_t *to = tos[i];
   unsigned int *conflict_to = conflict_tos[i];
 
-  assert (t);
+  if (! t)
+    abort ();
 
-  for (j = lowzero - from[0]; j < (int) table_size; j++)
+  for (j = lowzero - from[0]; ; j++)
     {
       int k;
       int ok = 1;
 
+      if ((int) table_size <= j)
+       abort ();
+
       for (k = 0; ok && k < t; k++)
        {
          loc = j + state_number_as_int (from[k]);
@@ -692,13 +698,11 @@ pack_vector (vector_number_t vector)
          if (loc > high)
            high = loc;
 
-         assert (BASE_MIN <= j && j <= BASE_MAX);
+         if (! (BASE_MIN <= j && j <= BASE_MAX))
+           abort ();
          return j;
        }
     }
-#define pack_vector_succeeded 0
-  assert (pack_vector_succeeded);
-  return 0;
 }
 
 
@@ -784,11 +788,12 @@ tables_generate (void)
 {
   int i;
 
-  /* That's a poor way to make sure the sizes are properly corelated,
-     in particular the signedness is not taking into account, but it's
-     not useless.  */
-  assert (sizeof (nvectors) >= sizeof (nstates));
-  assert (sizeof (nvectors) >= sizeof (nvars));
+  /* This is a poor way to make sure the sizes are properly
+     correlated.  In particular the signedness is not taken into
+     account.  But it's not useless.  */
+  verify (sizes_are_properly_correlated,
+         (sizeof nstates <= sizeof nvectors
+          && sizeof nvars <= sizeof nvectors));
 
   nvectors = state_number_as_int (nstates) + nvars;