]> git.saurik.com Git - bison.git/blobdiff - src/symlist.c
Warn about unused values.
[bison.git] / src / symlist.c
index 9d46d8a522dda81b83f525c807040fc54343d05a..ed42ce1e7747994b05ed569cf41c5289cff3aba0 100644 (file)
@@ -1,6 +1,6 @@
 /* Lists of symbols for Bison
 
 /* 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.
 
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    You should have received a copy of the GNU General Public License
    along with Bison; see the file COPYING.  If not, write to
 
    You should have received a copy of the GNU General Public License
    along with Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 
+#include <config.h>
 #include "system.h"
 
 #include "complain.h"
 #include "system.h"
 
 #include "complain.h"
 symbol_list *
 symbol_list_new (symbol *sym, location loc)
 {
 symbol_list *
 symbol_list_new (symbol *sym, location loc)
 {
-  symbol_list *res = XMALLOC (symbol_list, 1);
-  res->next = NULL;
+  symbol_list *res = xmalloc (sizeof *res);
+
   res->sym = sym;
   res->location = loc;
   res->sym = sym;
   res->location = loc;
+
   res->action = NULL;
   res->action = NULL;
+  res->used = false;
+
   res->ruleprec = NULL;
   res->dprec = 0;
   res->merger = 0;
   res->ruleprec = NULL;
   res->dprec = 0;
   res->merger = 0;
+
+  res->next = NULL;
+
   return res;
 }
 
 
   return res;
 }
 
 
+/*------------------.
+| Print this list.  |
+`------------------*/
+
+void
+symbol_list_print (symbol_list *l, FILE *f)
+{
+  for (/* Nothing. */; l && l->sym; l = l->next)
+    {
+      symbol_print (l->sym, f);
+      if (l && l->sym)
+       fprintf (f, ", ");
+    }
+}
+
+
 /*---------------------------------.
 | Prepend SYM at LOC to the LIST.  |
 `---------------------------------*/
 /*---------------------------------.
 | Prepend SYM at LOC to the LIST.  |
 `---------------------------------*/
@@ -73,43 +96,64 @@ symbol_list_free (symbol_list *list)
 `--------------------*/
 
 unsigned int
 `--------------------*/
 
 unsigned int
-symbol_list_length (symbol_list *list)
+symbol_list_length (symbol_list *l)
 {
   int res = 0;
 {
   int res = 0;
-  for (/* Nothing. */; list; list = list->next)
+  for (/* Nothing. */; l; l = l->next)
     ++res;
   return res;
 }
 
 
     ++res;
   return res;
 }
 
 
-/*--------------------------------------------------------------.
-| Get the data type (alternative in the union) of the value for |
-| symbol N in symbol list RP.                                   |
-`--------------------------------------------------------------*/
+/*--------------------------------.
+| Get symbol N in symbol list L.  |
+`--------------------------------*/
 
 
-uniqstr
-symbol_list_n_type_name_get (symbol_list *rp, location loc, int n)
+symbol_list *
+symbol_list_n_get (symbol_list *l, int n)
 {
   int i;
 
   if (n < 0)
 {
   int i;
 
   if (n < 0)
+    return NULL;
+
+  for (i = 0; i < n; ++i)
     {
     {
-      complain_at (loc, _("invalid $ value"));
-      return NULL;
+      l = l->next;
+      if (l == NULL || l->sym == NULL)
+       return NULL;
     }
 
     }
 
-  i = 0;
+  return l;
+}
+
+
+/*--------------------------------------------------------------.
+| Get the data type (alternative in the union) of the value for |
+| symbol N in symbol list L.                                    |
+`--------------------------------------------------------------*/
 
 
-  while (i < n)
+uniqstr
+symbol_list_n_type_name_get (symbol_list *l, location loc, int n)
+{
+  l = symbol_list_n_get (l, n);
+  if (!l)
     {
     {
-      rp = rp->next;
-      if (rp == NULL || rp->sym == NULL)
-       {
-         complain_at (loc, _("invalid $ value"));
-         return NULL;
-       }
-      ++i;
+      complain_at (loc, _("invalid $ value: $%d"), n);
+      return NULL;
     }
     }
+  return l->sym->type_name;
+}
 
 
-  return rp->sym->type_name;
+
+/*----------------------------------------.
+| The symbol N in symbol list L is USED.  |
+`----------------------------------------*/
+
+void
+symbol_list_n_used_set (symbol_list *l, int n, bool used)
+{
+  l = symbol_list_n_get (l, n);
+  if (l)
+    l->used = used;
 }
 }