mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-11 21:33:04 +00:00
* src/parse-gram.y: Add the definition of the %lex-param and %parse-param tokens, plus their rules. Drop the `_' version of %glr-parser. Add the "," token. * src/scan-gram.l (INITIAL): Scan them. * src/muscle_tab.c: Comment changes. (muscle_insert, muscle_find): Rename `pair' as `probe'. * src/muscle_tab.h (MUSCLE_INSERT_PREFIX): Remove unused. (muscle_entry_s): The `value' member is no longer const. Adjust all dependencies. * src/muscle_tab.c (muscle_init): Adjust: use MUSCLE_INSERT_STRING. Initialize the obstack earlier. * src/muscle_tab.h, src/muscle_tab.c (muscle_grow) (muscle_pair_list_grow): New. * data/c.m4 (b4_c_function_call, b4_c_args): New. * data/yacc.c (YYLEX): Use b4_c_function_call to honor %lex-param. * tests/calc.at: Use %locations, not --locations. (AT_CHECK_CALC_GLR): Use %glr-parser, not %glr_parser.
85 lines
2.8 KiB
C
85 lines
2.8 KiB
C
/* Muscle table manager for Bison,
|
|
Copyright (C) 2001, 2002 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
|
|
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.
|
|
|
|
Bison 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., 59 Temple Place - Suite 330,
|
|
Boston, MA 02111-1307, USA. */
|
|
|
|
#ifndef MUSCLE_TAB_H_
|
|
# define MUSCLE_TAB_H_
|
|
|
|
typedef struct muscle_entry_s
|
|
{
|
|
const char *key;
|
|
char *value;
|
|
} muscle_entry_t;
|
|
|
|
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));
|
|
|
|
|
|
/* An obstack dedicated to receive muscle keys and values. */
|
|
extern struct obstack muscle_obstack;
|
|
|
|
#define MUSCLE_INSERT_INT(Key, 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_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); \
|
|
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 PARAMS ((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 PARAMS ((const char *muscle,
|
|
const char *a1, const char *a2));
|
|
|
|
void muscles_m4_output PARAMS ((FILE *out));
|
|
|
|
#endif /* not MUSCLE_TAB_H_ */
|