* src/symtab.c (symbol_user_token_number_set): Don't complain when
authorAkim Demaille <akim@epita.fr>
Mon, 10 Jun 2002 08:38:10 +0000 (08:38 +0000)
committerAkim Demaille <akim@epita.fr>
Mon, 10 Jun 2002 08:38:10 +0000 (08:38 +0000)
assigning twice the same user number to a token, so that we can
use it in...
* src/lex.c (lex): here.
Also use `symbol_class_set' instead of hand written code.
* src/reader.c (parse_assoc_decl): Likewise.

ChangeLog
src/lex.c
src/reader.c
src/symtab.c

index 77ce89f..d50b1e8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2002-06-10  Akim Demaille  <akim@epita.fr>
 
+       * src/symtab.c (symbol_user_token_number_set): Don't complain when
+       assigning twice the same user number to a token, so that we can
+       use it in...
+       * src/lex.c (lex): here.
+       Also use `symbol_class_set' instead of hand written code.
+       * src/reader.c (parse_assoc_decl): Likewise.
+
+2002-06-10  Akim Demaille  <akim@epita.fr>
+
        * src/symtab.c, src/symtab.c (symbol_class_set)
        (symbol_user_token_number_set): New.
        * src/reader.c (parse_token_decl): Use them.
index d43403c..62afbee 100644 (file)
--- a/src/lex.c
+++ b/src/lex.c
@@ -1,5 +1,6 @@
 /* Token-reader for Bison's input parser,
-   Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002
+   Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -364,13 +365,8 @@ lex (void)
        obstack_1grow (&token_obstack, '\0');
        token_buffer = obstack_finish (&token_obstack);
        symval = getsym (token_buffer);
-       if (symval->number == NUMBER_UNDEFINED)
-         {
-           symval->number = ntokens++;
-           symval->class = token_sym;
-           if (symval->user_token_number == USER_NUMBER_UNDEFINED)
-             symval->user_token_number = code;
-         }
+       symbol_class_set (symval, token_sym);
+       symbol_user_token_number_set (symval, code);
        return tok_identifier;
       }
 
@@ -378,7 +374,7 @@ lex (void)
       /* parse the literal string token and treat as an identifier */
 
       {
-       int code;               /* ignored here */
+       int code;
 
        obstack_1grow (&token_obstack, '\"');
        /* Read up to and including ".  */
@@ -392,12 +388,7 @@ lex (void)
        token_buffer = obstack_finish (&token_obstack);
 
        symval = getsym (token_buffer);
-       if (symval->number == NUMBER_UNDEFINED)
-         {
-           symval->number = ntokens++;
-           symval->class = token_sym;
-         }
-
+       symbol_class_set (symval, token_sym);
        return tok_identifier;
       }
 
index 5587c32..f2bc42e 100644 (file)
@@ -656,13 +656,7 @@ parse_assoc_decl (associativity assoc)
          break;
 
        case tok_identifier:
-         if (symval->class == nterm_sym)
-           complain (_("symbol %s redefined"), symval->tag);
-         if (symval->number == NUMBER_UNDEFINED)
-           {
-             symval->number = ntokens++;
-             symval->class = token_sym;
-           }
+         symbol_class_set (symval, token_sym);
          symbol_precedence_set (symval, lastprec, assoc);
          if (name)
            symbol_type_set (symval, name);
@@ -671,7 +665,7 @@ parse_assoc_decl (associativity assoc)
        case tok_number:
          if (prev == tok_identifier)
            {
-             symval->user_token_number = numval;
+             symbol_user_token_number_set (symval, numval);
            }
          else
            {
index c921133..1c45965 100644 (file)
@@ -115,7 +115,8 @@ symbol_user_token_number_set (symbol_t *symbol, int user_token_number)
 {
   assert (symbol->class == token_sym);
 
-  if (symbol->user_token_number != USER_NUMBER_UNDEFINED)
+  if (symbol->user_token_number != USER_NUMBER_UNDEFINED
+      && symbol->user_token_number != user_token_number)
     complain (_("redefining user token number of %s"), symbol->tag);
 
   symbol->user_token_number = user_token_number;