/* Muscle table manager for Bison.
- Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software
+ Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
You should have received a copy of the GNU General Public License
along with Bison; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
#include "system.h"
/* Initial capacity of muscles hash table. */
#define HT_INITIAL_CAPACITY 257
-struct hash_table *muscle_table = NULL;
+static struct hash_table *muscle_table = NULL;
static bool
hash_compare_muscles (void const *x, void const *y)
return strcmp (m1->key, m2->key) == 0;
}
-static unsigned int
-hash_muscle (const void *x, unsigned int tablesize)
+static size_t
+hash_muscle (const void *x, size_t tablesize)
{
muscle_entry const *m = x;
return hash_string (m->key, tablesize);
/* Version and input file. */
MUSCLE_INSERT_STRING ("version", VERSION);
- MUSCLE_INSERT_C_STRING ("filename", grammar_file);
+ MUSCLE_INSERT_C_STRING ("file_name", grammar_file);
}
muscle_insert (const char *key, char *value)
{
muscle_entry probe;
- muscle_entry *entry = NULL;
+ muscle_entry *entry;
probe.key = key;
entry = hash_lookup (muscle_table, &probe);
if (!entry)
{
/* First insertion in the hash. */
- MALLOC (entry, 1);
+ entry = xmalloc (sizeof *entry);
entry->key = key;
hash_insert (muscle_table, entry);
}
if (!entry)
{
/* First insertion in the hash. */
- MALLOC (entry, 1);
+ entry = xmalloc (sizeof *entry);
entry->key = key;
hash_insert (muscle_table, entry);
entry->value = xstrdup (val);
}
+/*------------------------------------------------------------------.
+| Append VALUE to the current value of KEY, using muscle_grow. But |
+| in addition, issue a synchronization line for the location LOC. |
+`------------------------------------------------------------------*/
+
+void
+muscle_code_grow (const char *key, const char *val, location loc)
+{
+ char *extension = NULL;
+ obstack_fgrow1 (&muscle_obstack, "]b4_syncline(%d, [[", loc.start.line);
+ MUSCLE_OBSTACK_SGROW (&muscle_obstack,
+ quotearg_style (c_quoting_style, loc.start.file));
+ obstack_sgrow (&muscle_obstack, "]])[\n");
+ obstack_sgrow (&muscle_obstack, val);
+ obstack_1grow (&muscle_obstack, 0);
+ extension = obstack_finish (&muscle_obstack);
+ muscle_grow (key, extension, "");
+}
+
+
/*-------------------------------------------------------------------.
| MUSCLE is an M4 list of pairs. Create or extend it with the pair |
| (A1, A2). Note that because the muscle values are output *double* |