deterministic user-token-number redeclaration errors.

Address nondeterminism reported by Joel E. Denny.
http://lists.gnu.org/archive/html/bison-patches/2009-05/msg00023.html

	* src/uniqstr.h: Comment changes.
	* src/location.h (boundary_cmp, location_cmp): New.
	* src/symtab.c (user_token_number_redeclaration): New.
	(symbol_translation): Use it.
	* tests/input.at (Numbered tokens): Adjust the expected output.
This commit is contained in:
Akim Demaille
2009-06-03 23:15:38 +02:00
parent 796a2b0ab0
commit 12cf133f34
5 changed files with 67 additions and 9 deletions

View File

@@ -55,6 +55,19 @@ boundary_set (boundary *b, const char *f, int l, int c)
b->column = c;
}
/* Return -1, 0, 1, depending whether a is before, equal, or
after b. */
static inline int
boundary_cmp (boundary a, boundary b)
{
int res = strcmp (a.file, b.file);
if (!res)
res = a.line - b.line;
if (!res)
res = a.column - b.column;
return res;
}
/* Return nonzero if A and B are equal boundaries. */
static inline bool
equal_boundaries (boundary a, boundary b)
@@ -87,6 +100,17 @@ void location_compute (location *loc,
void location_print (FILE *out, location loc);
/* Return -1, 0, 1, depending whether a is before, equal, or
after b. */
static inline int
location_cmp (location a, location b)
{
int res = boundary_cmp (a.start, b.start);
if (!res)
res = boundary_cmp (a.end, b.end);
return res;
}
/* LOC_STR must be formatted as `file:line.column', it will be modified. */
void boundary_set_from_string (boundary *bound, char *loc_str);