* src/lalr.c (add_lookback_edge): Use state_t instead of ints.
authorAkim Demaille <akim@epita.fr>
Thu, 27 Dec 2001 18:07:17 +0000 (18:07 +0000)
committerAkim Demaille <akim@epita.fr>
Thu, 27 Dec 2001 18:07:17 +0000 (18:07 +0000)
(build_relations): Adjust.

ChangeLog
src/lalr.c

index 1e3b31c..31d0477 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2001-12-27  Akim Demaille  <akim@epita.fr>
 
+       * src/lalr.c (add_lookback_edge): Use state_t instead of ints.
+       (build_relations): Adjust.
+
+       
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
        * src/lalr.c (set_goto_map): Remove a wrong but benign loop
        duplication.
 
index 1dfb293..be178b8 100644 (file)
@@ -301,21 +301,21 @@ initialize_F (void)
 
 
 static void
-add_lookback_edge (int stateno, int ruleno, int gotono)
+add_lookback_edge (state_t *state, int ruleno, int gotono)
 {
   int i;
   shorts *sp;
 
-  for (i = 0; i < state_table[stateno]->nlookaheads; ++i)
-    if (LAruleno[state_table[stateno]->lookaheadsp + i] == ruleno)
+  for (i = 0; i < state->nlookaheads; ++i)
+    if (LAruleno[state->lookaheadsp + i] == ruleno)
       break;
 
-  assert (LAruleno[state_table[stateno]->lookaheadsp + i] == ruleno);
+  assert (LAruleno[state->lookaheadsp + i] == ruleno);
 
   sp = XCALLOC (shorts, 1);
-  sp->next = lookback[state_table[stateno]->lookaheadsp + i];
+  sp->next = lookback[state->lookaheadsp + i];
   sp->value = gotono;
-  lookback[state_table[stateno]->lookaheadsp + i] = sp;
+  lookback[state->lookaheadsp + i] = sp;
 }
 
 
@@ -417,7 +417,6 @@ build_relations (void)
   for (i = 0; i < ngotos; i++)
     {
       int nedges = 0;
-      int state1 = from_state[i];
       int symbol1 = state_table[to_state[i]]->accessing_symbol;
       short *rulep;
 
@@ -425,26 +424,26 @@ build_relations (void)
        {
          int done;
          int length = 1;
-         int stateno = state1;
          short *rp;
-         states[0] = state1;
+         state_t *state = state_table[from_state[i]];
+         states[0] = state->number;
 
          for (rp = ritem + rule_table[*rulep].rhs; *rp > 0; rp++)
            {
-             shifts *sp = state_table[stateno]->shifts;
+             shifts *sp = state->shifts;
              int j;
              for (j = 0; j < sp->nshifts; j++)
                {
-                 stateno = sp->shifts[j];
-                 if (state_table[stateno]->accessing_symbol == *rp)
+                 state = state_table[sp->shifts[j]];
+                 if (state->accessing_symbol == *rp)
                    break;
                }
 
-             states[length++] = stateno;
+             states[length++] = state->number;
            }
 
-         if (!state_table[stateno]->consistent)
-           add_lookback_edge (stateno, *rulep, i);
+         if (!state->consistent)
+           add_lookback_edge (state, *rulep, i);
 
          length--;
          done = 0;
@@ -455,8 +454,7 @@ build_relations (void)
              /* JF added rp>=ritem &&   I hope to god its right! */
              if (rp >= ritem && ISVAR (*rp))
                {
-                 stateno = states[--length];
-                 edge[nedges++] = map_goto (stateno, *rp);
+                 edge[nedges++] = map_goto (states[--length], *rp);
                  if (nullable[*rp])
                    done = 0;
                }