X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/86eff18354964702e7f32d8b1550264efa573147..d1a1114f7f257f89887ea5825ba0d896dfaa747b:/src/muscle_tab.c?ds=inline diff --git a/src/muscle_tab.c b/src/muscle_tab.c index 7d344a6a..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,18 +48,25 @@ 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 ("stype", "int"); muscle_insert ("ltype", "yyltype"); /* Default #line formatting. */ @@ -67,14 +78,33 @@ 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) { muscle_entry_t pair; + muscle_entry_t *entry = NULL; + pair.key = key; - muscle_entry_t *entry = hash_lookup (muscle_table, &pair); + entry = hash_lookup (muscle_table, &pair); if (!entry) { @@ -90,8 +120,10 @@ const char* muscle_find (const char *key) { muscle_entry_t pair; + muscle_entry_t *result = NULL; + pair.key = key; - muscle_entry_t *result = hash_lookup (muscle_table, &pair); + result = hash_lookup (muscle_table, &pair); return result ? result->value : NULL; }