* 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.
This commit is contained in:
Akim Demaille
2002-06-14 17:36:24 +00:00
parent 0c15323de7
commit 592e8d4d01
10 changed files with 55 additions and 35 deletions

View File

@@ -1,3 +1,17 @@
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...

View File

@@ -1,5 +1,5 @@
/* 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.
@@ -32,8 +32,6 @@ const char *base_name PARAMS ((char const *name));
FILE *finput = NULL;
struct obstack action_obstack;
struct obstack output_obstack;
struct obstack pre_prologue_obstack;
struct obstack post_prologue_obstack;

View File

@@ -46,16 +46,10 @@ extern char *spec_defines_file;
extern FILE *finput;
/* 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;
/* The verbose output. */
extern struct obstack output_obstack;
extern char *infile;
void compute_output_file_names PARAMS((void));

View File

@@ -110,7 +110,7 @@ main (int argc, char *argv[])
free_nullable ();
free_derives ();
grammar_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

View File

@@ -24,6 +24,10 @@
#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
@@ -44,16 +48,24 @@ hash_muscle (const void *x, unsigned int 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,
hash_compare_muscles, NULL);
hash_compare_muscles, free);
/* 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");
@@ -66,8 +78,25 @@ muscle_init (void)
/* 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)
{

View File

@@ -32,6 +32,11 @@ typedef struct muscle_entry_s
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) \
{ \

View File

@@ -132,7 +132,6 @@ static short *check = NULL;
static int lowzero;
static int high;
struct obstack muscle_obstack;
static struct obstack format_obstack;
int error_verbose = 0;
@@ -1087,9 +1086,7 @@ output (void)
/* Process the selected skeleton file. */
output_skeleton ();
obstack_free (&muscle_obstack, NULL);
obstack_free (&format_obstack, NULL);
obstack_free (&action_obstack, NULL);
obstack_free (&pre_prologue_obstack, NULL);
obstack_free (&post_prologue_obstack, NULL);
}

View File

@@ -29,6 +29,4 @@ void output PARAMS ((void));
void actions_output PARAMS ((FILE *out));
void token_definitions_output PARAMS ((FILE *out));
extern struct obstack muscle_obstack;
#endif /* !OUTPUT_H_ */

View File

@@ -503,13 +503,6 @@ print_results (void)
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);

View File

@@ -138,19 +138,16 @@ prologue_augment (const char *prologue, location_t location)
void
epilogue_set (const char *epilogue, location_t location)
{
struct obstack el_obstack;
obstack_init (&el_obstack);
if (!no_lines_flag)
{
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")));
}
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));
}
@@ -450,9 +447,6 @@ reader (void)
gram_control_t gram_control;
lineno = 1;
/* Initialize the muscle obstack. */
obstack_init (&muscle_obstack);
/* Initialize the symbol table. */
symbols_new ();
@@ -473,8 +467,6 @@ reader (void)
undeftoken->number = ntokens++;
/* Initialize the obstacks. */
obstack_init (&action_obstack);
obstack_init (&output_obstack);
obstack_init (&pre_prologue_obstack);
obstack_init (&post_prologue_obstack);