From: Akim Demaille Date: Wed, 19 Aug 2009 12:24:15 +0000 (+0200) Subject: variables: simplify the upgrade of namespace into api.namespace. X-Git-Tag: v2.7.90~810 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/171ad99d6421935a278656be6dc7161591835d00?hp=d59e456dbf5d9747e2fe0c0539f2ec670ce6f9c4 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. --- diff --git a/ChangeLog b/ChangeLog index 9f54a65d..903d2678 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2009-08-19 Akim Demaille + + 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 doc: %initial-action to initialize yylloc. diff --git a/data/bison.m4 b/data/bison.m4 index 788e8b01..4ca6ceea 100644 --- a/data/bison.m4 +++ b/data/bison.m4 @@ -565,30 +565,6 @@ m4_define([b4_percent_define_use], [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) # ------------------------------- # Mimic muscle_percent_define_get in ../src/muscle_tab.h exactly. That is, if diff --git a/data/c++.m4 b/data/c++.m4 index 1bde73eb..946d9b69 100644 --- a/data/c++.m4 +++ b/data/c++.m4 @@ -27,14 +27,7 @@ m4_include(b4_pkgdatadir/[c.m4]) b4_percent_define_default([[parser_class_name]], [[parser]]) b4_percent_define_default([[location_type]], [[location]]) b4_percent_define_default([[filename_type]], [[std::string]]) - -# 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([[api.namespace]], m4_defn([b4_prefix])) b4_percent_define_default([[global_tokens_and_yystype]], [[false]]) b4_percent_define_default([[define_location_comparison]], diff --git a/src/muscle-tab.c b/src/muscle-tab.c index c78e3f8d..bfb78036 100644 --- a/src/muscle-tab.c +++ b/src/muscle-tab.c @@ -389,6 +389,30 @@ muscle_user_name_list_grow (char const *key, char const *user_name, 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) \ do { \ char *tmp; \ @@ -406,20 +430,13 @@ muscle_percent_define_insert (char const *variable, location variable_loc, char const *value, muscle_percent_define_how how) { - char *variable_tr = NULL; char const *name; char const *loc_name; char const *syncline_name; char const *how_name; /* Permit certain names with underscores for backward compatibility. */ - if (0 == strcmp (variable, "api.push_pull") - || 0 == strcmp (variable, "lr.keep_unreachable_states")) - { - variable_tr = strdup (variable); - tr (variable_tr, '_', '-'); - variable = variable_tr; - } + variable = muscle_percent_variable_update (variable); MUSCLE_USER_NAME_CONVERT (name, "percent_define(", 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 = atoi (muscle_find_const (how_name)); if (how_old == MUSCLE_PERCENT_DEFINE_F) - { - free (variable_tr); - return; - } + return; complain_at (variable_loc, _("%s `%s' redefined"), "%define variable", 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, variable_loc); MUSCLE_INSERT_INT (how_name, how); - - free (variable_tr); } /* This is used for backward compatibility, e.g., "%define api.pure" diff --git a/tests/input.at b/tests/input.at index 146d5818..810e7601 100644 --- a/tests/input.at +++ b/tests/input.at @@ -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' ]]) +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]], [[%define foo_bar "baz" %%