]> git.saurik.com Git - bison.git/blobdiff - src/main.c
Change @dircategory from "GNU programming tools" to "Software development".
[bison.git] / src / main.c
index e634f310fd69b02ca93dd2f94c88c3ee38938621..59402c3ea091652c6382072c9354e89190009027 100644 (file)
@@ -1,5 +1,6 @@
-/* Top level entry point of bison,
-   Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000, 2001, 2002
+/* Top level entry point of Bison.
+
+   Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000, 2001, 2002, 2004
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
 #include "system.h"
 
 
 #include "system.h"
-#include "bitset_stats.h"
-#include "bitset.h"
-#include "getargs.h"
-#include "symtab.h"
-#include "gram.h"
-#include "files.h"
+
+#include <bitset_stats.h>
+#include <bitset.h>
+#include <timevar.h>
+
+#include "LR0.h"
 #include "complain.h"
 #include "complain.h"
+#include "conflicts.h"
 #include "derives.h"
 #include "derives.h"
-#include "tables.h"
-#include "output.h"
-#include "reader.h"
+#include "files.h"
+#include "getargs.h"
+#include "gram.h"
 #include "lalr.h"
 #include "lalr.h"
-#include "reduce.h"
+#include "muscle_tab.h"
 #include "nullable.h"
 #include "nullable.h"
+#include "output.h"
 #include "print.h"
 #include "print.h"
-#include "LR0.h"
-#include "conflicts.h"
 #include "print_graph.h"
 #include "print_graph.h"
-#include "muscle_tab.h"
+#include "reader.h"
+#include "reduce.h"
+#include "symtab.h"
+#include "tables.h"
+#include "uniqstr.h"
 
 /* The name this program was run with, for messages.  */
 char *program_name;
 
 /* The name this program was run with, for messages.  */
 char *program_name;
@@ -51,12 +56,14 @@ main (int argc, char *argv[])
 {
   program_name = argv[0];
   setlocale (LC_ALL, "");
 {
   program_name = argv[0];
   setlocale (LC_ALL, "");
-  bindtextdomain (PACKAGE, LOCALEDIR);
-  textdomain (PACKAGE);
+  (void) bindtextdomain (PACKAGE, LOCALEDIR);
+  (void) textdomain (PACKAGE);
+
+  uniqstrs_new ();
 
   getargs (argc, argv);
 
 
   getargs (argc, argv);
 
-  time_report = trace_flag & trace_time;
+  timevar_report = trace_flag & trace_time;
   init_timevar ();
   timevar_start (TV_TOTAL);
 
   init_timevar ();
   timevar_start (TV_TOTAL);
 
@@ -73,8 +80,8 @@ main (int argc, char *argv[])
   reader ();
   timevar_pop (TV_READER);
 
   reader ();
   timevar_pop (TV_READER);
 
-  if (complain_message_count)
-    exit (1);
+  if (complaint_issued)
+    goto finish;
 
   /* Find useless nonterminals and productions and reduce the grammar. */
   timevar_push (TV_REDUCE);
 
   /* Find useless nonterminals and productions and reduce the grammar. */
   timevar_push (TV_REDUCE);
@@ -100,7 +107,7 @@ main (int argc, char *argv[])
   timevar_pop (TV_LALR);
 
   /* Find and record any conflicts: places where one token of
   timevar_pop (TV_LALR);
 
   /* Find and record any conflicts: places where one token of
-     lookahead is not enough to disambiguate the parsing.  In file
+     look-ahead is not enough to disambiguate the parsing.  In file
      conflicts.  Also resolve s/r conflicts based on precedence
      declarations.  */
   timevar_push (TV_CONFLICTS);
      conflicts.  Also resolve s/r conflicts based on precedence
      declarations.  */
   timevar_push (TV_CONFLICTS);
@@ -108,6 +115,14 @@ main (int argc, char *argv[])
   conflicts_print ();
   timevar_pop (TV_CONFLICTS);
 
   conflicts_print ();
   timevar_pop (TV_CONFLICTS);
 
+  /* Compute the parser tables.  */
+  timevar_push (TV_ACTIONS);
+  tables_generate ();
+  timevar_pop (TV_ACTIONS);
+
+  grammar_rules_never_reduced_report
+    (_("rule never reduced because of conflicts"));
+
   /* Output file names. */
   compute_output_file_names ();
 
   /* Output file names. */
   compute_output_file_names ();
 
@@ -119,11 +134,6 @@ main (int argc, char *argv[])
       timevar_pop (TV_REPORT);
     }
 
       timevar_pop (TV_REPORT);
     }
 
-  /* Stop if there were errors, to avoid trashing previous output
-     files.  */
-  if (complain_message_count)
-    exit (1);
-
   /* Output the VCG graph.  */
   if (graph_flag)
     {
   /* Output the VCG graph.  */
   if (graph_flag)
     {
@@ -132,12 +142,12 @@ main (int argc, char *argv[])
       timevar_pop (TV_GRAPH);
     }
 
       timevar_pop (TV_GRAPH);
     }
 
-  /* Compute the parser tables.  */
-  timevar_push (TV_ACTIONS);
-  tables_generate ();
-  timevar_pop (TV_ACTIONS);
+  /* Stop if there were errors, to avoid trashing previous output
+     files.  */
+  if (complaint_issued)
+    goto finish;
 
 
-  /* Lookaheads are no longer needed. */
+  /* Look-ahead tokens are no longer needed. */
   timevar_push (TV_FREE);
   lalr_free ();
   timevar_pop (TV_FREE);
   timevar_push (TV_FREE);
   lalr_free ();
   timevar_pop (TV_FREE);
@@ -160,19 +170,25 @@ main (int argc, char *argv[])
      contains things such as user actions, prologue, epilogue etc.  */
   scanner_free ();
   muscle_free ();
      contains things such as user actions, prologue, epilogue etc.  */
   scanner_free ();
   muscle_free ();
+  uniqstrs_free ();
   /* If using alloca.c, flush the alloca'ed memory for the benefit of
      people running Bison as a library in IDEs.  */
 #if C_ALLOCA
   /* If using alloca.c, flush the alloca'ed memory for the benefit of
      people running Bison as a library in IDEs.  */
 #if C_ALLOCA
-  alloca (0);
+  {
+    extern void *alloca (size_t);
+    alloca (0);
+  }
 #endif
   timevar_pop (TV_FREE);
 
   if (trace_flag & trace_bitsets)
     bitset_stats_dump (stderr);
 
 #endif
   timevar_pop (TV_FREE);
 
   if (trace_flag & trace_bitsets)
     bitset_stats_dump (stderr);
 
+ finish:
+
   /* Stop timing and print the times.  */
   timevar_stop (TV_TOTAL);
   timevar_print (stderr);
 
   /* Stop timing and print the times.  */
   timevar_stop (TV_TOTAL);
   timevar_print (stderr);
 
-  return complain_message_count ? EXIT_FAILURE : EXIT_SUCCESS;
+  return complaint_issued ? EXIT_FAILURE : EXIT_SUCCESS;
 }
 }