[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/5] symbols: set tag_seen when assigning a type to symbols
From: |
Akim Demaille |
Subject: |
[PATCH 1/5] symbols: set tag_seen when assigning a type to symbols |
Date: |
Sun, 16 Dec 2018 10:45:37 +0100 |
* src/reader.h, src/reader.c (tag_seen): Move to...
* src/symtab.h, src/symtab.c: here.
(symbol_type_set): Set it to true.
* src/parse-gram.y: Don't.
---
src/parse-gram.y | 4 +---
src/reader.c | 3 ---
src/reader.h | 3 ---
src/symtab.c | 14 ++++++--------
src/symtab.h | 2 ++
5 files changed, 9 insertions(+), 17 deletions(-)
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;
/*-------------------.
--
2.19.2