]> git.saurik.com Git - bison.git/blobdiff - src/symlist.h
gnulib: update
[bison.git] / src / symlist.h
index 03ffebef16572034acc847f03c7a5e78e9c98fe2..45cb79633f61a74ce75f78c1e023dc75c18b4af9 100644 (file)
@@ -1,6 +1,6 @@
 /* Lists of symbols for Bison
 
-   Copyright (C) 2002, 2005-2007, 2009-2012 Free Software Foundation,
+   Copyright (C) 2002, 2005-2007, 2009-2015 Free Software Foundation,
    Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -50,6 +50,9 @@ typedef struct symbol_list
   } content;
   location location;
 
+  /* Named reference. */
+  named_ref *named_ref;
+
   /* Proper location of the symbol, not all the rule */
   location sym_loc;
 
@@ -64,19 +67,26 @@ typedef struct symbol_list
   struct symbol_list *midrule_parent_rule;
   int midrule_parent_rhs_index;
 
+  /* ---------------------------------------------- */
+  /* Apply to the rule (attached to the LHS only).  */
+  /* ---------------------------------------------- */
+
+  /* Precedence/associativity.  */
+  symbol *ruleprec;
+
   /* The action is attached to the LHS of a rule, but action properties for
    * each RHS are also stored here.  */
   code_props action_props;
 
-  /* Precedence/associativity.  */
-  symbol *ruleprec;
+  /* The location of the first %empty for this rule, or \a
+     empty_location.  */
+  location percent_empty_loc;
+
   int dprec;
+  location dprec_location;
   int merger;
   location merger_declaration_location;
 
-  /* Named reference. */
-  named_ref *named_ref;
-
   /* The list.  */
   struct symbol_list *next;
 } symbol_list;
@@ -97,18 +107,24 @@ void symbol_list_syms_print (const symbol_list *l, FILE *f);
 /** Prepend \c node to \c list.  */
 symbol_list *symbol_list_prepend (symbol_list *list, symbol_list *node);
 
+/** Append \c node to \c list.  */
+symbol_list *symbol_list_append (symbol_list *list, symbol_list *node);
+
 /** Free \c list, but not the items it contains.  */
 void symbol_list_free (symbol_list *list);
 
 /** Return the length of \c l. */
 int symbol_list_length (symbol_list const *l);
 
-/** Get item \c n in symbol list \c l.  */
+/** Get item \c n in symbol list \c l.
+ ** \pre  0 <= n
+ ** \post res != NULL
+ **/
 symbol_list *symbol_list_n_get (symbol_list *l, int n);
 
 /* Get the data type (alternative in the union) of the value for
    symbol N in rule RULE.  */
-uniqstr symbol_list_n_type_name_get (symbol_list *l, location loc, int n);
+uniqstr symbol_list_n_type_name_get (symbol_list *l, int n);
 
 /* Check whether the node is a border element of a rule. */
 bool symbol_list_null (symbol_list *node);