mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-15 15:23:02 +00:00
List accepted values for a %define enum variable with an invalid value.
Suggested by Akim Demaille at
<http://lists.gnu.org/archive/html/bison-patches/2009-04/msg00082.html>.
* data/bison.m4 (_b4_percent_define_check_values): Implement.
* src/muscle-tab.c (muscle_percent_define_check_values): Implement.
* tests/input.at (%define lr.default_reductions invalid values): Merge
into...
(%define enum variables): ... here, and update output.
(cherry picked from commit 25029e164a)
This commit is contained in:
11
ChangeLog
11
ChangeLog
@@ -1,3 +1,14 @@
|
|||||||
|
2009-04-24 Joel E. Denny <jdenny@ces.clemson.edu>
|
||||||
|
|
||||||
|
List accepted values for a %define enum variable with an invalid value.
|
||||||
|
Suggested by Akim Demaille at
|
||||||
|
<http://lists.gnu.org/archive/html/bison-patches/2009-04/msg00082.html>.
|
||||||
|
* data/bison.m4 (_b4_percent_define_check_values): Implement.
|
||||||
|
* src/muscle-tab.c (muscle_percent_define_check_values): Implement.
|
||||||
|
* tests/input.at (%define lr.default_reductions invalid values): Merge
|
||||||
|
into...
|
||||||
|
(%define enum variables): ... here, and update output.
|
||||||
|
|
||||||
2009-04-23 Joel E. Denny <jdenny@ces.clemson.edu>
|
2009-04-23 Joel E. Denny <jdenny@ces.clemson.edu>
|
||||||
|
|
||||||
Rename "default rule" to "default reduction".
|
Rename "default rule" to "default reduction".
|
||||||
|
|||||||
@@ -724,7 +724,11 @@ m4_define([_b4_percent_define_check_values],
|
|||||||
[b4_complain_at(b4_percent_define_get_loc([$1]),
|
[b4_complain_at(b4_percent_define_get_loc([$1]),
|
||||||
[[invalid value for %%define variable `%s': `%s']],
|
[[invalid value for %%define variable `%s': `%s']],
|
||||||
[$1],
|
[$1],
|
||||||
m4_dquote(m4_indir([b4_percent_define(]$1[)])))])dnl
|
m4_dquote(m4_indir([b4_percent_define(]$1[)])))
|
||||||
|
m4_foreach([b4_value], m4_dquote(m4_shift($@)),
|
||||||
|
[b4_complain_at(b4_percent_define_get_loc([$1]),
|
||||||
|
[[accepted value: `%s']],
|
||||||
|
m4_dquote(b4_value))])])dnl
|
||||||
m4_popdef([b4_good_value])],
|
m4_popdef([b4_good_value])],
|
||||||
[b4_fatal([[undefined %%define variable `%s' passed to b4_percent_define_check_values]], [$1])])])
|
[b4_fatal([[undefined %%define variable `%s' passed to b4_percent_define_check_values]], [$1])])])
|
||||||
|
|
||||||
|
|||||||
@@ -575,35 +575,40 @@ muscle_percent_define_check_values (char const * const *values)
|
|||||||
{
|
{
|
||||||
for (; *values; ++values)
|
for (; *values; ++values)
|
||||||
{
|
{
|
||||||
char const *variable = *values;
|
char const * const *variablep = values;
|
||||||
char const *name;
|
char const *name;
|
||||||
char *value;
|
char *value;
|
||||||
|
|
||||||
MUSCLE_USER_NAME_CONVERT (name, "percent_define(", variable, ")");
|
MUSCLE_USER_NAME_CONVERT (name, "percent_define(", *variablep, ")");
|
||||||
|
|
||||||
value = muscle_string_decode (name);
|
value = muscle_string_decode (name);
|
||||||
if (value)
|
if (value)
|
||||||
{
|
{
|
||||||
bool valid = false;
|
|
||||||
for (++values; *values; ++values)
|
for (++values; *values; ++values)
|
||||||
{
|
{
|
||||||
if (0 == strcmp (value, *values))
|
if (0 == strcmp (value, *values))
|
||||||
{
|
break;
|
||||||
valid = true;
|
}
|
||||||
while (*values)
|
if (!*values)
|
||||||
++values;
|
{
|
||||||
break;
|
location loc = muscle_percent_define_get_loc (*variablep);
|
||||||
}
|
complain_at(loc,
|
||||||
|
_("invalid value for %%define variable `%s': `%s'"),
|
||||||
|
*variablep, value);
|
||||||
|
for (values = variablep + 1; *values; ++values)
|
||||||
|
complain_at (loc, _("accepted value: `%s'"), *values);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (*values)
|
||||||
|
++values;
|
||||||
}
|
}
|
||||||
if (!valid)
|
|
||||||
complain_at(muscle_percent_define_get_loc (variable),
|
|
||||||
_("invalid value for %%define variable `%s': `%s'"),
|
|
||||||
variable, value);
|
|
||||||
free (value);
|
free (value);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fatal(_("undefined %%define variable `%s' passed to muscle_percent_define_check_values"),
|
fatal(_("undefined %%define variable `%s' passed to"
|
||||||
variable);
|
" muscle_percent_define_check_values"),
|
||||||
|
*variablep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -921,38 +921,36 @@ AT_BISON_CHECK([[Input.y]], [1], [],
|
|||||||
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
## ---------------------------------------------- ##
|
|
||||||
## %define lr.default_reductions invalid values. ##
|
|
||||||
## ---------------------------------------------- ##
|
|
||||||
|
|
||||||
AT_SETUP([[%define lr.default_reductions invalid values]])
|
|
||||||
|
|
||||||
AT_DATA([[input.y]],
|
|
||||||
[[%define lr.default_reductions "bogus"
|
|
||||||
%%
|
|
||||||
start: ;
|
|
||||||
]])
|
|
||||||
|
|
||||||
AT_BISON_CHECK([[input.y]], [[1]], [[]],
|
|
||||||
[[input.y:1.9-29: invalid value for %define variable `lr.default_reductions': `bogus'
|
|
||||||
]])
|
|
||||||
|
|
||||||
AT_CLEANUP
|
|
||||||
|
|
||||||
## ------------------------ ##
|
## ------------------------ ##
|
||||||
## %define enum variables. ##
|
## %define enum variables. ##
|
||||||
## ------------------------ ##
|
## ------------------------ ##
|
||||||
|
|
||||||
AT_SETUP([[%define enum variables]])
|
AT_SETUP([[%define enum variables]])
|
||||||
|
|
||||||
|
# Front-end.
|
||||||
|
AT_DATA([[input.y]],
|
||||||
|
[[%define lr.default_reductions "bogus"
|
||||||
|
%%
|
||||||
|
start: ;
|
||||||
|
]])
|
||||||
|
AT_BISON_CHECK([[input.y]], [[1]], [[]],
|
||||||
|
[[input.y:1.9-29: invalid value for %define variable `lr.default_reductions': `bogus'
|
||||||
|
input.y:1.9-29: accepted value: `all'
|
||||||
|
input.y:1.9-29: accepted value: `consistent'
|
||||||
|
input.y:1.9-29: accepted value: `accepting'
|
||||||
|
]])
|
||||||
|
|
||||||
|
# Back-end.
|
||||||
AT_DATA([[input.y]],
|
AT_DATA([[input.y]],
|
||||||
[[%define api.push_pull "neither"
|
[[%define api.push_pull "neither"
|
||||||
%%
|
%%
|
||||||
start: ;
|
start: ;
|
||||||
]])
|
]])
|
||||||
|
|
||||||
AT_BISON_CHECK([[input.y]], [1], [],
|
AT_BISON_CHECK([[input.y]], [1], [],
|
||||||
[[input.y:1.9-21: invalid value for %define variable `api.push_pull': `neither'
|
[[input.y:1.9-21: invalid value for %define variable `api.push_pull': `neither'
|
||||||
|
input.y:1.9-21: accepted value: `pull'
|
||||||
|
input.y:1.9-21: accepted value: `push'
|
||||||
|
input.y:1.9-21: accepted value: `both'
|
||||||
]])
|
]])
|
||||||
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|||||||
Reference in New Issue
Block a user