From 592e8d4d010441b079f98b88c2f1af0b62a47cd1 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 14 Jun 2002 17:36:24 +0000 Subject: [PATCH] * 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. --- ChangeLog | 14 ++++++++++++++ src/files.c | 4 +--- src/files.h | 6 ------ src/main.c | 2 +- src/muscle_tab.c | 31 ++++++++++++++++++++++++++++++- src/muscle_tab.h | 5 +++++ src/output.c | 3 --- src/output.h | 2 -- src/print.c | 7 ------- src/reader.c | 16 ++++------------ 10 files changed, 55 insertions(+), 35 deletions(-) diff --git a/ChangeLog b/ChangeLog index f9ea0e12..8c6deb90 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2002-06-14 Akim Demaille + + * 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 * src/location.h: New, extracted from... diff --git a/src/files.c b/src/files.c index 1e084f6e..f6e80db8 100644 --- a/src/files.c +++ b/src/files.c @@ -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; diff --git a/src/files.h b/src/files.h index d5d286c5..0ab2086e 100644 --- a/src/files.h +++ b/src/files.h @@ -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)); diff --git a/src/main.c b/src/main.c index 9421df91..9cdd5818 100644 --- a/src/main.c +++ b/src/main.c @@ -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 diff --git a/src/muscle_tab.c b/src/muscle_tab.c index b556ef73..895e2e3e 100644 --- a/src/muscle_tab.c +++ b/src/muscle_tab.c @@ -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) { diff --git a/src/muscle_tab.h b/src/muscle_tab.h index 68bc9e7b..f4a0b96a 100644 --- a/src/muscle_tab.h +++ b/src/muscle_tab.h @@ -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) \ { \ diff --git a/src/output.c b/src/output.c index 5645e8cd..0cfadc80 100644 --- a/src/output.c +++ b/src/output.c @@ -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); } diff --git a/src/output.h b/src/output.h index d12c125d..67d5078f 100644 --- a/src/output.h +++ b/src/output.h @@ -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_ */ diff --git a/src/print.c b/src/print.c index d8a4f008..3c5d0ba3 100644 --- a/src/print.c +++ b/src/print.c @@ -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); diff --git a/src/reader.c b/src/reader.c index 12bb2d67..ad76ee10 100644 --- a/src/reader.c +++ b/src/reader.c @@ -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); -- 2.45.2