[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
goto-number patches for lalr.c, lalr.h, tables.c
From: |
Paul Eggert |
Subject: |
goto-number patches for lalr.c, lalr.h, tables.c |
Date: |
Tue, 07 Dec 2004 21:57:17 -0800 |
User-agent: |
Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux) |
I mentioned a while ago that I had some goto-number-related patches
for lalr.c, for the unlikely (and untested) case where Bison has more
than 2**31 goto numbers. Here they are: I installed them.
2004-12-07 Paul Eggert <address@hidden>
* src/lalr.h (GOTO_NUMBER_MAXIMUM): New macro.
* src/lalr.c (set_goto_map): Don't allow ngotos to equal
GOTO_NUMBER_MAXIMUM, since we occasionally compute
ngotos + 1 without checking for overflow.
(build_relations): Use END_NODE, not -1, to denote end of edges.
* src/lalr.c (set_goto_map, map_goto, initialize_F, add_loopback_edge,
build_relations): Use goto_number, not int, for goto numbers.
* src/tables.c (save_column, default_goto): Likewise.
Index: src/lalr.h
===================================================================
RCS file: /cvsroot/bison/bison/src/lalr.h,v
retrieving revision 1.30
diff -p -u -r1.30 lalr.h
--- src/lalr.h 22 Oct 2004 23:14:00 -0000 1.30
+++ src/lalr.h 8 Dec 2004 05:47:17 -0000
@@ -57,6 +57,7 @@ void lalr_free (void);
TO_STATE of the first of them. */
typedef size_t goto_number;
+# define GOTO_NUMBER_MAXIMUM ((goto_number) -1)
extern goto_number *goto_map;
extern state_number *from_state;
Index: src/lalr.c
===================================================================
RCS file: /cvsroot/bison/bison/src/lalr.c,v
retrieving revision 1.100
diff -p -u -r1.100 lalr.c
--- src/lalr.c 22 Nov 2004 21:05:25 -0000 1.100
+++ src/lalr.c 8 Dec 2004 05:47:17 -0000
@@ -91,14 +91,17 @@ set_goto_map (void)
for (i = sp->num - 1; i >= 0 && TRANSITION_IS_GOTO (sp, i); --i)
{
ngotos++;
- if (! ngotos)
+
+ /* Abort if (ngotos + 1) would overflow. */
+ if (ngotos == GOTO_NUMBER_MAXIMUM)
abort ();
+
goto_map[TRANSITION_SYMBOL (sp, i) - ntokens]++;
}
}
{
- int k = 0;
+ goto_number k = 0;
int i;
for (i = ntokens; i < nsyms; i++)
{
@@ -122,7 +125,7 @@ set_goto_map (void)
int i;
for (i = sp->num - 1; i >= 0 && TRANSITION_IS_GOTO (sp, i); --i)
{
- int k = temp_map[TRANSITION_SYMBOL (sp, i) - ntokens]++;
+ goto_number k = temp_map[TRANSITION_SYMBOL (sp, i) - ntokens]++;
from_state[k] = s;
to_state[k] = sp->states[i]->number;
}
@@ -137,12 +140,12 @@ set_goto_map (void)
| Map a state/symbol pair into its numeric representation. |
`----------------------------------------------------------*/
-static int
+static goto_number
map_goto (state_number s0, symbol_number sym)
{
- int high;
- int low;
- int middle;
+ goto_number high;
+ goto_number low;
+ goto_number middle;
state_number s;
low = goto_map[sym - ntokens];
@@ -169,9 +172,9 @@ initialize_F (void)
{
goto_number **reads = CALLOC (reads, ngotos);
goto_number *edge = CALLOC (edge, ngotos + 1);
- int nedges = 0;
+ goto_number nedges = 0;
- int i;
+ goto_number i;
F = bitsetv_create (ngotos, ntokens, BITSET_FIXED);
@@ -195,7 +198,7 @@ initialize_F (void)
{
CALLOC (reads[i], nedges + 1);
memcpy (reads[i], edge, nedges * sizeof (edge[0]));
- reads[i][nedges] = -1;
+ reads[i][nedges] = END_NODE;
nedges = 0;
}
}
@@ -211,7 +214,7 @@ initialize_F (void)
static void
-add_lookback_edge (state *s, rule *r, int gotono)
+add_lookback_edge (state *s, rule *r, goto_number gotono)
{
int ri = state_reduction_find (s, r);
goto_list *sp = MALLOC (sp, 1);
@@ -227,7 +230,7 @@ build_relations (void)
{
goto_number *edge = CALLOC (edge, ngotos + 1);
state_number *states1 = CALLOC (states1, ritem_longest_rhs () + 1);
- int i;
+ goto_number i;
CALLOC (includes, ngotos);
@@ -279,7 +282,7 @@ build_relations (void)
CALLOC (includes[i], nedges + 1);
for (j = 0; j < nedges; j++)
includes[i][j] = edge[j];
- includes[i][nedges] = -1;
+ includes[i][nedges] = END_NODE;
}
}
@@ -294,7 +297,7 @@ build_relations (void)
static void
compute_FOLLOWS (void)
{
- int i;
+ goto_number i;
relation_digraph (includes, ngotos, &F);
Index: src/tables.c
===================================================================
RCS file: /cvsroot/bison/bison/src/tables.c,v
retrieving revision 1.22
diff -p -u -r1.22 tables.c
--- src/tables.c 22 Nov 2004 21:05:25 -0000 1.22
+++ src/tables.c 8 Dec 2004 05:47:17 -0000
@@ -471,7 +471,7 @@ token_actions (void)
static void
save_column (symbol_number sym, state_number default_state)
{
- int i;
+ goto_number i;
base_number *sp;
base_number *sp1;
base_number *sp2;
@@ -515,7 +515,7 @@ static state_number
default_goto (symbol_number sym, short int state_count[])
{
state_number s;
- int i;
+ goto_number i;
goto_number m = goto_map[sym - ntokens];
goto_number n = goto_map[sym - ntokens + 1];
state_number default_state = -1;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- goto-number patches for lalr.c, lalr.h, tables.c,
Paul Eggert <=