]> git.saurik.com Git - bison.git/blobdiff - src/reader.c
Enable declaration of default %printer/%destructor. Make the parser
[bison.git] / src / reader.c
index e58b03279ec5a36110e6bc7e4eac5120d10fcd48..5084618ffb4a5ba465db4dce995620e32ea84574 100644 (file)
@@ -45,7 +45,10 @@ static bool start_flag = false;
 merger_list *merge_functions;
 
 /* Was %union seen?  */
-bool typed = false;
+bool union_seen = false;
+
+/* Was a tag seen?  */
+bool tag_seen = false;
 
 /* Should rules have a default precedence?  */
 bool default_prec = true;
@@ -148,11 +151,11 @@ record_merge_function_type (int merger, uniqstr type, location declaration_loc)
   assert (merge_function != NULL && merger_find == merger);
   if (merge_function->type != NULL && !UNIQSTR_EQ (merge_function->type, type))
     {
-      warn_at (declaration_loc,
-              _("result type clash on merge function `%s': <%s> != <%s>"),
-              merge_function->name, type, merge_function->type);
-      warn_at (merge_function->type_declaration_location,
-              _("previous declaration"));
+      complain_at (declaration_loc,
+                  _("result type clash on merge function `%s': <%s> != <%s>"),
+                  merge_function->name, type, merge_function->type);
+      complain_at (merge_function->type_declaration_location,
+                  _("previous declaration"));
     }
   merge_function->type = uniqstr_new (type);
   merge_function->type_declaration_location = declaration_loc;
@@ -256,7 +259,7 @@ grammar_current_rule_begin (symbol *lhs, location loc)
 static bool
 symbol_should_be_used (symbol_list const *s)
 {
-  return (s->sym->destructor
+  return (symbol_destructor_get (s->sym)
          || (s->midrule && s->midrule->used));
 }
 
@@ -485,7 +488,11 @@ packgram (void)
         rule.  Thus, the midrule actions have already been scanned in order to
         set `used' flags for this rule's rhs, so grammar_rule_check will work
         properly.  */
-      grammar_rule_check (p);
+      /* Don't check the generated rule 0.  It has no action, so some rhs
+        symbols may appear unused, but the parsing algorithm ensures that
+        %destructor's are invoked appropriately.  */
+      if (p != grammar)
+       grammar_rule_check (p);
 
       for (p = p->next; p && p->sym; p = p->next)
        {