]> git.saurik.com Git - bison.git/blobdiff - src/muscle_tab.h
2007-01-30 Paolo Bonzini <bonzini@gnu.org>
[bison.git] / src / muscle_tab.h
index 0fdb67f18895f3d0e3acace7e93a934e4d0b7526..ed6bd75e40edf232e594e7ba9b4130c1c86c6c54 100644 (file)
@@ -1,5 +1,5 @@
 /* Muscle table manager for Bison,
 /* Muscle table manager for Bison,
-   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2006, 2007 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -24,8 +24,9 @@
 # include "location.h"
 
 void muscle_init (void);
 # include "location.h"
 
 void muscle_init (void);
-void muscle_insert (const char *key, char *value);
-char *muscle_find (const char *key);
+void muscle_insert (char const *key, char const *value);
+char *muscle_find (char const *key);
+char const *muscle_find_const (char const *key);
 void muscle_free (void);
 
 
 void muscle_free (void);
 
 
@@ -33,34 +34,41 @@ void muscle_free (void);
 extern struct obstack muscle_obstack;
 
 #define MUSCLE_INSERT_BOOL(Key, Value)                         \
 extern struct obstack muscle_obstack;
 
 #define MUSCLE_INSERT_BOOL(Key, Value)                         \
-{                                                              \
+do {                                                           \
   int v = Value;                                               \
   MUSCLE_INSERT_INT (Key, v);                                  \
   int v = Value;                                               \
   MUSCLE_INSERT_INT (Key, v);                                  \
-}
+} while(0)
 
 #define MUSCLE_INSERT_INT(Key, Value)                          \
 
 #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));       \
   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)                     \
 
 #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));       \
   obstack_fgrow1 (&muscle_obstack, "%ld", Value);              \
   obstack_1grow (&muscle_obstack, 0);                          \
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
-}
+} while(0)
 
 
-#define MUSCLE_INSERT_STRING(Key, Value)                       \
-{                                                              \
+#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));       \
   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)                   \
 
 #define MUSCLE_OBSTACK_SGROW(Obstack, Value)                   \
-{                                                              \
+do {                                                           \
   char const *p;                                               \
   for (p = Value; *p; p++)                                     \
     switch (*p)                                                        \
   char const *p;                                               \
   for (p = Value; *p; p++)                                     \
     switch (*p)                                                        \
@@ -71,16 +79,16 @@ extern struct obstack muscle_obstack;
       case ']':        obstack_sgrow (Obstack, "@}" ); break;          \
       default: obstack_1grow (Obstack, *p); break;             \
       }                                                                \
       case ']':        obstack_sgrow (Obstack, "@}" ); break;          \
       default: obstack_1grow (Obstack, *p); break;             \
       }                                                                \
-}
+} while(0)
 
 #define MUSCLE_INSERT_C_STRING(Key, Value)                     \
 
 #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));       \
   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)
 
 /* Append VALUE to the current value of KEY.  If KEY did not already
    exist, create it.  Use MUSCLE_OBSTACK.  De-allocate the previously
 
 /* Append VALUE to the current value of KEY.  If KEY did not already
    exist, create it.  Use MUSCLE_OBSTACK.  De-allocate the previously
@@ -96,13 +104,22 @@ 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
 
 
 /* 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.  */
-
+   (A1, A2) after escaping both values with digraphs.  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);
 
 void muscle_pair_list_grow (const char *muscle,
                            const char *a1, const char *a2);
 
 void muscles_m4_output (FILE *out);
 
+/* 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);
+
+/* 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
+   with digraphs, so it must not contain `[' or `]'.  */
+void muscle_grow_user_name_list (char const *key, char const *user_name,
+                                 location loc);
+
 #endif /* not MUSCLE_TAB_H_ */
 #endif /* not MUSCLE_TAB_H_ */