]> git.saurik.com Git - bison.git/blobdiff - src/muscle-tab.h
lalr1.cc: check (and fix) %initial-action exception safety
[bison.git] / src / muscle-tab.h
index ee18774aaf23a3c8397f79af0c7193af05d204fd..696103f393f161b69e93afd882ca019c40656300 100644 (file)
@@ -1,6 +1,6 @@
 /* Muscle table manager for Bison,
 
-   Copyright (C) 2001-2003, 2006-2007, 2009-2011 Free Software
+   Copyright (C) 2001-2003, 2006-2007, 2009-2012 Free Software
    Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -21,6 +21,8 @@
 #ifndef MUSCLE_TAB_H_
 # define MUSCLE_TAB_H_
 
+# include <quotearg.h>
+
 # include "location.h"
 
 void muscle_init (void);
@@ -33,62 +35,47 @@ void muscle_free (void);
 /* An obstack dedicated to receive muscle keys and values.  */
 extern struct obstack muscle_obstack;
 
-#define MUSCLE_INSERT_BOOL(Key, Value)                         \
-do {                                                           \
-  int v = Value;                                               \
-  MUSCLE_INSERT_INT (Key, v);                                  \
-} while(0)
-
-#define MUSCLE_INSERT_INT(Key, Value)                          \
-do {                                                           \
-  obstack_fgrow1 (&muscle_obstack, "%d", Value);               \
-  obstack_1grow (&muscle_obstack, 0);                          \
-  muscle_insert (Key, obstack_finish (&muscle_obstack));       \
-} while(0)
-
-#define MUSCLE_INSERT_LONG_INT(Key, Value)                     \
-do {                                                           \
-  obstack_fgrow1 (&muscle_obstack, "%ld", Value);              \
-  obstack_1grow (&muscle_obstack, 0);                          \
-  muscle_insert (Key, obstack_finish (&muscle_obstack));       \
-} while(0)
-
-#define MUSCLE_INSERT_STRING_RAW(Key, Value)                   \
-do {                                                           \
-  obstack_sgrow (&muscle_obstack, Value);                      \
-  obstack_1grow (&muscle_obstack, 0);                          \
-  muscle_insert (Key, obstack_finish (&muscle_obstack));       \
-} while(0)
-
-#define MUSCLE_INSERT_STRING(Key, Value)                       \
-do {                                                           \
-  MUSCLE_OBSTACK_SGROW (&muscle_obstack, Value);                \
-  obstack_1grow (&muscle_obstack, 0);                          \
-  muscle_insert (Key, obstack_finish (&muscle_obstack));       \
-} while(0)
-
-#define MUSCLE_OBSTACK_SGROW(Obstack, Value)                   \
-do {                                                           \
-  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;             \
-      }                                                                \
-} while(0)
-
-#define MUSCLE_INSERT_C_STRING(Key, Value)                     \
-do {                                                           \
-  MUSCLE_OBSTACK_SGROW (&muscle_obstack,                       \
-                       quotearg_style (c_quoting_style,        \
-                                       Value));                \
-  obstack_1grow (&muscle_obstack, 0);                          \
-  muscle_insert (Key, obstack_finish (&muscle_obstack));       \
-} while(0)
+#define MUSCLE_INSERT_BOOL(Key, Value)                          \
+  do {                                                          \
+    int v = Value;                                              \
+    MUSCLE_INSERT_INT (Key, v);                                 \
+  } while (0)
+
+#define MUSCLE_INSERT_INT(Key, Value)                           \
+  do {                                                          \
+    obstack_printf (&muscle_obstack, "%d", Value);              \
+    obstack_1grow (&muscle_obstack, 0);                         \
+    muscle_insert (Key, obstack_finish (&muscle_obstack));      \
+  } while (0)
+
+#define MUSCLE_INSERT_LONG_INT(Key, Value)                      \
+  do {                                                          \
+    obstack_printf (&muscle_obstack, "%ld", Value);             \
+    obstack_1grow (&muscle_obstack, 0);                         \
+    muscle_insert (Key, obstack_finish (&muscle_obstack));      \
+  } while (0)
+
+#define MUSCLE_INSERT_STRING_RAW(Key, Value)                    \
+  do {                                                          \
+    obstack_sgrow (&muscle_obstack, Value);                     \
+    obstack_1grow (&muscle_obstack, 0);                         \
+    muscle_insert (Key, obstack_finish (&muscle_obstack));      \
+  } while (0)
+
+#define MUSCLE_INSERT_STRING(Key, Value)                        \
+  do {                                                          \
+    obstack_escape (&muscle_obstack, Value);                    \
+    obstack_1grow (&muscle_obstack, 0);                         \
+    muscle_insert (Key, obstack_finish (&muscle_obstack));      \
+  } while (0)
+
+#define MUSCLE_INSERT_C_STRING(Key, Value)                      \
+  do {                                                          \
+    obstack_escape (&muscle_obstack,                            \
+                    quotearg_style (c_quoting_style, Value));   \
+    obstack_1grow (&muscle_obstack, 0);                         \
+    muscle_insert (Key, obstack_finish (&muscle_obstack));      \
+  } while (0)
 
 /* Append VALUE to the current value of KEY.  If KEY did not already
    exist, create it.  Use MUSCLE_OBSTACK.  De-allocate the previously
@@ -108,15 +95,7 @@ void muscle_code_grow (const char *key, const char *value, location loc);
    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);
-
-/* In the format `[[file_name:line.column]], [[file_name:line.column]]', append
-   LOC to MUSCLE.  Use digraphs for special characters in each file name.  */
-void muscle_location_grow (char const *key, location loc);
-
-/* In the format `file_name:line.column', append BOUND to MUSCLE.  Use digraphs
-   for special characters in the file name.  */
-void muscle_boundary_grow (char const *key, boundary bound);
+                            const char *a1, const char *a2);
 
 /* Grow KEY for the occurrence of the name USER_NAME at LOC appropriately for
    use with b4_check_user_names in ../data/bison.m4.  USER_NAME is not escaped