]> git.saurik.com Git - bison.git/blobdiff - src/muscle_tab.h
* bootstrap (gnulib_modules): Add verify.
[bison.git] / src / muscle_tab.h
index 8865538fc50ca38448fe28e0574d5a3057498ab2..9e8ac24f246ec9550402c4e1b5e667542bcedd9e 100644 (file)
@@ -1,5 +1,5 @@
 /* Muscle table manager for Bison,
 /* Muscle table manager for Bison,
-   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    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
 
    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.  */
 
 #ifndef MUSCLE_TAB_H_
 # define MUSCLE_TAB_H_
 
 
 #ifndef MUSCLE_TAB_H_
 # define MUSCLE_TAB_H_
 
-typedef struct muscle_entry_s
-{
-  const char *key;
-  char *value;
-} muscle_entry_t;
+# include "location.h"
 
 
-void muscle_init PARAMS ((void));
-void muscle_insert PARAMS ((const char *key, char *value));
-char *muscle_find PARAMS ((const char *key));
-void muscle_free PARAMS ((void));
+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;
 
 
 
 /* An obstack dedicated to receive muscle keys and values.  */
 extern struct obstack muscle_obstack;
 
+#define MUSCLE_INSERT_BOOL(Key, Value)                         \
+{                                                              \
+  int v = Value;                                               \
+  MUSCLE_INSERT_INT (Key, v);                                  \
+}
+
 #define MUSCLE_INSERT_INT(Key, Value)                          \
 {                                                              \
 #define MUSCLE_INSERT_INT(Key, Value)                          \
 {                                                              \
-  obstack_fgrow1 (&muscle_obstack, "%d", Value);               \
+  obstack_fgrow1 (&muscle_obstack, "%d", Value);               \
   obstack_1grow (&muscle_obstack, 0);                          \
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
 #define MUSCLE_INSERT_LONG_INT(Key, Value)                     \
 {                                                              \
   obstack_1grow (&muscle_obstack, 0);                          \
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
 #define MUSCLE_INSERT_LONG_INT(Key, Value)                     \
 {                                                              \
-  obstack_fgrow1 (&muscle_obstack, "%ld", Value);              \
+  obstack_fgrow1 (&muscle_obstack, "%ld", Value);              \
   obstack_1grow (&muscle_obstack, 0);                          \
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
   obstack_1grow (&muscle_obstack, 0);                          \
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
@@ -57,9 +59,25 @@ extern struct obstack muscle_obstack;
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
-#define MUSCLE_GROW_STRING_PAIR(Key, Value1, Value2)           \
+#define MUSCLE_OBSTACK_SGROW(Obstack, Value)                   \
+{                                                              \
+  char const *p;                                               \
+  for (p = Value; *p; p++)                                     \
+    switch (*p)                                                        \
+      {                                                                \
+      case '$':        obstack_sgrow (Obstack, "$]["); break;          \
+      case '@':        obstack_sgrow (Obstack, "@@" ); break;          \
+      case '[':        obstack_sgrow (Obstack, "@{" ); break;          \
+      case ']':        obstack_sgrow (Obstack, "@}" ); break;          \
+      default: obstack_1grow (Obstack, *p); break;             \
+      }                                                                \
+}
+
+#define MUSCLE_INSERT_C_STRING(Key, Value)                     \
 {                                                              \
 {                                                              \
-  obstack_sgrow (&muscle_obstack, Value1);                     \
+  MUSCLE_OBSTACK_SGROW (&muscle_obstack,                       \
+                       quotearg_style (c_quoting_style,        \
+                                       Value));                \
   obstack_1grow (&muscle_obstack, 0);                          \
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
   obstack_1grow (&muscle_obstack, 0);                          \
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
@@ -68,17 +86,23 @@ extern struct obstack muscle_obstack;
    previous value.  Uses MUSCLE_OBSTACK.  De-allocates the previously
    associated value.  VALUE and SEPARATOR are copied.  */
 
    previous value.  Uses MUSCLE_OBSTACK.  De-allocates the previously
    associated value.  VALUE and SEPARATOR are copied.  */
 
-void muscle_grow PARAMS ((const char *key,
-                         const char *value, const char *separator));
+void muscle_grow (const char *key, const char *value, const char *separator);
+
+
+/* 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 *value, location loc);
+
 
 /* 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.  */
 
 
 /* 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 PARAMS ((const char *muscle,
-                                   const char *a1, const char *a2));
+void muscle_pair_list_grow (const char *muscle,
+                           const char *a1, const char *a2);
 
 
-void muscles_m4_output PARAMS ((FILE *out));
+void muscles_m4_output (FILE *out);
 
 #endif /* not MUSCLE_TAB_H_ */
 
 #endif /* not MUSCLE_TAB_H_ */