From b1a8161341d471456977275881c29c01136fb0f8 Mon Sep 17 00:00:00 2001 From: "Joel E. Denny" Date: Tue, 29 May 2007 03:06:34 +0000 Subject: [PATCH] * src/muscle_tab.c (muscle_percent_define_invalid_value): Replace with... (muscle_percent_define_check_values): ... this more helpful function. Again, it's not used yet, but it will be. * src/muscle_tab.h: Likewise. --- ChangeLog | 8 ++++++++ src/muscle_tab.c | 41 +++++++++++++++++++++++++++++++++++------ src/muscle_tab.h | 13 ++++++++++--- 3 files changed, 53 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4f700c3d..e2a97a02 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-05-29 Joel E. Denny + + * src/muscle_tab.c (muscle_percent_define_invalid_value): Replace + with... + (muscle_percent_define_check_values): ... this more helpful function. + Again, it's not used yet, but it will be. + * src/muscle_tab.h: Likewise. + 2007-05-28 Joel E. Denny * src/lalr.c (state_lookahead_tokens_count): For code readability, diff --git a/src/muscle_tab.c b/src/muscle_tab.c index 9f671673..732fc275 100644 --- a/src/muscle_tab.c +++ b/src/muscle_tab.c @@ -507,15 +507,44 @@ muscle_percent_define_default (char const *variable, char const *value) } void -muscle_percent_define_invalid_value (char const *variable) +muscle_percent_define_check_values (char const * const *values) { - char const *loc_name; - MUSCLE_USER_NAME_CONVERT (loc_name, "percent_define_loc(", variable, ")"); - complain_at(muscle_location_decode (loc_name), - _("invalid value for %%define variable `%s'"), variable); + for (; *values; ++values) + { + char const *variable = *values; + char const *name; + char const *loc_name; + char *value; + + MUSCLE_USER_NAME_CONVERT (name, "percent_define(", variable, ")"); + MUSCLE_USER_NAME_CONVERT (loc_name, "percent_define_loc(", variable, ")"); + + value = muscle_string_decode (name); + if (value) + { + bool valid = false; + for (++values; *values; ++values) + { + if (0 == strcmp (value, *values)) + { + valid = true; + while (*values) + ++values; + break; + } + } + if (!valid) + complain_at(muscle_location_decode (loc_name), + _("invalid value for %%define variable `%s': `%s'"), + variable, value); + free (value); + } + else + fatal(_("undefined %%define variable `%s' passed to muscle_percent_define_check_values"), + variable); + } } - void muscle_percent_code_grow (char const *qualifier, location qualifier_loc, char const *code, location code_loc) diff --git a/src/muscle_tab.h b/src/muscle_tab.h index 96efaa3b..4aab78c7 100644 --- a/src/muscle_tab.h +++ b/src/muscle_tab.h @@ -158,9 +158,16 @@ bool muscle_percent_define_flag_if (char const *variable); suspect that the value has yet influenced the output. */ void muscle_percent_define_default (char const *variable, char const *value); -/* Complain that the value set for the %define variable VARIABLE is - invalid. */ -void muscle_percent_define_invalid_value (char const *variable); +/* 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. */ +void muscle_percent_define_check_values (char const * const *values); /* Grow the muscle for the %code qualifier QUALIFIER appearing at QUALIFIER_LOC in the grammar file with code CODE appearing at CODE_LOC. Record this as a -- 2.45.2