]> git.saurik.com Git - bison.git/blobdiff - src/muscle_tab.h
* data/yacc.c (m4_int_type): New.
[bison.git] / src / muscle_tab.h
index da35bbd6d9b660df84202127365454a14ff712ba..3b186c12309885d7f8155ca14d96b1f4d3a33b83 100644 (file)
@@ -1,5 +1,5 @@
-/* Definitions for macrotab.c and callers, part of bison,
-   Copyright 2001 Free Software Foundation, Inc.
+/* Muscle table manager for Bison,
+   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    This file is part of Bison, the GNU Compiler Compiler.
 
    Boston, MA 02111-1307, USA.  */
 
 #ifndef MUSCLE_TAB_H_
    Boston, MA 02111-1307, USA.  */
 
 #ifndef MUSCLE_TAB_H_
-# define MUSCLE_TAB_H
-
-# define MTABSIZE 101
+# define MUSCLE_TAB_H_
 
 typedef struct muscle_entry_s
 {
   const char *key;
 
 typedef struct muscle_entry_s
 {
   const char *key;
-  const char *value;
+  char *value;
 } muscle_entry_t;
 
 } muscle_entry_t;
 
-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 (void);
+void muscle_insert (const char *key, char *value);
+char *muscle_find (const char *key);
+void muscle_free (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)                          \
 {                                                              \
@@ -40,6 +43,13 @@ const char *muscle_find PARAMS ((const char *key));
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
+#define MUSCLE_INSERT_LONG_INT(Key, Value)                     \
+{                                                              \
+  obstack_fgrow1 (&muscle_obstack, "%ld", Value);              \
+  obstack_1grow (&muscle_obstack, 0);                          \
+  muscle_insert (Key, obstack_finish (&muscle_obstack));       \
+}
+
 #define MUSCLE_INSERT_STRING(Key, Value)                       \
 {                                                              \
   obstack_sgrow (&muscle_obstack, Value);                      \
 #define MUSCLE_INSERT_STRING(Key, Value)                       \
 {                                                              \
   obstack_sgrow (&muscle_obstack, Value);                      \
@@ -47,12 +57,27 @@ const char *muscle_find PARAMS ((const char *key));
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
-#define MUSCLE_INSERT_PREFIX(Key, Value)                               \
-{                                                                      \
-  obstack_fgrow2 (&muscle_obstack, "%s%s",                             \
-                 spec_name_prefix ? spec_name_prefix : "yy", Value);   \
-  obstack_1grow (&muscle_obstack, 0);                                  \
-  muscle_insert (Key, obstack_finish (&muscle_obstack));               \
+#define MUSCLE_GROW_STRING_PAIR(Key, Value1, Value2)           \
+{                                                              \
+  obstack_sgrow (&muscle_obstack, Value1);                     \
+  obstack_1grow (&muscle_obstack, 0);                          \
+  muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
 }
 
+/* Insert (KEY, VALUE).  If KEY already existed, overwrite the
+   previous value.  Uses MUSCLE_OBSTACK.  De-allocates the previously
+   associated value.  VALUE and SEPARATOR are copied.  */
+
+void muscle_grow (const char *key, const char *value, const char *separator);
+
+/* 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*
+   quoted, one needs to strip the first level of quotes to reach the
+   list itself.  */
+
+void muscle_pair_list_grow (const char *muscle,
+                           const char *a1, const char *a2);
+
+void muscles_m4_output (FILE *out);
+
 #endif /* not MUSCLE_TAB_H_ */
 #endif /* not MUSCLE_TAB_H_ */