]> git.saurik.com Git - bison.git/blobdiff - src/reader.c
(_AT_TEST_GLR_CXXTYPES): Do not include <assert.h>.
[bison.git] / src / reader.c
index e6b747644d9e34e88539764e7b8a40efad61bfed..5ed02b2e4971d0f9ed4a81517856b55e4ef514a4 100644 (file)
@@ -1,4 +1,4 @@
-/* Input parser for bison
+/* Input parser for Bison
    Copyright (C) 1984, 1986, 1989, 1992, 1998, 2000, 2001, 2002
    Free Software Foundation, Inc.
 
    Copyright (C) 1984, 1986, 1989, 1992, 1998, 2000, 2001, 2002
    Free Software Foundation, Inc.
 
@@ -84,8 +84,9 @@ prologue_augment (const char *prologue, location_t location)
 `----------------------*/
 
 void
 `----------------------*/
 
 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,
   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);
   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
 
 }
 
 
 \f
 
- /*-------------------------------------------------------------------.
+/*-------------------------------------------------------------------.
 | Return the merger index for a merging function named NAME, whose   |
 | arguments have type TYPE.  Records the function, if new, in        |
 | 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
 `-------------------------------------------------------------------*/
 
 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;
 {
   merger_list *syms;
   merger_list head;
@@ -117,21 +119,21 @@ get_merge_function (const char* name, const char* type,
     return 0;
 
   if (type == NULL)
     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)
 
   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);
       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;
     }
       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;
     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 (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);
        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
    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");
 {
   if (! glr_parser)
     warn_at (location, _("%s affects only GLR parsers"), "%merge");
@@ -450,7 +452,8 @@ packgram (void)
        p = p->next;
     }
 
        p = p->next;
     }
 
-  assert (itemno == nritems);
+  if (itemno != nritems)
+    abort ();
 
   if (trace_flag & trace_sets)
     ritem_print (stderr);
 
   if (trace_flag & trace_sets)
     ritem_print (stderr);
@@ -491,7 +494,7 @@ reader (void)
   obstack_init (&pre_prologue_obstack);
   obstack_init (&post_prologue_obstack);
 
   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;
   gram_in = finput;
 
   gram__flex_debug = trace_flag & trace_scan;
@@ -537,11 +540,8 @@ reader (void)
     grammar = p;
   }
 
     grammar = p;
   }
 
-  if (SYMBOL_NUMBER_MAX < nsyms)
-    fatal (_("too many symbols (tokens plus nonterminals); maximum %d"),
-          SYMBOL_NUMBER_MAX);
-
-  assert (nsyms == ntokens + nvars);
+  if (! (nsyms <= SYMBOL_NUMBER_MAX && nsyms == ntokens + nvars))
+    abort ();
 
   xfclose (finput);
 
 
   xfclose (finput);