/* Muscle table manager for Bison,
- Copyright (C) 2001, 2002, 2003, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2003, 2006, 2007, 2008 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
- Bison is free software; you can redistribute it and/or modify
+ This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- Bison is distributed in the hope that it will be useful,
+ This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
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., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef MUSCLE_TAB_H_
# define MUSCLE_TAB_H_
#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) \
muscle_insert (Key, obstack_finish (&muscle_obstack)); \
} while(0)
+/* Key -> Value, but don't apply escaping to Value. */
#define MUSCLE_INSERT_STRING_RAW(Key, Value) \
do { \
obstack_sgrow (&muscle_obstack, Value); \
muscle_insert (Key, obstack_finish (&muscle_obstack)); \
} while(0)
+/* Key -> Value, applying M4 escaping to Value. */
#define MUSCLE_INSERT_STRING(Key, Value) \
do { \
MUSCLE_OBSTACK_SGROW (&muscle_obstack, Value); \
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; \
- } \
+#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) \
freeing the memory of the returned string. */
char *muscle_percent_define_get (char const *variable);
+/* Mimic muscle_percent_define_get_loc in ../data/bison.m4 exactly. That is,
+ if the %define variable VARIABLE is undefined, complain fatally since that's
+ a Bison error. Otherwise, return its definition location in a form
+ approriate for the first argument of warn_at, complain_at, or fatal_at.
+ Don't record this as a Bison usage of VARIABLE as there's no reason to
+ suspect that the user-supplied value has yet influenced the output. */
+location muscle_percent_define_get_loc (char const *variable);
+
+/* Mimic muscle_percent_define_get_syncline in ../data/bison.m4 exactly. That
+ is, if the %define variable VARIABLE is undefined, complain fatally since
+ that's a Bison error. Otherwise, return its definition location as a
+ b4_syncline invocation. Don't record this as a Bison usage of VARIABLE as
+ there's no reason to suspect that the user-supplied value has yet influenced
+ the output. */
+char const *muscle_percent_define_get_syncline (char const *variable);
+
/* Mimic b4_percent_define_ifdef in ../data/bison.m4 exactly. That is, if the
%define variable VARIABLE is defined, return true. Otherwise, return false.
Also, record Bison's usage of VARIABLE by defining
suspect that the value has yet influenced the output. */
void muscle_percent_define_default (char const *variable, char const *value);
-/* VALUES points to a sequence of strings that is partitioned into
- subsequences by NULL's, one terminating each subsequence. The last
- subsequence is followed by a second NULL. For each subsequence, the first
- string is the name of a %define variable, and all remaining strings in that
- subsequence are the valid values for that variable. Complain if such a
- variable is undefined (a Bison error since the default value should have
- been set already) or defined to any other value (possibly a user error).
- Don't record this as a Bison usage of the variable as there's no reason to
- suspect that the value has yet influenced the output. */
+/* Mimic b4_percent_define_check_values in ../data/bison.m4 exactly except that
+ the VALUES structure is more appropriate for C. That is, VALUES points to a
+ list of strings that is partitioned into sublists by NULL's, one terminating
+ each sublist. The last sublist is followed by a second NULL. For each
+ sublist, the first string is the name of a %define variable, and all
+ remaining strings in that sublist are the valid values for that variable.
+ Complain if such a variable is undefined (a Bison error since the default
+ value should have been set already) or defined to any other value (possibly
+ a user error). Don't record this as a Bison usage of the variable as
+ there's no reason to suspect that the value has yet influenced the
+ output. */
void muscle_percent_define_check_values (char const * const *values);
/* Grow the muscle for the %code qualifier QUALIFIER appearing at QUALIFIER_LOC