X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/11b192127cac086338bfaa43f3bab3acda8e3a20..0505df0cbae4065b17f3fb6953c68f87217e7ea2:/src/scan-skel.l diff --git a/src/scan-skel.l b/src/scan-skel.l index 5126d5f2..662a00b2 100644 --- a/src/scan-skel.l +++ b/src/scan-skel.l @@ -57,10 +57,10 @@ static void fail_for_invalid_at (char const *at); int out_lineno PACIFY_CC (= 0); char *outname = NULL; - /* Currently, only the @warn, @complain, @fatal, @warn_at, @complain_at, and - @fatal_at directives take multiple arguments, and the last three already - can't take more than 7. argv[0] is the directive name. */ - #define ARGC_MAX 8 + /* Currently, only the @complain directive takes multiple arguments, and + never more than 7, with argv[0] being the directive name and argv[1] + being the type of complaint to dispatch. */ +#define ARGC_MAX 9 int argc = 0; char *argv[ARGC_MAX]; %} @@ -134,7 +134,7 @@ static void fail_for_invalid_at (char const *at); { - <> complain (fatal, _("unclosed %s directive in skeleton"), argv[0]); + <> complain (NULL, fatal, _("unclosed %s directive in skeleton"), argv[0]); } %% @@ -168,13 +168,15 @@ skel_scanner_free (void) static inline warnings flag (const char *arg) { - switch (arg[1]) - { - case 'w': return Wother; - case 'c': return complaint; - case 'f': return fatal; - default: aver (false); break; - } + /* compare with values issued from b4_error */ + if (STREQ (arg, "warn")) + return Wother; + else if (STREQ (arg, "complain")) + return complaint; + else if (STREQ (arg, "fatal")) + return fatal; + else + aver (false); } static void @@ -186,65 +188,20 @@ at_directive_perform (int argc, char *argv[], char **outnamep, int *out_linenop) fail_for_at_directive_too_many_args (argv[0]); fputs (last_component (argv[1]), yyout); } - else if (STREQ (argv[0], "@warn") - || STREQ (argv[0], "@complain") - || STREQ (argv[0], "@fatal")) + else if (STREQ (argv[0], "@complain")) { - warnings w = flag (argv[0]); - switch (argc) - { - case 2: - complain (w, "%s", _(argv[1])); - break; - case 3: - complain (w, _(argv[1]), argv[2]); - break; - case 4: - complain (w, _(argv[1]), argv[2], argv[3]); - break; - case 5: - complain (w, _(argv[1]), argv[2], argv[3], argv[4]); - break; - case 6: - complain (w, _(argv[1]), argv[2], argv[3], argv[4], argv[5]); - break; - default: - fail_for_at_directive_too_many_args (argv[0]); - break; - } - } - else if (STREQ (argv[0], "@warn_at") - || STREQ (argv[0], "@complain_at") - || STREQ (argv[0], "@fatal_at")) - { - warnings w = flag (argv[0]); - location loc; if (argc < 4) fail_for_at_directive_too_few_args (argv[0]); - boundary_set_from_string (&loc.start, argv[1]); - boundary_set_from_string (&loc.end, argv[2]); - switch (argc) + warnings w = flag (argv[1]); + location loc; + location *locp = NULL; + if (argv[2] && argv[2][0]) { - case 4: - complain_at (loc, w, "%s", _(argv[3])); - break; - case 5: - complain_at (loc, w, _(argv[3]), argv[4]); - break; - case 6: - complain_at (loc, w, _(argv[3]), argv[4], argv[5]); - break; - case 7: - complain_at (loc, w, _(argv[3]), argv[4], argv[5], argv[6]); - break; - case 8: - complain_at (loc, w, _(argv[3]), argv[4], argv[5], argv[6], - argv[7]); - break; - default: - fail_for_at_directive_too_many_args (argv[0]); - break; + boundary_set_from_string (&loc.start, argv[2]); + boundary_set_from_string (&loc.end, argv[3]); + locp = &loc; } + complain_args (locp, w, argc - 3, argv + 3); } else if (STREQ (argv[0], "@output")) { @@ -267,19 +224,19 @@ at_directive_perform (int argc, char *argv[], char **outnamep, int *out_linenop) static void fail_for_at_directive_too_few_args (char const *at_directive_name) { - complain (fatal, _("too few arguments for %s directive in skeleton"), + complain (NULL, fatal, _("too few arguments for %s directive in skeleton"), at_directive_name); } static void fail_for_at_directive_too_many_args (char const *at_directive_name) { - complain (fatal, _("too many arguments for %s directive in skeleton"), + complain (NULL, fatal, _("too many arguments for %s directive in skeleton"), at_directive_name); } static void fail_for_invalid_at (char const *at) { - complain (fatal, "invalid @ in skeleton: %s", at); + complain (NULL, fatal, "invalid @ in skeleton: %s", at); }