[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/2] symbol: provide an easy means to compare them in source orde
From: |
Akim Demaille |
Subject: |
[PATCH 1/2] symbol: provide an easy means to compare them in source order |
Date: |
Tue, 10 Dec 2013 08:32:57 +0100 |
* src/symtab.c (symbols_sort): New.
(user_token_number_redeclaration): Taken from here.
---
src/symtab.c | 34 +++++++++++++++++++++++-----------
1 file changed, 23 insertions(+), 11 deletions(-)
diff --git a/src/symtab.c b/src/symtab.c
index 1c2372c..1b44611 100644
--- a/src/symtab.c
+++ b/src/symtab.c
@@ -100,6 +100,28 @@ symbol_new (uniqstr tag, location loc)
return res;
}
+/* If needed, swap first and second so that first has the earliest
+ location (according to location_cmp).
+
+ Many symbol features (e.g., user token numbers) are not assigned
+ during the parsing, but in a second step, via a traversal of the
+ symbol table sorted on tag.
+
+ However, error messages make more sense if we keep the first
+ declaration first.
+*/
+
+static
+void symbols_sort (symbol **first, symbol **second)
+{
+ if (0 < location_cmp ((*first)->location, (*second)->location))
+ {
+ symbol* tmp = *first;
+ *first = *second;
+ *second = tmp;
+ }
+}
+
char const *
code_props_type_string (code_props_type kind)
{
@@ -587,17 +609,7 @@ static void
user_token_number_redeclaration (int num, symbol *first, symbol *second)
{
unsigned i = 0;
- /* User token numbers are not assigned during the parsing, but in a
- second step, via a traversal of the symbol table sorted on tag.
-
- However, error messages make more sense if we keep the first
- declaration first. */
- if (location_cmp (first->location, second->location) > 0)
- {
- symbol* tmp = first;
- first = second;
- second = tmp;
- }
+ symbols_sort (&first, &second);
complain_indent (&second->location, complaint, &i,
_("user token number %d redeclaration for %s"),
num, second->tag);
--
1.8.4.3