From 867a3e0085abd0281d41a7a1a56dea143dadf4eb Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Tue, 12 Jul 2005 13:41:58 +0000 Subject: [PATCH] * src/symtab.h, src/symtab.c (symbol_print): New. * src/symlist.h, src/symlist.c (symbol_list_print): New. * src/symlist.c (symbol_list_n_type_name_get): Report the culprit. --- ChangeLog | 8 +++++++- src/symlist.c | 19 ++++++++++++++++--- src/symlist.h | 5 ++++- src/symtab.c | 19 +++++++++++++++++++ src/symtab.h | 4 +++- 5 files changed, 49 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2ce92bec..e8c2016a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,12 @@ 2005-07-12 Akim Demaille - * data/glr.c (b4_syncline): Fix (swap) the definition of + * src/symtab.h, src/symtab.c (symbol_print): New. + * src/symlist.h, src/symlist.c (symbol_list_print): New. + * src/symlist.c (symbol_list_n_type_name_get): Report the culprit. + +2005-07-12 Akim Demaille + + * data/glr.c (b4_syncline): Fix (swap) the definitions of b4_at_dollar and b4_dollar_dollar. 2005-07-11 Paul Eggert diff --git a/src/symlist.c b/src/symlist.c index 40bac872..36156261 100644 --- a/src/symlist.c +++ b/src/symlist.c @@ -1,6 +1,6 @@ /* Lists of symbols for Bison - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2005 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -44,6 +44,18 @@ symbol_list_new (symbol *sym, location loc) } +/*------------------. +| Print this list. | +`------------------*/ + +void +symbol_list_print (FILE *f, symbol_list *l) +{ + for (/* Nothing. */; l; l = l->next) + symbol_print (f, l->sym); +} + + /*---------------------------------. | Prepend SYM at LOC to the LIST. | `---------------------------------*/ @@ -94,7 +106,7 @@ symbol_list_n_type_name_get (symbol_list *rp, location loc, int n) if (n < 0) { - complain_at (loc, _("invalid $ value")); + complain_at (loc, _("invalid $ value: $%d"), n); return NULL; } @@ -105,7 +117,8 @@ symbol_list_n_type_name_get (symbol_list *rp, location loc, int n) rp = rp->next; if (rp == NULL || rp->sym == NULL) { - complain_at (loc, _("invalid $ value")); + complain_at (loc, _("invalid $ value: $%d"), n); + fprintf (stderr, "\n"); return NULL; } ++i; diff --git a/src/symlist.h b/src/symlist.h index aea5c144..135a8cd1 100644 --- a/src/symlist.h +++ b/src/symlist.h @@ -1,6 +1,6 @@ /* Lists of symbols for Bison - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2005 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -44,6 +44,9 @@ typedef struct symbol_list /* Create a list containing SYM at LOC. */ symbol_list *symbol_list_new (symbol *sym, location loc); +/* Print it. */ +void symbol_list_print (FILE *f, symbol_list *l); + /* Prepend SYM at LOC to the LIST. */ symbol_list *symbol_list_prepend (symbol_list *list, symbol *sym, diff --git a/src/symtab.c b/src/symtab.c index aabf3343..84e59e92 100644 --- a/src/symtab.c +++ b/src/symtab.c @@ -74,6 +74,25 @@ symbol_new (uniqstr tag, location loc) } +/*-----------------. +| Print a symbol. | +`-----------------*/ + +#define SYMBOL_ATTR_PRINT(Attr) \ + if (s->Attr) \ + fprintf (stderr, " %s { %s }", #Attr, s->Attr) + +void +symbol_print (FILE *f, symbol *s) +{ + fprintf (stderr, "\"%s\"", s->tag); + SYMBOL_ATTR_PRINT (type_name); + SYMBOL_ATTR_PRINT (destructor); + SYMBOL_ATTR_PRINT (printer); +} + +#undef SYMBOL_ATTR_PRINT + /*------------------------------------------------------------------. | Complain that S's WHAT is redeclared at SECOND, and was first set | | at FIRST. | diff --git a/src/symtab.h b/src/symtab.h index fe06297a..725b6cb8 100644 --- a/src/symtab.h +++ b/src/symtab.h @@ -1,6 +1,6 @@ /* Definitions for symtab.c and callers, part of Bison. - Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2004 + Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -91,6 +91,8 @@ struct symbol /* Undefined internal token number. */ #define NUMBER_UNDEFINED (-1) +/* Print a symbol (for debugging). */ +void symbol_print (FILE *f, symbol *s); /* Fetch (or create) the symbol associated to KEY. */ symbol *symbol_get (const char *key, location loc); -- 2.47.2