From: Akim Demaille Date: Fri, 2 Nov 2001 15:27:11 +0000 (+0000) Subject: * src/symtab.h (SUNDEF): New. X-Git-Tag: before-m4-back-end~334 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/6b7e85b9940d4313ab2f1663a449fdcb8b61df4b * src/symtab.h (SUNDEF): New. * src/symtab.c (bucket_new): Init user_token_number to SUNDEF to stand for `uninitialized', instead of 0. * src/reader.c (packsymbols, parse_thong_decl): Adjust. * src/lex.c (lex): Adjust. * tests/calc.at (_AT_DATA_CALC_Y): Declare a token for EOF. Number it 0. Let yylex return it instead of a plain 0. Reported by Dick Streefland. --- diff --git a/ChangeLog b/ChangeLog index 85b90b7a..9d5f0f35 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2001-11-02 Akim Demaille + + * src/symtab.h (SUNDEF): New. + * src/symtab.c (bucket_new): Init user_token_number to SUNDEF to + stand for `uninitialized', instead of 0. + * src/reader.c (packsymbols, parse_thong_decl): Adjust. + * src/lex.c (lex): Adjust. + + * tests/calc.at (_AT_DATA_CALC_Y): Declare a token for EOF. + Number it 0. + Let yylex return it instead of a plain 0. + Reported by Dick Streefland. + 2001-11-02 Akim Demaille * tests/regression.at (Mixing %token styles): New test. diff --git a/src/lex.c b/src/lex.c index ec40c141..f09596e6 100644 --- a/src/lex.c +++ b/src/lex.c @@ -446,7 +446,7 @@ lex (void) token_buffer = obstack_finish (&token_obstack); symval = getsym (token_buffer); symval->class = token_sym; - if (!symval->user_token_number) + if (symval->user_token_number == SUNDEF) symval->user_token_number = code; return tok_identifier; } diff --git a/src/reader.c b/src/reader.c index 80ed485a..bbdb40ae 100644 --- a/src/reader.c +++ b/src/reader.c @@ -724,7 +724,6 @@ token_buffer); } prev = t; - } } @@ -852,7 +851,7 @@ parse_thong_decl (void) token_t token; struct bucket *symbol; char *typename = 0; - int usrtoknum = 0; + int usrtoknum = SUNDEF; token = lex (); /* fetch typename or first token */ if (token == tok_typename) @@ -1724,6 +1723,9 @@ token_translations_init (void) /* A token string alias? */ if (bp->user_token_number == SALIAS) continue; + + assert (bp->user_token_number != SUNDEF); + /* A token which translation has already been set? */ if (token_translations[bp->user_token_number] != 2) complain (_("tokens %s and %s both assigned number %d"), @@ -1810,7 +1812,7 @@ packsymbols (void) if (bp->class == token_sym) { - if (bp->user_token_number == 0) + if (bp->user_token_number == SUNDEF) bp->user_token_number = ++last_user_token_number; if (bp->user_token_number > max_user_token_number) max_user_token_number = bp->user_token_number; diff --git a/src/symtab.c b/src/symtab.c index 6e5d5ea9..455e74e2 100644 --- a/src/symtab.c +++ b/src/symtab.c @@ -1,5 +1,5 @@ /* Symbol table manager for Bison, - Copyright 1984, 1989, 2000 Free Software Foundation, Inc. + Copyright 1984, 1989, 2000, 2001 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -58,7 +58,7 @@ bucket_new (const char *tag, int hashval) res->value = 0; res->prec = 0; res->assoc = right_assoc; - res->user_token_number = 0; + res->user_token_number = SUNDEF; res->alias = NULL; res->class = unknown_sym; diff --git a/src/symtab.h b/src/symtab.h index 909b24f5..b98902e1 100644 --- a/src/symtab.h +++ b/src/symtab.h @@ -1,5 +1,5 @@ /* Definitions for symtab.c and callers, part of bison, - Copyright 1984, 1989, 1992, 2000 Free Software Foundation, Inc. + Copyright 1984, 1989, 1992, 2000, 2001 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -33,6 +33,7 @@ typedef enum nterm_sym /* non-terminal */ } symbol_class; +#define SUNDEF -1 /* For undefined user number. */ #define SALIAS -9991 /* for symbol generated with an alias */ typedef struct bucket diff --git a/tests/calc.at b/tests/calc.at index f1064634..a366cd85 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -64,7 +64,8 @@ static void yyungetc (int c); extern void perror (const char *s); %} -/* BISON Declarations */ +/* Bison Declarations */ +%token CALC_EOF 0 %token NUM %nonassoc '=' /* comparison */ @@ -204,7 +205,7 @@ yylex (void) /* Return end-of-file. */ if (c == EOF) - return 0; + return CALC_EOF; /* Return single chars. */ return c;