diff --git a/src/parse-gram.y b/src/parse-gram.y index 279b6166..71ef183d 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -417,7 +417,6 @@ symbol_declaration: } | "%type" TAG symbols.1 { - tag_seen = true; for (symbol_list *list = $3; list; list = list->next) symbol_type_set (list->content.sym, $2, @2); symbol_list_free ($3); @@ -446,7 +445,7 @@ precedence_declarator: tag.opt: %empty { $$ = NULL; } -| TAG { $$ = $1; tag_seen = true; } +| TAG { $$ = $1; } ; /* Just like symbols.1 but accept INT for the sake of POSIX. */ @@ -496,7 +495,6 @@ symbol_def: TAG { current_type = $1; - tag_seen = true; } | id int.opt[num] string_as_id.opt[alias] { diff --git a/src/reader.c b/src/reader.c index 985647a5..abc3ca7e 100644 --- a/src/reader.c +++ b/src/reader.c @@ -45,9 +45,6 @@ merger_list *merge_functions; /* Was %union seen? */ bool union_seen = false; -/* Was a tag seen? */ -bool tag_seen = false; - /* Should rules have a default precedence? */ bool default_prec = true; diff --git a/src/reader.h b/src/reader.h index 76e42dc3..be327f88 100644 --- a/src/reader.h +++ b/src/reader.h @@ -69,9 +69,6 @@ extern merger_list *merge_functions; /* Was %union seen? */ extern bool union_seen; -/* Was a tag seen? */ -extern bool tag_seen; - /* Should rules have a default precedence? */ extern bool default_prec; diff --git a/src/symtab.c b/src/symtab.c index 7bc604b7..9dbc79f6 100644 --- a/src/symtab.c +++ b/src/symtab.c @@ -46,17 +46,14 @@ symbol *accept = NULL; symbol *startsymbol = NULL; location startsymbol_location; -/*---------------------------. -| Precedence relation graph. | -`---------------------------*/ - +/* Precedence relation graph. */ static symgraph **prec_nodes; -/*-----------------------------------. -| Store which associativity is used. | -`-----------------------------------*/ +/* Store which associativity is used. */ +static bool *used_assoc = NULL; + +bool tag_seen = false; -bool *used_assoc = NULL; /*--------------------------. | Create a new sym_content. | @@ -334,6 +331,7 @@ symbol_type_set (symbol *sym, uniqstr type_name, location loc) { if (type_name) { + tag_seen = true; if (sym->content->type_name) complain_symbol_redeclared (sym, "%type", sym->content->type_location, loc); diff --git a/src/symtab.h b/src/symtab.h index 63cc122a..a63b904e 100644 --- a/src/symtab.h +++ b/src/symtab.h @@ -248,6 +248,8 @@ extern symbol *startsymbol; /** The location of the \c \%start declaration. */ extern location startsymbol_location; +/** Whether a symbol declared with a type tag. */ +extern bool tag_seen; /*-------------------.