mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-21 02:03:03 +00:00
variables: simplify the upgrade of namespace into api.namespace.
This patch simplifies "variables: rename namespace as api.namespace",
commit 6750106107.
Suggested by Joel E. Denny in
http://lists.gnu.org/archive/html/bison-patches/2009-07/msg00006.html
* src/muscle-tab.c (muscle_percent_variable_update): New.
(muscle_percent_define_insert): Use it in replacement of the
previous tr invocation.
Remove variable_tr, no longer needed.
* data/bison.m4 (b4_percent_define_copy_, b4_percent_define_copy):
Remove.
* data/c++.m4: No longer handle namespace -> api.namespace.
* tests/input.at (%define backward compatibility): Check that
namespace is treated as api.namespace.
This commit is contained in:
19
ChangeLog
19
ChangeLog
@@ -1,3 +1,22 @@
|
|||||||
|
2009-08-19 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
|
variables: simplify the upgrade of namespace into api.namespace.
|
||||||
|
|
||||||
|
This patch simplifies "variables: rename namespace as
|
||||||
|
api.namespace", commit 67501061076ba46355cfd9f9361c7eed861b389c.
|
||||||
|
Suggested by Joel E. Denny in
|
||||||
|
http://lists.gnu.org/archive/html/bison-patches/2009-07/msg00006.html
|
||||||
|
|
||||||
|
* src/muscle-tab.c (muscle_percent_variable_update): New.
|
||||||
|
(muscle_percent_define_insert): Use it in replacement of the
|
||||||
|
previous tr invocation.
|
||||||
|
Remove variable_tr, no longer needed.
|
||||||
|
* data/bison.m4 (b4_percent_define_copy_, b4_percent_define_copy):
|
||||||
|
Remove.
|
||||||
|
* data/c++.m4: No longer handle namespace -> api.namespace.
|
||||||
|
* tests/input.at (%define backward compatibility): Check that
|
||||||
|
namespace is treated as api.namespace.
|
||||||
|
|
||||||
2009-08-19 Akim Demaille <demaille@gostai.com>
|
2009-08-19 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
doc: %initial-action to initialize yylloc.
|
doc: %initial-action to initialize yylloc.
|
||||||
|
|||||||
@@ -565,30 +565,6 @@ m4_define([b4_percent_define_use],
|
|||||||
[m4_define([b4_percent_define_bison_variables(]$1[)])dnl
|
[m4_define([b4_percent_define_bison_variables(]$1[)])dnl
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
# b4_percent_define_copy_(SOURCE, DESTINATION, [|_loc|_syncline])
|
|
||||||
# ---------------------------------------------------------------
|
|
||||||
# Copy the value/loc/syncline from the variable SOURCE to the DESTINATION.
|
|
||||||
# Ignore undefined values. "Use" the SOURCE so that there are no
|
|
||||||
# complaints about unused variables.
|
|
||||||
m4_define([b4_percent_define_copy_],
|
|
||||||
[m4_ifdef([b4_percent_define$3(]$1[)],
|
|
||||||
[m4_define([b4_percent_define$3(]$2[)],
|
|
||||||
m4_defn([b4_percent_define$3(]$1[)]))])dnl
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
# b4_percent_define_copy(SOURCE, DESTINATION)
|
|
||||||
# -------------------------------------------
|
|
||||||
# Define the variable DESTINATION as a copy of SOURCE.
|
|
||||||
m4_define([b4_percent_define_copy],
|
|
||||||
[b4_percent_define_use([$1])dnl
|
|
||||||
b4_percent_define_copy_([$1], [$2], [])dnl
|
|
||||||
b4_percent_define_copy_([$1], [$2], [_loc])dnl
|
|
||||||
b4_percent_define_copy_([$1], [$2], [_syncline])dnl
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
# b4_percent_define_get(VARIABLE)
|
# b4_percent_define_get(VARIABLE)
|
||||||
# -------------------------------
|
# -------------------------------
|
||||||
# Mimic muscle_percent_define_get in ../src/muscle_tab.h exactly. That is, if
|
# Mimic muscle_percent_define_get in ../src/muscle_tab.h exactly. That is, if
|
||||||
|
|||||||
@@ -27,14 +27,7 @@ m4_include(b4_pkgdatadir/[c.m4])
|
|||||||
b4_percent_define_default([[parser_class_name]], [[parser]])
|
b4_percent_define_default([[parser_class_name]], [[parser]])
|
||||||
b4_percent_define_default([[location_type]], [[location]])
|
b4_percent_define_default([[location_type]], [[location]])
|
||||||
b4_percent_define_default([[filename_type]], [[std::string]])
|
b4_percent_define_default([[filename_type]], [[std::string]])
|
||||||
|
b4_percent_define_default([[api.namespace]], m4_defn([b4_prefix]))
|
||||||
# api.namespace defaults to namespace, and then to b4_prefix.
|
|
||||||
b4_percent_define_ifdef([api.namespace],
|
|
||||||
[],
|
|
||||||
[b4_percent_define_ifdef([namespace],
|
|
||||||
[b4_percent_define_copy([namespace], [api.namespace])],
|
|
||||||
[b4_percent_define_default([api.namespace],
|
|
||||||
m4_defn([b4_prefix]))])])
|
|
||||||
|
|
||||||
b4_percent_define_default([[global_tokens_and_yystype]], [[false]])
|
b4_percent_define_default([[global_tokens_and_yystype]], [[false]])
|
||||||
b4_percent_define_default([[define_location_comparison]],
|
b4_percent_define_default([[define_location_comparison]],
|
||||||
|
|||||||
@@ -389,6 +389,30 @@ muscle_user_name_list_grow (char const *key, char const *user_name,
|
|||||||
muscle_grow (key, "]]", "");
|
muscle_grow (key, "]]", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** If the \a variable name is obsolete, return the name to use,
|
||||||
|
* otherwise \a variable. */
|
||||||
|
static
|
||||||
|
char const *
|
||||||
|
muscle_percent_variable_update (char const *variable)
|
||||||
|
{
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const char *obsolete;
|
||||||
|
const char *updated;
|
||||||
|
} conversion_type;
|
||||||
|
const conversion_type conversion[] =
|
||||||
|
{
|
||||||
|
{ "api.push_pull", "api.push-pull", },
|
||||||
|
{ "lr.keep_unreachable_states", "lr.keep-unreachable-states", },
|
||||||
|
{ "namespace", "api.namespace", },
|
||||||
|
};
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < sizeof conversion / sizeof *conversion; ++i)
|
||||||
|
if (!strcmp (conversion[i].obsolete, variable))
|
||||||
|
return conversion[i].updated;
|
||||||
|
return variable;
|
||||||
|
}
|
||||||
|
|
||||||
#define MUSCLE_USER_NAME_CONVERT(NAME, PREFIX, USER_NAME, SUFFIX) \
|
#define MUSCLE_USER_NAME_CONVERT(NAME, PREFIX, USER_NAME, SUFFIX) \
|
||||||
do { \
|
do { \
|
||||||
char *tmp; \
|
char *tmp; \
|
||||||
@@ -406,20 +430,13 @@ muscle_percent_define_insert (char const *variable, location variable_loc,
|
|||||||
char const *value,
|
char const *value,
|
||||||
muscle_percent_define_how how)
|
muscle_percent_define_how how)
|
||||||
{
|
{
|
||||||
char *variable_tr = NULL;
|
|
||||||
char const *name;
|
char const *name;
|
||||||
char const *loc_name;
|
char const *loc_name;
|
||||||
char const *syncline_name;
|
char const *syncline_name;
|
||||||
char const *how_name;
|
char const *how_name;
|
||||||
|
|
||||||
/* Permit certain names with underscores for backward compatibility. */
|
/* Permit certain names with underscores for backward compatibility. */
|
||||||
if (0 == strcmp (variable, "api.push_pull")
|
variable = muscle_percent_variable_update (variable);
|
||||||
|| 0 == strcmp (variable, "lr.keep_unreachable_states"))
|
|
||||||
{
|
|
||||||
variable_tr = strdup (variable);
|
|
||||||
tr (variable_tr, '_', '-');
|
|
||||||
variable = variable_tr;
|
|
||||||
}
|
|
||||||
|
|
||||||
MUSCLE_USER_NAME_CONVERT (name, "percent_define(", variable, ")");
|
MUSCLE_USER_NAME_CONVERT (name, "percent_define(", variable, ")");
|
||||||
MUSCLE_USER_NAME_CONVERT (loc_name, "percent_define_loc(", variable, ")");
|
MUSCLE_USER_NAME_CONVERT (loc_name, "percent_define_loc(", variable, ")");
|
||||||
@@ -434,10 +451,7 @@ muscle_percent_define_insert (char const *variable, location variable_loc,
|
|||||||
muscle_percent_define_how how_old =
|
muscle_percent_define_how how_old =
|
||||||
atoi (muscle_find_const (how_name));
|
atoi (muscle_find_const (how_name));
|
||||||
if (how_old == MUSCLE_PERCENT_DEFINE_F)
|
if (how_old == MUSCLE_PERCENT_DEFINE_F)
|
||||||
{
|
return;
|
||||||
free (variable_tr);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
complain_at (variable_loc, _("%s `%s' redefined"),
|
complain_at (variable_loc, _("%s `%s' redefined"),
|
||||||
"%define variable", variable);
|
"%define variable", variable);
|
||||||
complain_at (muscle_percent_define_get_loc (variable),
|
complain_at (muscle_percent_define_get_loc (variable),
|
||||||
@@ -452,8 +466,6 @@ muscle_percent_define_insert (char const *variable, location variable_loc,
|
|||||||
muscle_user_name_list_grow ("percent_define_user_variables", variable,
|
muscle_user_name_list_grow ("percent_define_user_variables", variable,
|
||||||
variable_loc);
|
variable_loc);
|
||||||
MUSCLE_INSERT_INT (how_name, how);
|
MUSCLE_INSERT_INT (how_name, how);
|
||||||
|
|
||||||
free (variable_tr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is used for backward compatibility, e.g., "%define api.pure"
|
/* This is used for backward compatibility, e.g., "%define api.pure"
|
||||||
|
|||||||
@@ -1055,6 +1055,17 @@ AT_BISON_CHECK([[input.y]], [1], [],
|
|||||||
[[input.y:1.9-34: invalid value for %define Boolean variable `lr.keep-unreachable-states'
|
[[input.y:1.9-34: invalid value for %define Boolean variable `lr.keep-unreachable-states'
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
AT_DATA([[input.y]],
|
||||||
|
[[%define namespace "foo"
|
||||||
|
%define api.namespace "foo"
|
||||||
|
%%
|
||||||
|
start: ;
|
||||||
|
]])
|
||||||
|
AT_BISON_CHECK([[input.y]], [1], [],
|
||||||
|
[[input.y:2.9-21: %define variable `api.namespace' redefined
|
||||||
|
input.y:1.9-17: previous definition
|
||||||
|
]])
|
||||||
|
|
||||||
AT_DATA([[input.y]],
|
AT_DATA([[input.y]],
|
||||||
[[%define foo_bar "baz"
|
[[%define foo_bar "baz"
|
||||||
%%
|
%%
|
||||||
|
|||||||
Reference in New Issue
Block a user