-void
-berror (char *s)
-{
- fprintf (stderr, _("%s: internal error: %s\n"), program_name, s);
- abort();
+ /* Lookaheads are no longer needed. */
+ timevar_push (TV_FREE);
+ lalr_free ();
+ timevar_pop (TV_FREE);
+
+ /* Output the tables and the parser to ftable. In file output. */
+ timevar_push (TV_PARSER);
+ output ();
+ timevar_pop (TV_PARSER);
+
+ timevar_push (TV_FREE);
+ nullable_free ();
+ derives_free ();
+ tables_free ();
+ states_free ();
+ reduce_free ();
+ conflicts_free ();
+ grammar_free ();
+
+ /* The scanner memory cannot be released right after parsing, as it
+ contains things such as user actions, prologue, epilogue etc. */
+ scanner_free ();
+ muscle_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
+ alloca (0);
+#endif
+ timevar_pop (TV_FREE);
+
+ if (trace_flag & trace_bitsets)
+ bitset_stats_dump (stderr);
+
+ /* Stop timing and print the times. */
+ timevar_stop (TV_TOTAL);
+ timevar_print (stderr);
+
+ return complain_message_count ? EXIT_FAILURE : EXIT_SUCCESS;