(output_obstack): Remove it, and all its dependencies, as it is no
longer needed.
* src/reader.c (epilogue_set): Build the epilogue in the
muscle_obstack.
* src/output.h, src/output.c (muscle_obstack): Move to...
* src/muscle_tab.h, src/muscle_tab.h: here.
(muscle_init): Initialize muscle_obstack.
(muscle_free): New.
* src/main.c (main): Call it.
+2002-06-14 Akim Demaille <akim@epita.fr>
+
+ * src/files.c (action_obstack): Remove, unused.
+ (output_obstack): Remove it, and all its dependencies, as it is no
+ longer needed.
+ * src/reader.c (epilogue_set): Build the epilogue in the
+ muscle_obstack.
+ * src/output.h, src/output.c (muscle_obstack): Move to...
+ * src/muscle_tab.h, src/muscle_tab.h: here.
+ (muscle_init): Initialize muscle_obstack.
+ (muscle_free): New.
+ * src/main.c (main): Call it.
+
+
2002-06-14 Akim Demaille <akim@epita.fr>
* src/location.h: New, extracted from...
2002-06-14 Akim Demaille <akim@epita.fr>
* src/location.h: New, extracted from...
/* Open and close files for bison,
/* Open and close files for bison,
- Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002
+ Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002
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.
-struct obstack action_obstack;
-struct obstack output_obstack;
struct obstack pre_prologue_obstack;
struct obstack post_prologue_obstack;
struct obstack pre_prologue_obstack;
struct obstack post_prologue_obstack;
-/* Output all the action code; precise form depends on which parser. */
-extern struct obstack action_obstack;
-
/* If semantic parser, output a .h file that defines YYSTYPE... */
extern struct obstack pre_prologue_obstack;
extern struct obstack post_prologue_obstack;
/* If semantic parser, output a .h file that defines YYSTYPE... */
extern struct obstack pre_prologue_obstack;
extern struct obstack post_prologue_obstack;
-/* The verbose output. */
-extern struct obstack output_obstack;
-
extern char *infile;
void compute_output_file_names PARAMS((void));
extern char *infile;
void compute_output_file_names PARAMS((void));
free_nullable ();
free_derives ();
grammar_free ();
free_nullable ();
free_derives ();
grammar_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
#include "muscle_tab.h"
#include "getargs.h"
#include "muscle_tab.h"
#include "getargs.h"
+
+/* An obstack used to create some entries. */
+struct obstack muscle_obstack;
+
/* Initial capacity of muscles hash table. */
#define HT_INITIAL_CAPACITY 257
/* Initial capacity of muscles hash table. */
#define HT_INITIAL_CAPACITY 257
return hash_string (m->key, tablesize);
}
return hash_string (m->key, tablesize);
}
+/*-----------------------------------------------------------------.
+| Create the MUSCLE_TABLE, and initialize it with default values. |
+| Also set up the MUSCLE_OBSTACK. |
+`-----------------------------------------------------------------*/
+
void
muscle_init (void)
{
muscle_table = hash_initialize (HT_INITIAL_CAPACITY, NULL, hash_muscle,
void
muscle_init (void)
{
muscle_table = hash_initialize (HT_INITIAL_CAPACITY, NULL, hash_muscle,
- hash_compare_muscles, NULL);
+ hash_compare_muscles, free);
/* Version and input file. */
muscle_insert ("version", VERSION);
muscle_insert ("filename", infile);
/* Version and input file. */
muscle_insert ("version", VERSION);
muscle_insert ("filename", infile);
+ /* FIXME: there should probably be no default here, only in the
+ skeletons. */
+
/* Types. */
muscle_insert ("ltype", "yyltype");
/* Types. */
muscle_insert ("ltype", "yyltype");
/* C++ macros. */
muscle_insert ("name", "Parser");
/* C++ macros. */
muscle_insert ("name", "Parser");
+
+ /* Initialize the muscle obstack. */
+ obstack_init (&muscle_obstack);
+
+/*------------------------------------------------------------.
+| Free all the memory consumed by the muscle machinery only. |
+`------------------------------------------------------------*/
+
+void
+muscle_free (void)
+{
+ hash_free (muscle_table);
+ obstack_free (&muscle_obstack, NULL);
+}
+
+
+
void
muscle_insert (const char *key, const char *value)
{
void
muscle_insert (const char *key, const char *value)
{
void muscle_init PARAMS ((void));
void muscle_insert PARAMS ((const char *key, const char *value));
const char *muscle_find PARAMS ((const char *key));
void muscle_init PARAMS ((void));
void muscle_insert PARAMS ((const char *key, const char *value));
const char *muscle_find PARAMS ((const char *key));
+void muscle_free PARAMS ((void));
+
+
+/* An obstack dedicated to receive muscle keys and values. */
+extern struct obstack muscle_obstack;
#define MUSCLE_INSERT_INT(Key, Value) \
{ \
#define MUSCLE_INSERT_INT(Key, Value) \
{ \
static int lowzero;
static int high;
static int lowzero;
static int high;
-struct obstack muscle_obstack;
static struct obstack format_obstack;
int error_verbose = 0;
static struct obstack format_obstack;
int error_verbose = 0;
/* Process the selected skeleton file. */
output_skeleton ();
/* Process the selected skeleton file. */
output_skeleton ();
- obstack_free (&muscle_obstack, NULL);
obstack_free (&format_obstack, NULL);
obstack_free (&format_obstack, NULL);
- obstack_free (&action_obstack, NULL);
obstack_free (&pre_prologue_obstack, NULL);
obstack_free (&post_prologue_obstack, NULL);
}
obstack_free (&pre_prologue_obstack, NULL);
obstack_free (&post_prologue_obstack, NULL);
}
void actions_output PARAMS ((FILE *out));
void token_definitions_output PARAMS ((FILE *out));
void actions_output PARAMS ((FILE *out));
void token_definitions_output PARAMS ((FILE *out));
-extern struct obstack muscle_obstack;
-
that conflicts with Posix. */
FILE *out = xfopen (spec_verbose_file, "w");
that conflicts with Posix. */
FILE *out = xfopen (spec_verbose_file, "w");
- size_t size = obstack_object_size (&output_obstack);
- fwrite (obstack_finish (&output_obstack), 1, size, out);
- obstack_free (&output_obstack, NULL);
-
- if (size)
- fputs ("\n\n", out);
-
reduce_output (out);
conflicts_output (out);
reduce_output (out);
conflicts_output (out);
void
epilogue_set (const char *epilogue, location_t location)
{
void
epilogue_set (const char *epilogue, location_t location)
{
- struct obstack el_obstack;
- obstack_init (&el_obstack);
-
- obstack_fgrow2 (&el_obstack, muscle_find ("linef"),
+ obstack_fgrow2 (&muscle_obstack, muscle_find ("linef"),
location.first_line,
quotearg_style (c_quoting_style,
muscle_find ("filename")));
}
location.first_line,
quotearg_style (c_quoting_style,
muscle_find ("filename")));
}
- obstack_sgrow (&el_obstack, epilogue);
- obstack_1grow (&el_obstack, 0);
- muscle_insert ("epilogue", obstack_finish (&el_obstack));
+ obstack_sgrow (&muscle_obstack, epilogue);
+ obstack_1grow (&muscle_obstack, 0);
+ muscle_insert ("epilogue", obstack_finish (&muscle_obstack));
gram_control_t gram_control;
lineno = 1;
gram_control_t gram_control;
lineno = 1;
- /* Initialize the muscle obstack. */
- obstack_init (&muscle_obstack);
-
/* Initialize the symbol table. */
symbols_new ();
/* Initialize the symbol table. */
symbols_new ();
undeftoken->number = ntokens++;
/* Initialize the obstacks. */
undeftoken->number = ntokens++;
/* Initialize the obstacks. */
- obstack_init (&action_obstack);
- obstack_init (&output_obstack);
obstack_init (&pre_prologue_obstack);
obstack_init (&post_prologue_obstack);
obstack_init (&pre_prologue_obstack);
obstack_init (&post_prologue_obstack);