]> git.saurik.com Git - bison.git/blobdiff - src/symlist.c
More changes to pacify C++ compilers.
[bison.git] / src / symlist.c
index 4ae5f0171d489abb275cecfa04cae1dee4ac2a2e..106db46cb2f5f662f0fcd3937fc4fd8356334b8d 100644 (file)
@@ -1,5 +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.
 
 
    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 "system.h"
+
+#include "complain.h"
 #include "symlist.h"
 
 
-/*----------------------------------------------.
-| Create a list containing SYMBOL at LOCATION.  |
-`----------------------------------------------*/
+/*--------------------------------------.
+| Create a list containing SYM at LOC.  |
+`--------------------------------------*/
 
-symbol_list_t *
-symbol_list_new (symbol_t *sym, location_t location)
+symbol_list *
+symbol_list_new (symbol *sym, location loc)
 {
-  symbol_list_t *res = XMALLOC (symbol_list_t, 1);
+  symbol_list *res = xmalloc (sizeof *res);
   res->next = NULL;
   res->sym = sym;
-  res->location = location;
+  res->location = loc;
   res->action = NULL;
   res->ruleprec = NULL;
+  res->dprec = 0;
+  res->merger = 0;
   return res;
 }
 
 
-/*-----------------------------------------.
-| Prepend SYMBOL at LOCATION to the LIST.  |
-`-----------------------------------------*/
+/*------------------.
+| 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)
+       fputc (' ', f);
+    }
+}
+
+
+/*---------------------------------.
+| Prepend SYM at LOC to the LIST.  |
+`---------------------------------*/
 
-symbol_list_t *
-symbol_list_prepend (symbol_list_t *list,
-                    symbol_t *symbol, location_t location)
+symbol_list *
+symbol_list_prepend (symbol_list *list, symbol *sym, location loc)
 {
-  symbol_list_t *res = symbol_list_new (symbol, location);
+  symbol_list *res = symbol_list_new (sym, loc);
   res->next = list;
   return res;
 }
@@ -58,30 +78,42 @@ symbol_list_prepend (symbol_list_t *list,
 `-------------------------------------------------*/
 
 void
-symbol_list_free (symbol_list_t *list)
+symbol_list_free (symbol_list *list)
+{
+  LIST_FREE (symbol_list, list);
+}
+
+
+/*--------------------.
+| Return its length.  |
+`--------------------*/
+
+unsigned int
+symbol_list_length (symbol_list *list)
 {
-  LIST_FREE (symbol_list_t, list);
+  int res = 0;
+  for (/* Nothing. */; list; list = list->next)
+    ++res;
+  return res;
 }
 
 
 /*--------------------------------------------------------------.
 | Get the data type (alternative in the union) of the value for |
-| symbol N in rule RULE.                                        |
+| symbol N in symbol list RP.                                   |
 `--------------------------------------------------------------*/
 
-char *
-symbol_list_n_type_name_get (symbol_list_t *rule, location_t location, int n)
+uniqstr
+symbol_list_n_type_name_get (symbol_list *rp, location loc, int n)
 {
   int i;
-  symbol_list_t *rp;
 
   if (n < 0)
     {
-      complain_at (location, _("invalid $ value"));
+      complain_at (loc, _("invalid $ value: $%d"), n);
       return NULL;
     }
 
-  rp = rule;
   i = 0;
 
   while (i < n)
@@ -89,7 +121,7 @@ symbol_list_n_type_name_get (symbol_list_t *rule, location_t location, int n)
       rp = rp->next;
       if (rp == NULL || rp->sym == NULL)
        {
-         complain_at (location, _("invalid $ value"));
+         complain_at (loc, _("invalid $ value: $%d"), n);
          return NULL;
        }
       ++i;