]> git.saurik.com Git - bison.git/blobdiff - src/reader.c
(nullable_compute): Use abort rather than assert.
[bison.git] / src / reader.c
index e6b747644d9e34e88539764e7b8a40efad61bfed..5c65d020f47715648e90b64be7acdd7bb95f39d9 100644 (file)
@@ -84,8 +84,9 @@ prologue_augment (const char *prologue, location_t location)
 `----------------------*/
 
 void
-epilogue_set (const char *epilogue, location_t location)
+epilogue_augment (const char *epilogue, location_t location)
 {
+  char *extension = NULL;
   obstack_fgrow1 (&muscle_obstack, "]b4_syncline([[%d]], [[",
                  location.first_line);
   MUSCLE_OBSTACK_SGROW (&muscle_obstack,
@@ -93,21 +94,22 @@ epilogue_set (const char *epilogue, location_t location)
   obstack_sgrow (&muscle_obstack, "]])[\n");
   obstack_sgrow (&muscle_obstack, epilogue);
   obstack_1grow (&muscle_obstack, 0);
-  muscle_insert ("epilogue", obstack_finish (&muscle_obstack));
+  extension = obstack_finish (&muscle_obstack);
+  muscle_grow ("epilogue", extension, "");
+  obstack_free (&muscle_obstack, extension);
 }
 
 
 \f
 
- /*-------------------------------------------------------------------.
+/*-------------------------------------------------------------------.
 | Return the merger index for a merging function named NAME, whose   |
 | arguments have type TYPE.  Records the function, if new, in        |
-| merger_list.                                                      |
+| MERGER_LIST.                                                      |
 `-------------------------------------------------------------------*/
 
 static int
-get_merge_function (const char* name, const char* type,
-                   location_t loc)
+get_merge_function (struniq_t name, struniq_t type, location_t loc)
 {
   merger_list *syms;
   merger_list head;
@@ -117,21 +119,21 @@ get_merge_function (const char* name, const char* type,
     return 0;
 
   if (type == NULL)
-    type = "";
+    type = struniq_new ("");
 
   head.next = merge_functions;
   for (syms = &head, n = 1; syms->next != NULL; syms = syms->next, n += 1)
-    if (strcmp (name, syms->next->name) == 0)
+    if (STRUNIQ_EQ (name, syms->next->name))
       break;
   if (syms->next == NULL)
     {
       syms->next = XMALLOC (merger_list, 1);
-      syms->next->name = xstrdup (name);
-      syms->next->type = xstrdup (type);
+      syms->next->name = struniq_new (name);
+      syms->next->type = struniq_new (type);
       syms->next->next = NULL;
       merge_functions = head.next;
     }
-  else if (strcmp (type, syms->next->type) != 0)
+  else if (!STRUNIQ_EQ (type, syms->next->type))
     warn_at (loc, _("result type clash on merge function %s: <%s> != <%s>"),
             name, type, syms->next->type);
   return n;
@@ -257,7 +259,7 @@ grammar_current_rule_check (void)
   if (first_rhs)
     {
       const char *rhs_type = first_rhs->type_name ? first_rhs->type_name : "";
-      if (strcmp (lhs_type, rhs_type))
+      if (!STRUNIQ_EQ (lhs_type, rhs_type))
        complain_at (current_rule->location,
                     _("type clash on default action: <%s> != <%s>"),
                     lhs_type, rhs_type);
@@ -358,7 +360,7 @@ grammar_current_rule_dprec_set (int dprec, location_t location)
    rule. */
 
 void
-grammar_current_rule_merge_set (const char* name, location_t location)
+grammar_current_rule_merge_set (struniq_t name, location_t location)
 {
   if (! glr_parser)
     warn_at (location, _("%s affects only GLR parsers"), "%merge");
@@ -491,7 +493,7 @@ reader (void)
   obstack_init (&pre_prologue_obstack);
   obstack_init (&post_prologue_obstack);
 
-  finput = xfopen (infile, "r");
+  finput = xfopen (grammar_file, "r");
   gram_in = finput;
 
   gram__flex_debug = trace_flag & trace_scan;
@@ -537,10 +539,7 @@ reader (void)
     grammar = p;
   }
 
-  if (SYMBOL_NUMBER_MAX < nsyms)
-    fatal (_("too many symbols (tokens plus nonterminals); maximum %d"),
-          SYMBOL_NUMBER_MAX);
-
+  assert (nsyms <= SYMBOL_NUMBER_MAX);
   assert (nsyms == ntokens + nvars);
 
   xfclose (finput);