]> granicus.if.org Git - re2c/commitdiff
Tweaked error messages for misused option arguments, added some tests for them.
authorUlya Trofimovich <skvadrik@gmail.com>
Wed, 13 Feb 2019 14:33:39 +0000 (14:33 +0000)
committerUlya Trofimovich <skvadrik@gmail.com>
Wed, 13 Feb 2019 14:33:39 +0000 (14:33 +0000)
18 files changed:
re2c/bootstrap/src/options/parse_opts.cc
re2c/src/options/parse_opts.re
re2c/test/messages/msg_04.--location-format(xxx).c [new file with mode: 0644]
re2c/test/messages/msg_04.--location-format(xxx).re [new file with mode: 0644]
re2c/test/messages/msg_05.--dfa-minimization(xxx).c [new file with mode: 0644]
re2c/test/messages/msg_05.--dfa-minimization(xxx).re [new file with mode: 0644]
re2c/test/messages/msg_06.--posix-closure(xxx).c [new file with mode: 0644]
re2c/test/messages/msg_06.--posix-closure(xxx).re [new file with mode: 0644]
re2c/test/messages/msg_07.--empty-class(xxx).c [new file with mode: 0644]
re2c/test/messages/msg_07.--empty-class(xxx).re [new file with mode: 0644]
re2c/test/messages/msg_08.--input(xxx).c [new file with mode: 0644]
re2c/test/messages/msg_08.--input(xxx).re [new file with mode: 0644]
re2c/test/messages/msg_09.--encoding-policy(xxx).c [new file with mode: 0644]
re2c/test/messages/msg_09.--encoding-policy(xxx).re [new file with mode: 0644]
re2c/test/messages/msg_10.--output(-).c [new file with mode: 0644]
re2c/test/messages/msg_10.--output(-).re [new file with mode: 0644]
re2c/test/messages/msg_11.--type-header(-).c [new file with mode: 0644]
re2c/test/messages/msg_11.--type-header(-).re [new file with mode: 0644]

index 6b25ac45f81b466e059bc6aaddf879e627022e72..04b8a1434413b4fc56b53cd2e244d01aa273d3da 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 1.1.1 on Wed Feb 13 13:22:04 2019 */
+/* Generated by re2c 1.1.1 on Wed Feb 13 14:27:39 2019 */
 #line 1 "../src/options/parse_opts.re"
 #include "src/codegen/input_api.h"
 #include "src/options/opt.h"
@@ -19,25 +19,31 @@ parse_opts_t parse_opts(char **argv, conopt_t &globopts, Opt &opts, Msg &msg)
 {
 #define YYCTYPE unsigned char
 
-#define NEXT_ARG(option, label) \
-    do { \
-        if (next (YYCURSOR, argv)) goto label; \
-        else { error_arg(option); return EXIT_FAIL; } \
-    } while(0)
+#define NEXT_ARG(option, label) do { \
+    if (next (YYCURSOR, argv)) goto label; \
+    else { error_arg(option); return EXIT_FAIL; } \
+} while(0)
 
-#define ERROR(msg, arg) \
-    do { error(msg, arg); return EXIT_FAIL; } while(0)
+#define ERROR(msg, arg) do { \
+    error(msg, arg); \
+    return EXIT_FAIL; \
+} while(0)
+
+#define ERRARG(opt, exp, arg) do { \
+    error("bad argument '%s' to option %s <%s>", arg, opt, exp); \
+    return EXIT_FAIL; \
+} while(0)
 
     char *YYCURSOR, *YYMARKER;
     Warn::option_t option;
 
-#line 38 "../src/options/parse_opts.re"
+#line 44 "../src/options/parse_opts.re"
 
 
 opt:
     if (!next (YYCURSOR, argv)) goto end;
 
-#line 41 "src/options/parse_opts.cc"
+#line 47 "src/options/parse_opts.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -81,9 +87,9 @@ opt:
        goto yy4;
 yy2:
        ++YYCURSOR;
-#line 43 "../src/options/parse_opts.re"
+#line 49 "../src/options/parse_opts.re"
        { ERROR("bad option: %s", *argv); }
-#line 87 "src/options/parse_opts.cc"
+#line 93 "src/options/parse_opts.cc"
 yy4:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yybm[0+yych] & 128) {
@@ -98,25 +104,25 @@ yy6:
        } else {
                if (yych == 'W') goto yy14;
        }
-#line 57 "../src/options/parse_opts.re"
+#line 63 "../src/options/parse_opts.re"
        { goto opt_short; }
-#line 104 "src/options/parse_opts.cc"
+#line 110 "src/options/parse_opts.cc"
 yy8:
        ++YYCURSOR;
-#line 55 "../src/options/parse_opts.re"
+#line 61 "../src/options/parse_opts.re"
        { if (!opts.source (*argv))     return EXIT_FAIL; goto opt; }
-#line 109 "src/options/parse_opts.cc"
+#line 115 "src/options/parse_opts.cc"
 yy10:
        ++YYCURSOR;
-#line 54 "../src/options/parse_opts.re"
+#line 60 "../src/options/parse_opts.re"
        { if (!opts.source ("<stdin>")) return EXIT_FAIL; goto opt; }
-#line 114 "src/options/parse_opts.cc"
+#line 120 "src/options/parse_opts.cc"
 yy12:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy16;
-#line 58 "../src/options/parse_opts.re"
+#line 64 "../src/options/parse_opts.re"
        { goto opt_long; }
-#line 120 "src/options/parse_opts.cc"
+#line 126 "src/options/parse_opts.cc"
 yy14:
        yyaccept = 0;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
@@ -127,12 +133,12 @@ yy14:
                if (yych == 'n') goto yy22;
        }
 yy15:
-#line 62 "../src/options/parse_opts.re"
+#line 68 "../src/options/parse_opts.re"
        { option = Warn::W;        goto opt_warn; }
-#line 133 "src/options/parse_opts.cc"
+#line 139 "src/options/parse_opts.cc"
 yy16:
        ++YYCURSOR;
-#line 45 "../src/options/parse_opts.re"
+#line 51 "../src/options/parse_opts.re"
        {
         // remaining args are non-options, so they must be input files
         // re2c expects exactly one input file
@@ -141,12 +147,12 @@ yy16:
         }
         goto end;
     }
-#line 145 "src/options/parse_opts.cc"
+#line 151 "src/options/parse_opts.cc"
 yy18:
        ++YYCURSOR;
-#line 60 "../src/options/parse_opts.re"
+#line 66 "../src/options/parse_opts.re"
        { msg.warn.set_all ();       goto opt; }
-#line 150 "src/options/parse_opts.cc"
+#line 156 "src/options/parse_opts.cc"
 yy20:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'r') goto yy23;
@@ -178,9 +184,9 @@ yy26:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'e') goto yy29;
 yy27:
-#line 63 "../src/options/parse_opts.re"
+#line 69 "../src/options/parse_opts.re"
        { option = Warn::WNO;      goto opt_warn; }
-#line 184 "src/options/parse_opts.cc"
+#line 190 "src/options/parse_opts.cc"
 yy28:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'r') goto yy30;
@@ -200,14 +206,14 @@ yy31:
        goto yy21;
 yy32:
        ++YYCURSOR;
-#line 61 "../src/options/parse_opts.re"
+#line 67 "../src/options/parse_opts.re"
        { msg.warn.set_all_error (); goto opt; }
-#line 206 "src/options/parse_opts.cc"
+#line 212 "src/options/parse_opts.cc"
 yy34:
        ++YYCURSOR;
-#line 64 "../src/options/parse_opts.re"
+#line 70 "../src/options/parse_opts.re"
        { option = Warn::WERROR;   goto opt_warn; }
-#line 211 "src/options/parse_opts.cc"
+#line 217 "src/options/parse_opts.cc"
 yy36:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych != 'o') goto yy21;
@@ -216,16 +222,16 @@ yy36:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych != '-') goto yy21;
        ++YYCURSOR;
-#line 65 "../src/options/parse_opts.re"
+#line 71 "../src/options/parse_opts.re"
        { option = Warn::WNOERROR; goto opt_warn; }
-#line 222 "src/options/parse_opts.cc"
+#line 228 "src/options/parse_opts.cc"
 }
-#line 66 "../src/options/parse_opts.re"
+#line 72 "../src/options/parse_opts.re"
 
 
 opt_warn:
 
-#line 229 "src/options/parse_opts.cc"
+#line 235 "src/options/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
@@ -241,9 +247,9 @@ opt_warn:
 yy43:
        ++YYCURSOR;
 yy44:
-#line 70 "../src/options/parse_opts.re"
+#line 76 "../src/options/parse_opts.re"
        { ERROR("bad warning: %s", *argv); }
-#line 247 "src/options/parse_opts.cc"
+#line 253 "src/options/parse_opts.cc"
 yy45:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'o') goto yy51;
@@ -670,9 +676,9 @@ yy150:
        goto yy52;
 yy151:
        ++YYCURSOR;
-#line 76 "../src/options/parse_opts.re"
+#line 82 "../src/options/parse_opts.re"
        { msg.warn.set (Warn::SWAPPED_RANGE,          option); goto opt; }
-#line 676 "src/options/parse_opts.cc"
+#line 682 "src/options/parse_opts.cc"
 yy153:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'r') goto yy160;
@@ -711,14 +717,14 @@ yy161:
        goto yy52;
 yy162:
        ++YYCURSOR;
-#line 79 "../src/options/parse_opts.re"
+#line 85 "../src/options/parse_opts.re"
        { msg.warn.set (Warn::USELESS_ESCAPE,         option); goto opt; }
-#line 717 "src/options/parse_opts.cc"
+#line 723 "src/options/parse_opts.cc"
 yy164:
        ++YYCURSOR;
-#line 72 "../src/options/parse_opts.re"
+#line 78 "../src/options/parse_opts.re"
        { msg.warn.set (Warn::CONDITION_ORDER,        option); goto opt; }
-#line 722 "src/options/parse_opts.cc"
+#line 728 "src/options/parse_opts.cc"
 yy166:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'c') goto yy171;
@@ -777,18 +783,18 @@ yy179:
        goto yy52;
 yy180:
        ++YYCURSOR;
-#line 78 "../src/options/parse_opts.re"
+#line 84 "../src/options/parse_opts.re"
        { msg.warn.set (Warn::UNREACHABLE_RULES,      option); goto opt; }
-#line 783 "src/options/parse_opts.cc"
+#line 789 "src/options/parse_opts.cc"
 yy182:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 's') goto yy187;
        goto yy52;
 yy183:
        ++YYCURSOR;
-#line 74 "../src/options/parse_opts.re"
+#line 80 "../src/options/parse_opts.re"
        { msg.warn.set (Warn::MATCH_EMPTY_STRING,     option); goto opt; }
-#line 792 "src/options/parse_opts.cc"
+#line 798 "src/options/parse_opts.cc"
 yy185:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'g') goto yy188;
@@ -823,28 +829,28 @@ yy192:
        goto yy52;
 yy193:
        ++YYCURSOR;
-#line 73 "../src/options/parse_opts.re"
+#line 79 "../src/options/parse_opts.re"
        { msg.warn.set (Warn::EMPTY_CHARACTER_CLASS,  option); goto opt; }
-#line 829 "src/options/parse_opts.cc"
+#line 835 "src/options/parse_opts.cc"
 yy195:
        ++YYCURSOR;
-#line 75 "../src/options/parse_opts.re"
+#line 81 "../src/options/parse_opts.re"
        { msg.warn.set (Warn::NONDETERMINISTIC_TAGS,  option); goto opt; }
-#line 834 "src/options/parse_opts.cc"
+#line 840 "src/options/parse_opts.cc"
 yy197:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych >= 0x01) goto yy52;
        ++YYCURSOR;
-#line 77 "../src/options/parse_opts.re"
+#line 83 "../src/options/parse_opts.re"
        { msg.warn.set (Warn::UNDEFINED_CONTROL_FLOW, option); goto opt; }
-#line 841 "src/options/parse_opts.cc"
+#line 847 "src/options/parse_opts.cc"
 }
-#line 80 "../src/options/parse_opts.re"
+#line 86 "../src/options/parse_opts.re"
 
 
 opt_short:
 
-#line 848 "src/options/parse_opts.cc"
+#line 854 "src/options/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
@@ -932,168 +938,168 @@ opt_short:
                }
        }
        ++YYCURSOR;
-#line 86 "../src/options/parse_opts.re"
+#line 92 "../src/options/parse_opts.re"
        { goto opt; }
-#line 938 "src/options/parse_opts.cc"
+#line 944 "src/options/parse_opts.cc"
 yy204:
        ++YYCURSOR;
-#line 84 "../src/options/parse_opts.re"
+#line 90 "../src/options/parse_opts.re"
        { ERROR("bad short option: %s", *argv); }
-#line 943 "src/options/parse_opts.cc"
+#line 949 "src/options/parse_opts.cc"
 yy206:
        ++YYCURSOR;
-#line 125 "../src/options/parse_opts.re"
+#line 131 "../src/options/parse_opts.re"
        { goto opt_short; }
-#line 948 "src/options/parse_opts.cc"
+#line 954 "src/options/parse_opts.cc"
 yy208:
        ++YYCURSOR;
-#line 108 "../src/options/parse_opts.re"
+#line 114 "../src/options/parse_opts.re"
        { opts.set_encoding(Enc::UTF8);   goto opt_short; }
-#line 953 "src/options/parse_opts.cc"
+#line 959 "src/options/parse_opts.cc"
 yy210:
        ++YYCURSOR;
-#line 87 "../src/options/parse_opts.re"
+#line 93 "../src/options/parse_opts.re"
        { usage ();   return EXIT_OK; }
-#line 958 "src/options/parse_opts.cc"
+#line 964 "src/options/parse_opts.cc"
 yy212:
        ++YYCURSOR;
-#line 92 "../src/options/parse_opts.re"
+#line 98 "../src/options/parse_opts.re"
        { globopts.target = TARGET_DOT;      goto opt_short; }
-#line 963 "src/options/parse_opts.cc"
+#line 969 "src/options/parse_opts.cc"
 yy214:
        ++YYCURSOR;
-#line 94 "../src/options/parse_opts.re"
+#line 100 "../src/options/parse_opts.re"
        { globopts.FFlag = true;             goto opt_short; }
-#line 968 "src/options/parse_opts.cc"
+#line 974 "src/options/parse_opts.cc"
 yy216:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy256;
-#line 117 "../src/options/parse_opts.re"
+#line 123 "../src/options/parse_opts.re"
        { *argv = YYCURSOR; goto opt_incpath; }
-#line 974 "src/options/parse_opts.cc"
+#line 980 "src/options/parse_opts.cc"
 yy218:
        ++YYCURSOR;
-#line 110 "../src/options/parse_opts.re"
+#line 116 "../src/options/parse_opts.re"
        {
         opts.set_posix_syntax(true);
         opts.set_posix_semantics(true);
         goto opt_short;
     }
-#line 983 "src/options/parse_opts.cc"
+#line 989 "src/options/parse_opts.cc"
 yy220:
        ++YYCURSOR;
-#line 96 "../src/options/parse_opts.re"
+#line 102 "../src/options/parse_opts.re"
        { globopts.target = TARGET_SKELETON; goto opt_short; }
-#line 988 "src/options/parse_opts.cc"
+#line 994 "src/options/parse_opts.cc"
 yy222:
        ++YYCURSOR;
-#line 103 "../src/options/parse_opts.re"
+#line 109 "../src/options/parse_opts.re"
        { opts.set_tags(true);            goto opt_short; }
-#line 993 "src/options/parse_opts.cc"
+#line 999 "src/options/parse_opts.cc"
 yy224:
        ++YYCURSOR;
-#line 89 "../src/options/parse_opts.re"
+#line 95 "../src/options/parse_opts.re"
        { vernum ();  return EXIT_OK; }
-#line 998 "src/options/parse_opts.cc"
+#line 1004 "src/options/parse_opts.cc"
 yy226:
        ++YYCURSOR;
-#line 98 "../src/options/parse_opts.re"
+#line 104 "../src/options/parse_opts.re"
        { opts.set_bFlag(true);           goto opt_short; }
-#line 1003 "src/options/parse_opts.cc"
+#line 1009 "src/options/parse_opts.cc"
 yy228:
        ++YYCURSOR;
-#line 91 "../src/options/parse_opts.re"
+#line 97 "../src/options/parse_opts.re"
        { globopts.cFlag = true;             goto opt_short; }
-#line 1008 "src/options/parse_opts.cc"
+#line 1014 "src/options/parse_opts.cc"
 yy230:
        ++YYCURSOR;
-#line 99 "../src/options/parse_opts.re"
+#line 105 "../src/options/parse_opts.re"
        { opts.set_dFlag(true);           goto opt_short; }
-#line 1013 "src/options/parse_opts.cc"
+#line 1019 "src/options/parse_opts.cc"
 yy232:
        ++YYCURSOR;
-#line 104 "../src/options/parse_opts.re"
+#line 110 "../src/options/parse_opts.re"
        { opts.set_encoding(Enc::EBCDIC); goto opt_short; }
-#line 1018 "src/options/parse_opts.cc"
+#line 1024 "src/options/parse_opts.cc"
 yy234:
        ++YYCURSOR;
-#line 93 "../src/options/parse_opts.re"
+#line 99 "../src/options/parse_opts.re"
        { globopts.fFlag = true;             goto opt_short; }
-#line 1023 "src/options/parse_opts.cc"
+#line 1029 "src/options/parse_opts.cc"
 yy236:
        ++YYCURSOR;
-#line 100 "../src/options/parse_opts.re"
+#line 106 "../src/options/parse_opts.re"
        { opts.set_gFlag(true);           goto opt_short; }
-#line 1028 "src/options/parse_opts.cc"
+#line 1034 "src/options/parse_opts.cc"
 yy238:
        ++YYCURSOR;
-#line 101 "../src/options/parse_opts.re"
+#line 107 "../src/options/parse_opts.re"
        { opts.set_iFlag(true);           goto opt_short; }
-#line 1033 "src/options/parse_opts.cc"
+#line 1039 "src/options/parse_opts.cc"
 yy240:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy258;
-#line 120 "../src/options/parse_opts.re"
+#line 126 "../src/options/parse_opts.re"
        { *argv = YYCURSOR; goto opt_output; }
-#line 1039 "src/options/parse_opts.cc"
+#line 1045 "src/options/parse_opts.cc"
 yy242:
        ++YYCURSOR;
-#line 95 "../src/options/parse_opts.re"
+#line 101 "../src/options/parse_opts.re"
        { globopts.rFlag = true;             goto opt_short; }
-#line 1044 "src/options/parse_opts.cc"
+#line 1050 "src/options/parse_opts.cc"
 yy244:
        ++YYCURSOR;
-#line 102 "../src/options/parse_opts.re"
+#line 108 "../src/options/parse_opts.re"
        { opts.set_sFlag(true);           goto opt_short; }
-#line 1049 "src/options/parse_opts.cc"
+#line 1055 "src/options/parse_opts.cc"
 yy246:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy260;
-#line 123 "../src/options/parse_opts.re"
+#line 129 "../src/options/parse_opts.re"
        { *argv = YYCURSOR; goto opt_header; }
-#line 1055 "src/options/parse_opts.cc"
+#line 1061 "src/options/parse_opts.cc"
 yy248:
        ++YYCURSOR;
-#line 105 "../src/options/parse_opts.re"
+#line 111 "../src/options/parse_opts.re"
        { opts.set_encoding(Enc::UTF32);  goto opt_short; }
-#line 1060 "src/options/parse_opts.cc"
+#line 1066 "src/options/parse_opts.cc"
 yy250:
        ++YYCURSOR;
-#line 88 "../src/options/parse_opts.re"
+#line 94 "../src/options/parse_opts.re"
        { version (); return EXIT_OK; }
-#line 1065 "src/options/parse_opts.cc"
+#line 1071 "src/options/parse_opts.cc"
 yy252:
        ++YYCURSOR;
-#line 106 "../src/options/parse_opts.re"
+#line 112 "../src/options/parse_opts.re"
        { opts.set_encoding(Enc::UCS2);   goto opt_short; }
-#line 1070 "src/options/parse_opts.cc"
+#line 1076 "src/options/parse_opts.cc"
 yy254:
        ++YYCURSOR;
-#line 107 "../src/options/parse_opts.re"
+#line 113 "../src/options/parse_opts.re"
        { opts.set_encoding(Enc::UTF16);  goto opt_short; }
-#line 1075 "src/options/parse_opts.cc"
+#line 1081 "src/options/parse_opts.cc"
 yy256:
        ++YYCURSOR;
-#line 116 "../src/options/parse_opts.re"
+#line 122 "../src/options/parse_opts.re"
        { NEXT_ARG("-I", opt_incpath); }
-#line 1080 "src/options/parse_opts.cc"
+#line 1086 "src/options/parse_opts.cc"
 yy258:
        ++YYCURSOR;
-#line 119 "../src/options/parse_opts.re"
+#line 125 "../src/options/parse_opts.re"
        { NEXT_ARG("-o, --output", opt_output); }
-#line 1085 "src/options/parse_opts.cc"
+#line 1091 "src/options/parse_opts.cc"
 yy260:
        ++YYCURSOR;
-#line 122 "../src/options/parse_opts.re"
+#line 128 "../src/options/parse_opts.re"
        { NEXT_ARG("-t, --type-header", opt_header); }
-#line 1090 "src/options/parse_opts.cc"
+#line 1096 "src/options/parse_opts.cc"
 }
-#line 126 "../src/options/parse_opts.re"
+#line 132 "../src/options/parse_opts.re"
 
 
 opt_long:
 
-#line 1097 "src/options/parse_opts.cc"
+#line 1103 "src/options/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
@@ -1120,9 +1126,9 @@ opt_long:
 yy264:
        ++YYCURSOR;
 yy265:
-#line 130 "../src/options/parse_opts.re"
+#line 136 "../src/options/parse_opts.re"
        { ERROR("bad long option: %s", *argv); }
-#line 1126 "src/options/parse_opts.cc"
+#line 1132 "src/options/parse_opts.cc"
 yy266:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'i') goto yy283;
@@ -1498,9 +1504,9 @@ yy350:
        goto yy284;
 yy351:
        ++YYCURSOR;
-#line 153 "../src/options/parse_opts.re"
+#line 159 "../src/options/parse_opts.re"
        { opts.set_encoding(Enc::EBCDIC);    goto opt; }
-#line 1504 "src/options/parse_opts.cc"
+#line 1510 "src/options/parse_opts.cc"
 yy353:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '-') goto yy388;
@@ -1666,9 +1672,9 @@ yy391:
        goto yy284;
 yy392:
        ++YYCURSOR;
-#line 132 "../src/options/parse_opts.re"
+#line 138 "../src/options/parse_opts.re"
        { usage ();   return EXIT_OK; }
-#line 1672 "src/options/parse_opts.cc"
+#line 1678 "src/options/parse_opts.cc"
 yy394:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy434;
@@ -1731,9 +1737,9 @@ yy408:
        goto yy284;
 yy409:
        ++YYCURSOR;
-#line 152 "../src/options/parse_opts.re"
+#line 158 "../src/options/parse_opts.re"
        { opts.set_tags (true);              goto opt; }
-#line 1737 "src/options/parse_opts.cc"
+#line 1743 "src/options/parse_opts.cc"
 yy411:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'h') goto yy450;
@@ -1829,9 +1835,9 @@ yy433:
        goto yy284;
 yy434:
        ++YYCURSOR;
-#line 168 "../src/options/parse_opts.re"
+#line 174 "../src/options/parse_opts.re"
        { NEXT_ARG("--input",            opt_input); }
-#line 1835 "src/options/parse_opts.cc"
+#line 1841 "src/options/parse_opts.cc"
 yy436:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'o') goto yy475;
@@ -1902,9 +1908,9 @@ yy452:
        goto yy284;
 yy453:
        ++YYCURSOR;
-#line 157 "../src/options/parse_opts.re"
+#line 163 "../src/options/parse_opts.re"
        { opts.set_encoding(Enc::UTF8);      goto opt; }
-#line 1908 "src/options/parse_opts.cc"
+#line 1914 "src/options/parse_opts.cc"
 yy455:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy494;
@@ -2016,9 +2022,9 @@ yy481:
        goto yy284;
 yy482:
        ++YYCURSOR;
-#line 165 "../src/options/parse_opts.re"
+#line 171 "../src/options/parse_opts.re"
        { NEXT_ARG("-o, --output",       opt_output); }
-#line 2022 "src/options/parse_opts.cc"
+#line 2028 "src/options/parse_opts.cc"
 yy484:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'a') goto yy523;
@@ -2054,14 +2060,14 @@ yy491:
        goto yy284;
 yy492:
        ++YYCURSOR;
-#line 156 "../src/options/parse_opts.re"
+#line 162 "../src/options/parse_opts.re"
        { opts.set_encoding(Enc::UTF16);     goto opt; }
-#line 2060 "src/options/parse_opts.cc"
+#line 2066 "src/options/parse_opts.cc"
 yy494:
        ++YYCURSOR;
-#line 134 "../src/options/parse_opts.re"
+#line 140 "../src/options/parse_opts.re"
        { vernum ();  return EXIT_OK; }
-#line 2065 "src/options/parse_opts.cc"
+#line 2071 "src/options/parse_opts.cc"
 yy496:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy533;
@@ -2204,14 +2210,14 @@ yy530:
        goto yy284;
 yy531:
        ++YYCURSOR;
-#line 154 "../src/options/parse_opts.re"
+#line 160 "../src/options/parse_opts.re"
        { opts.set_encoding(Enc::UTF32);     goto opt; }
-#line 2210 "src/options/parse_opts.cc"
+#line 2216 "src/options/parse_opts.cc"
 yy533:
        ++YYCURSOR;
-#line 133 "../src/options/parse_opts.re"
+#line 139 "../src/options/parse_opts.re"
        { version (); return EXIT_OK; }
-#line 2215 "src/options/parse_opts.cc"
+#line 2221 "src/options/parse_opts.cc"
 yy535:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'r') goto yy573;
@@ -2250,9 +2256,9 @@ yy543:
        goto yy284;
 yy544:
        ++YYCURSOR;
-#line 188 "../src/options/parse_opts.re"
+#line 194 "../src/options/parse_opts.re"
        { globopts.dump_cfg = true;           goto opt; }
-#line 2256 "src/options/parse_opts.cc"
+#line 2262 "src/options/parse_opts.cc"
 yy546:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'u') goto yy583;
@@ -2272,18 +2278,18 @@ yy548:
        goto yy284;
 yy549:
        ++YYCURSOR;
-#line 182 "../src/options/parse_opts.re"
+#line 188 "../src/options/parse_opts.re"
        { globopts.dump_nfa = true;           goto opt; }
-#line 2278 "src/options/parse_opts.cc"
+#line 2284 "src/options/parse_opts.cc"
 yy551:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'p') goto yy589;
        goto yy284;
 yy552:
        ++YYCURSOR;
-#line 137 "../src/options/parse_opts.re"
+#line 143 "../src/options/parse_opts.re"
        { globopts.target = TARGET_DOT;      goto opt; }
-#line 2287 "src/options/parse_opts.cc"
+#line 2293 "src/options/parse_opts.cc"
 yy554:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 's') goto yy590;
@@ -2334,18 +2340,18 @@ yy565:
        goto yy284;
 yy566:
        ++YYCURSOR;
-#line 140 "../src/options/parse_opts.re"
+#line 146 "../src/options/parse_opts.re"
        { globopts.rFlag = true;             goto opt; }
-#line 2340 "src/options/parse_opts.cc"
+#line 2346 "src/options/parse_opts.cc"
 yy568:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 's') goto yy602;
        goto yy284;
 yy569:
        ++YYCURSOR;
-#line 143 "../src/options/parse_opts.re"
+#line 149 "../src/options/parse_opts.re"
        { globopts.target = TARGET_SKELETON; goto opt; }
-#line 2349 "src/options/parse_opts.cc"
+#line 2355 "src/options/parse_opts.cc"
 yy571:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 's') goto yy603;
@@ -2388,9 +2394,9 @@ yy580:
        goto yy284;
 yy581:
        ++YYCURSOR;
-#line 187 "../src/options/parse_opts.re"
+#line 193 "../src/options/parse_opts.re"
        { globopts.dump_adfa = true;          goto opt; }
-#line 2394 "src/options/parse_opts.cc"
+#line 2400 "src/options/parse_opts.cc"
 yy583:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'r') goto yy614;
@@ -2501,9 +2507,9 @@ yy609:
        goto yy284;
 yy610:
        ++YYCURSOR;
-#line 136 "../src/options/parse_opts.re"
+#line 142 "../src/options/parse_opts.re"
        { globopts.cFlag = true;             goto opt; }
-#line 2507 "src/options/parse_opts.cc"
+#line 2513 "src/options/parse_opts.cc"
 yy612:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 't') goto yy646;
@@ -2538,9 +2544,9 @@ yy619:
        goto yy284;
 yy620:
        ++YYCURSOR;
-#line 179 "../src/options/parse_opts.re"
+#line 185 "../src/options/parse_opts.re"
        { globopts.eager_skip = true;     goto opt; }
-#line 2544 "src/options/parse_opts.cc"
+#line 2550 "src/options/parse_opts.cc"
 yy622:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy655;
@@ -2559,9 +2565,9 @@ yy625:
        goto yy284;
 yy626:
        ++YYCURSOR;
-#line 149 "../src/options/parse_opts.re"
+#line 155 "../src/options/parse_opts.re"
        { opts.set_sFlag (true);             goto opt; }
-#line 2565 "src/options/parse_opts.cc"
+#line 2571 "src/options/parse_opts.cc"
 yy628:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'f') goto yy661;
@@ -2580,9 +2586,9 @@ yy631:
        goto yy284;
 yy632:
        ++YYCURSOR;
-#line 142 "../src/options/parse_opts.re"
+#line 148 "../src/options/parse_opts.re"
        { globopts.version = false;          goto opt; }
-#line 2586 "src/options/parse_opts.cc"
+#line 2592 "src/options/parse_opts.cc"
 yy634:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'r') goto yy665;
@@ -2605,14 +2611,14 @@ yy638:
        goto yy284;
 yy639:
        ++YYCURSOR;
-#line 155 "../src/options/parse_opts.re"
+#line 161 "../src/options/parse_opts.re"
        { opts.set_encoding(Enc::UCS2);      goto opt; }
-#line 2611 "src/options/parse_opts.cc"
+#line 2617 "src/options/parse_opts.cc"
 yy641:
        ++YYCURSOR;
-#line 145 "../src/options/parse_opts.re"
+#line 151 "../src/options/parse_opts.re"
        { opts.set_bFlag (true);             goto opt; }
-#line 2616 "src/options/parse_opts.cc"
+#line 2622 "src/options/parse_opts.cc"
 yy643:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 't') goto yy672;
@@ -2655,23 +2661,23 @@ yy652:
        goto yy284;
 yy653:
        ++YYCURSOR;
-#line 189 "../src/options/parse_opts.re"
+#line 195 "../src/options/parse_opts.re"
        { globopts.dump_interf = true;        goto opt; }
-#line 2661 "src/options/parse_opts.cc"
+#line 2667 "src/options/parse_opts.cc"
 yy655:
        ++YYCURSOR;
-#line 169 "../src/options/parse_opts.re"
+#line 175 "../src/options/parse_opts.re"
        { NEXT_ARG("--empty-class",      opt_empty_class); }
-#line 2666 "src/options/parse_opts.cc"
+#line 2672 "src/options/parse_opts.cc"
 yy657:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'i') goto yy686;
        goto yy284;
 yy658:
        ++YYCURSOR;
-#line 139 "../src/options/parse_opts.re"
+#line 145 "../src/options/parse_opts.re"
        { globopts.FFlag = true;             goto opt; }
-#line 2675 "src/options/parse_opts.cc"
+#line 2681 "src/options/parse_opts.cc"
 yy660:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'm') goto yy687;
@@ -2702,18 +2708,18 @@ yy666:
        goto yy284;
 yy667:
        ++YYCURSOR;
-#line 172 "../src/options/parse_opts.re"
+#line 178 "../src/options/parse_opts.re"
        { goto opt; }
-#line 2708 "src/options/parse_opts.cc"
+#line 2714 "src/options/parse_opts.cc"
 yy669:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 't') goto yy695;
        goto yy284;
 yy670:
        ++YYCURSOR;
-#line 166 "../src/options/parse_opts.re"
+#line 172 "../src/options/parse_opts.re"
        { NEXT_ARG("-t, --type-header",  opt_header); }
-#line 2717 "src/options/parse_opts.cc"
+#line 2723 "src/options/parse_opts.cc"
 yy672:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'i') goto yy696;
@@ -2728,9 +2734,9 @@ yy674:
        goto yy284;
 yy675:
        ++YYCURSOR;
-#line 146 "../src/options/parse_opts.re"
+#line 152 "../src/options/parse_opts.re"
        { opts.set_dFlag (true);             goto opt; }
-#line 2734 "src/options/parse_opts.cc"
+#line 2740 "src/options/parse_opts.cc"
 yy677:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'i') goto yy700;
@@ -2741,19 +2747,19 @@ yy678:
        goto yy284;
 yy679:
        ++YYCURSOR;
-#line 184 "../src/options/parse_opts.re"
+#line 190 "../src/options/parse_opts.re"
        { globopts.dump_dfa_det = true;       goto opt; }
-#line 2747 "src/options/parse_opts.cc"
+#line 2753 "src/options/parse_opts.cc"
 yy681:
        ++YYCURSOR;
-#line 186 "../src/options/parse_opts.re"
+#line 192 "../src/options/parse_opts.re"
        { globopts.dump_dfa_min = true;       goto opt; }
-#line 2752 "src/options/parse_opts.cc"
+#line 2758 "src/options/parse_opts.cc"
 yy683:
        ++YYCURSOR;
-#line 183 "../src/options/parse_opts.re"
+#line 189 "../src/options/parse_opts.re"
        { globopts.dump_dfa_raw = true;       goto opt; }
-#line 2757 "src/options/parse_opts.cc"
+#line 2763 "src/options/parse_opts.cc"
 yy685:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'p') goto yy702;
@@ -2776,9 +2782,9 @@ yy689:
        goto yy284;
 yy690:
        ++YYCURSOR;
-#line 177 "../src/options/parse_opts.re"
+#line 183 "../src/options/parse_opts.re"
        { globopts.lookahead = false;     goto opt; }
-#line 2782 "src/options/parse_opts.cc"
+#line 2788 "src/options/parse_opts.cc"
 yy692:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'a') goto yy708;
@@ -2801,9 +2807,9 @@ yy696:
        goto yy284;
 yy697:
        ++YYCURSOR;
-#line 151 "../src/options/parse_opts.re"
+#line 157 "../src/options/parse_opts.re"
        { opts.set_bCaseInverted (true);     goto opt; }
-#line 2807 "src/options/parse_opts.cc"
+#line 2813 "src/options/parse_opts.cc"
 yy699:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy714;
@@ -2830,9 +2836,9 @@ yy704:
        goto yy284;
 yy705:
        ++YYCURSOR;
-#line 148 "../src/options/parse_opts.re"
+#line 154 "../src/options/parse_opts.re"
        { opts.set_iFlag (true);             goto opt; }
-#line 2836 "src/options/parse_opts.cc"
+#line 2842 "src/options/parse_opts.cc"
 yy707:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'd') goto yy721;
@@ -2847,9 +2853,9 @@ yy709:
        goto yy284;
 yy710:
        ++YYCURSOR;
-#line 176 "../src/options/parse_opts.re"
+#line 182 "../src/options/parse_opts.re"
        { NEXT_ARG("--posix-closure",    opt_posix_closure); }
-#line 2853 "src/options/parse_opts.cc"
+#line 2859 "src/options/parse_opts.cc"
 yy712:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy725;
@@ -2860,9 +2866,9 @@ yy713:
        goto yy284;
 yy714:
        ++YYCURSOR;
-#line 147 "../src/options/parse_opts.re"
+#line 153 "../src/options/parse_opts.re"
        { opts.set_gFlag (true);             goto opt; }
-#line 2866 "src/options/parse_opts.cc"
+#line 2872 "src/options/parse_opts.cc"
 yy716:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'n') goto yy728;
@@ -2893,18 +2899,18 @@ yy722:
        goto yy284;
 yy723:
        ++YYCURSOR;
-#line 159 "../src/options/parse_opts.re"
+#line 165 "../src/options/parse_opts.re"
        {
         opts.set_posix_syntax(true);
         opts.set_posix_semantics(true);
         goto opt;
     }
-#line 2903 "src/options/parse_opts.cc"
+#line 2909 "src/options/parse_opts.cc"
 yy725:
        ++YYCURSOR;
-#line 138 "../src/options/parse_opts.re"
+#line 144 "../src/options/parse_opts.re"
        { globopts.fFlag = true;             goto opt; }
-#line 2908 "src/options/parse_opts.cc"
+#line 2914 "src/options/parse_opts.cc"
 yy727:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy738;
@@ -2919,19 +2925,19 @@ yy729:
        goto yy284;
 yy730:
        ++YYCURSOR;
-#line 185 "../src/options/parse_opts.re"
+#line 191 "../src/options/parse_opts.re"
        { globopts.dump_dfa_tagopt = true;    goto opt; }
-#line 2925 "src/options/parse_opts.cc"
+#line 2931 "src/options/parse_opts.cc"
 yy732:
        ++YYCURSOR;
-#line 167 "../src/options/parse_opts.re"
+#line 173 "../src/options/parse_opts.re"
        { NEXT_ARG("--encoding-policy",  opt_encoding_policy); }
-#line 2930 "src/options/parse_opts.cc"
+#line 2936 "src/options/parse_opts.cc"
 yy734:
        ++YYCURSOR;
-#line 170 "../src/options/parse_opts.re"
+#line 176 "../src/options/parse_opts.re"
        { NEXT_ARG("--location-format",  opt_location_format); }
-#line 2935 "src/options/parse_opts.cc"
+#line 2941 "src/options/parse_opts.cc"
 yy736:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 't') goto yy743;
@@ -2942,14 +2948,14 @@ yy737:
        goto yy284;
 yy738:
        ++YYCURSOR;
-#line 150 "../src/options/parse_opts.re"
+#line 156 "../src/options/parse_opts.re"
        { opts.set_bCaseInsensitive (true);  goto opt; }
-#line 2948 "src/options/parse_opts.cc"
+#line 2954 "src/options/parse_opts.cc"
 yy740:
        ++YYCURSOR;
-#line 175 "../src/options/parse_opts.re"
+#line 181 "../src/options/parse_opts.re"
        { NEXT_ARG("--dfa-minimization", opt_dfa_minimization); }
-#line 2953 "src/options/parse_opts.cc"
+#line 2959 "src/options/parse_opts.cc"
 yy742:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 's') goto yy746;
@@ -2960,9 +2966,9 @@ yy743:
        goto yy284;
 yy744:
        ++YYCURSOR;
-#line 178 "../src/options/parse_opts.re"
+#line 184 "../src/options/parse_opts.re"
        { globopts.optimize_tags = false; goto opt; }
-#line 2966 "src/options/parse_opts.cc"
+#line 2972 "src/options/parse_opts.cc"
 yy746:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy748;
@@ -2973,21 +2979,21 @@ yy747:
        goto yy284;
 yy748:
        ++YYCURSOR;
-#line 190 "../src/options/parse_opts.re"
+#line 196 "../src/options/parse_opts.re"
        { globopts.dump_closure_stats = true; goto opt; }
-#line 2979 "src/options/parse_opts.cc"
+#line 2985 "src/options/parse_opts.cc"
 yy750:
        ++YYCURSOR;
-#line 141 "../src/options/parse_opts.re"
+#line 147 "../src/options/parse_opts.re"
        { globopts.bNoGenerationDate = true; goto opt; }
-#line 2984 "src/options/parse_opts.cc"
+#line 2990 "src/options/parse_opts.cc"
 }
-#line 191 "../src/options/parse_opts.re"
+#line 197 "../src/options/parse_opts.re"
 
 
 opt_output:
 
-#line 2991 "src/options/parse_opts.cc"
+#line 2997 "src/options/parse_opts.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -3029,25 +3035,25 @@ opt_output:
        if (yych != '-') goto yy756;
 yy754:
        ++YYCURSOR;
-#line 195 "../src/options/parse_opts.re"
-       { ERROR("bad argument to option -o, --output: %s", *argv); }
-#line 3035 "src/options/parse_opts.cc"
+#line 201 "../src/options/parse_opts.re"
+       { ERRARG("-o, --output", "filename", *argv); }
+#line 3041 "src/options/parse_opts.cc"
 yy756:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yybm[0+yych] & 128) {
                goto yy756;
        }
        ++YYCURSOR;
-#line 196 "../src/options/parse_opts.re"
+#line 202 "../src/options/parse_opts.re"
        { opts.set_output_file (*argv); goto opt; }
-#line 3044 "src/options/parse_opts.cc"
+#line 3050 "src/options/parse_opts.cc"
 }
-#line 197 "../src/options/parse_opts.re"
+#line 203 "../src/options/parse_opts.re"
 
 
 opt_header:
 
-#line 3051 "src/options/parse_opts.cc"
+#line 3057 "src/options/parse_opts.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -3089,25 +3095,25 @@ opt_header:
        if (yych != '-') goto yy764;
 yy762:
        ++YYCURSOR;
-#line 201 "../src/options/parse_opts.re"
-       { ERROR("bad argument to option -t, --type-header: %s", *argv); }
-#line 3095 "src/options/parse_opts.cc"
+#line 207 "../src/options/parse_opts.re"
+       { ERRARG("-t, --type-header", "filename", *argv); }
+#line 3101 "src/options/parse_opts.cc"
 yy764:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yybm[0+yych] & 128) {
                goto yy764;
        }
        ++YYCURSOR;
-#line 202 "../src/options/parse_opts.re"
+#line 208 "../src/options/parse_opts.re"
        { opts.set_header_file (*argv); goto opt; }
-#line 3104 "src/options/parse_opts.cc"
+#line 3110 "src/options/parse_opts.cc"
 }
-#line 203 "../src/options/parse_opts.re"
+#line 209 "../src/options/parse_opts.re"
 
 
 opt_incpath:
 
-#line 3111 "src/options/parse_opts.cc"
+#line 3117 "src/options/parse_opts.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -3149,25 +3155,25 @@ opt_incpath:
        if (yych != '-') goto yy772;
 yy770:
        ++YYCURSOR;
-#line 207 "../src/options/parse_opts.re"
-       { ERROR("bad argument to option -I: %s", *argv); }
-#line 3155 "src/options/parse_opts.cc"
+#line 213 "../src/options/parse_opts.re"
+       { ERRARG("-I", "filename", *argv); }
+#line 3161 "src/options/parse_opts.cc"
 yy772:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yybm[0+yych] & 128) {
                goto yy772;
        }
        ++YYCURSOR;
-#line 208 "../src/options/parse_opts.re"
+#line 214 "../src/options/parse_opts.re"
        { globopts.incpaths.push_back(*argv); goto opt; }
-#line 3164 "src/options/parse_opts.cc"
+#line 3170 "src/options/parse_opts.cc"
 }
-#line 209 "../src/options/parse_opts.re"
+#line 215 "../src/options/parse_opts.re"
 
 
 opt_encoding_policy:
 
-#line 3171 "src/options/parse_opts.cc"
+#line 3177 "src/options/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
@@ -3179,12 +3185,9 @@ opt_encoding_policy:
        }
        ++YYCURSOR;
 yy779:
-#line 213 "../src/options/parse_opts.re"
-       {
-        ERROR("bad argument to option --encoding-policy "
-            "(expected: ignore | substitute | fail): %s", *argv);
-    }
-#line 3188 "src/options/parse_opts.cc"
+#line 219 "../src/options/parse_opts.re"
+       { ERRARG("--encoding-policy", "ignore | substitute | fail", *argv); }
+#line 3191 "src/options/parse_opts.cc"
 yy780:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'a') goto yy783;
@@ -3237,9 +3240,9 @@ yy792:
        goto yy784;
 yy793:
        ++YYCURSOR;
-#line 219 "../src/options/parse_opts.re"
+#line 222 "../src/options/parse_opts.re"
        { opts.set_encoding_policy (Enc::POLICY_FAIL);       goto opt; }
-#line 3243 "src/options/parse_opts.cc"
+#line 3246 "src/options/parse_opts.cc"
 yy795:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'e') goto yy797;
@@ -3258,9 +3261,9 @@ yy798:
        goto yy784;
 yy799:
        ++YYCURSOR;
-#line 217 "../src/options/parse_opts.re"
+#line 220 "../src/options/parse_opts.re"
        { opts.set_encoding_policy (Enc::POLICY_IGNORE);     goto opt; }
-#line 3264 "src/options/parse_opts.cc"
+#line 3267 "src/options/parse_opts.cc"
 yy801:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych != 'u') goto yy784;
@@ -3271,16 +3274,16 @@ yy801:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych >= 0x01) goto yy784;
        ++YYCURSOR;
-#line 218 "../src/options/parse_opts.re"
+#line 221 "../src/options/parse_opts.re"
        { opts.set_encoding_policy (Enc::POLICY_SUBSTITUTE); goto opt; }
-#line 3277 "src/options/parse_opts.cc"
+#line 3280 "src/options/parse_opts.cc"
 }
-#line 220 "../src/options/parse_opts.re"
+#line 223 "../src/options/parse_opts.re"
 
 
 opt_input:
 
-#line 3284 "src/options/parse_opts.cc"
+#line 3287 "src/options/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
@@ -3290,11 +3293,8 @@ opt_input:
 yy809:
        ++YYCURSOR;
 yy810:
-#line 224 "../src/options/parse_opts.re"
-       {
-        ERROR("bad argument to option --input "
-            "(expected: default | custom): %s", *argv);
-    }
+#line 227 "../src/options/parse_opts.re"
+       { ERRARG("--input", "default | custom", *argv); }
 #line 3299 "src/options/parse_opts.cc"
 yy811:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
@@ -3373,11 +3373,8 @@ opt_empty_class:
        ++YYCURSOR;
 yy832:
 #line 234 "../src/options/parse_opts.re"
-       {
-        ERROR("bad argument to option --empty-class "
-            "(expected: match-empty | match-none | error): %s", *argv);
-    }
-#line 3381 "src/options/parse_opts.cc"
+       { ERRARG("--empty-class", "match-empty | match-none | error", *argv); }
+#line 3378 "src/options/parse_opts.cc"
 yy833:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'r') goto yy835;
@@ -3422,9 +3419,9 @@ yy843:
        goto yy836;
 yy844:
        ++YYCURSOR;
-#line 240 "../src/options/parse_opts.re"
+#line 237 "../src/options/parse_opts.re"
        { opts.set_empty_class_policy (EMPTY_CLASS_ERROR);       goto opt; }
-#line 3428 "src/options/parse_opts.cc"
+#line 3425 "src/options/parse_opts.cc"
 yy846:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'e') goto yy847;
@@ -3468,21 +3465,21 @@ yy855:
        goto yy836;
 yy856:
        ++YYCURSOR;
-#line 239 "../src/options/parse_opts.re"
+#line 236 "../src/options/parse_opts.re"
        { opts.set_empty_class_policy (EMPTY_CLASS_MATCH_NONE);  goto opt; }
-#line 3474 "src/options/parse_opts.cc"
+#line 3471 "src/options/parse_opts.cc"
 yy858:
        ++YYCURSOR;
-#line 238 "../src/options/parse_opts.re"
+#line 235 "../src/options/parse_opts.re"
        { opts.set_empty_class_policy (EMPTY_CLASS_MATCH_EMPTY); goto opt; }
-#line 3479 "src/options/parse_opts.cc"
+#line 3476 "src/options/parse_opts.cc"
 }
-#line 241 "../src/options/parse_opts.re"
+#line 238 "../src/options/parse_opts.re"
 
 
 opt_location_format:
 
-#line 3486 "src/options/parse_opts.cc"
+#line 3483 "src/options/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
@@ -3490,11 +3487,9 @@ opt_location_format:
        if (yych == 'm') goto yy865;
        ++YYCURSOR;
 yy863:
-#line 245 "../src/options/parse_opts.re"
-       {
-        ERROR("bad argument to option --location-format (expected: gnu | msvc): %s", *argv);
-    }
-#line 3498 "src/options/parse_opts.cc"
+#line 242 "../src/options/parse_opts.re"
+       { ERRARG("--location-format", "gnu | msvc", *argv); }
+#line 3493 "src/options/parse_opts.cc"
 yy864:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'n') goto yy866;
@@ -3523,23 +3518,23 @@ yy870:
        goto yy867;
 yy871:
        ++YYCURSOR;
-#line 248 "../src/options/parse_opts.re"
+#line 243 "../src/options/parse_opts.re"
        { msg.locfmt = LOCFMT_GNU;  goto opt; }
-#line 3529 "src/options/parse_opts.cc"
+#line 3524 "src/options/parse_opts.cc"
 yy873:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych >= 0x01) goto yy867;
        ++YYCURSOR;
-#line 249 "../src/options/parse_opts.re"
+#line 244 "../src/options/parse_opts.re"
        { msg.locfmt = LOCFMT_MSVC; goto opt; }
-#line 3536 "src/options/parse_opts.cc"
+#line 3531 "src/options/parse_opts.cc"
 }
-#line 250 "../src/options/parse_opts.re"
+#line 245 "../src/options/parse_opts.re"
 
 
 opt_dfa_minimization:
 
-#line 3543 "src/options/parse_opts.cc"
+#line 3538 "src/options/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
@@ -3547,12 +3542,9 @@ opt_dfa_minimization:
        if (yych == 't') goto yy881;
        ++YYCURSOR;
 yy879:
-#line 254 "../src/options/parse_opts.re"
-       {
-        ERROR("bad argument to option --dfa-minimization "
-            "(expected: table | moore): %s", *argv);
-    }
-#line 3556 "src/options/parse_opts.cc"
+#line 249 "../src/options/parse_opts.re"
+       { ERRARG("--dfa-minimization", "table | moore", *argv); }
+#line 3548 "src/options/parse_opts.cc"
 yy880:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'o') goto yy882;
@@ -3597,33 +3589,30 @@ yy890:
        goto yy883;
 yy891:
        ++YYCURSOR;
-#line 259 "../src/options/parse_opts.re"
+#line 251 "../src/options/parse_opts.re"
        { globopts.dfa_minimization = DFA_MINIMIZATION_MOORE; goto opt; }
-#line 3603 "src/options/parse_opts.cc"
+#line 3595 "src/options/parse_opts.cc"
 yy893:
        ++YYCURSOR;
-#line 258 "../src/options/parse_opts.re"
+#line 250 "../src/options/parse_opts.re"
        { globopts.dfa_minimization = DFA_MINIMIZATION_TABLE; goto opt; }
-#line 3608 "src/options/parse_opts.cc"
+#line 3600 "src/options/parse_opts.cc"
 }
-#line 260 "../src/options/parse_opts.re"
+#line 252 "../src/options/parse_opts.re"
 
 
 opt_posix_closure:
 
-#line 3615 "src/options/parse_opts.cc"
+#line 3607 "src/options/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
        if (yych == 'g') goto yy899;
        ++YYCURSOR;
 yy898:
-#line 264 "../src/options/parse_opts.re"
-       {
-        ERROR("bad argument to option --posix_closure "
-            "(expected: gor1 | gtop): %s", *argv);
-    }
-#line 3627 "src/options/parse_opts.cc"
+#line 256 "../src/options/parse_opts.re"
+       { ERRARG("--posix-closure", "gor1 | gtop", *argv); }
+#line 3616 "src/options/parse_opts.cc"
 yy899:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'o') goto yy900;
@@ -3657,16 +3646,16 @@ yy906:
        goto yy901;
 yy907:
        ++YYCURSOR;
-#line 268 "../src/options/parse_opts.re"
+#line 257 "../src/options/parse_opts.re"
        { globopts.posix_closure = POSIX_CLOSURE_GOR1; goto opt; }
-#line 3663 "src/options/parse_opts.cc"
+#line 3652 "src/options/parse_opts.cc"
 yy909:
        ++YYCURSOR;
-#line 269 "../src/options/parse_opts.re"
+#line 258 "../src/options/parse_opts.re"
        { globopts.posix_closure = POSIX_CLOSURE_GTOP; goto opt; }
-#line 3668 "src/options/parse_opts.cc"
+#line 3657 "src/options/parse_opts.cc"
 }
-#line 270 "../src/options/parse_opts.re"
+#line 259 "../src/options/parse_opts.re"
 
 
 end:
@@ -3680,6 +3669,7 @@ end:
 
 #undef NEXT_ARG
 #undef ERROR
+#undef ERRARG
 #undef YYCTYPE
 }
 
index 94257f6dcb36dd5ef6a06873d69d31dd9ac81b12..3ce795103d51df5f10f2ac792156468037096049 100644 (file)
@@ -17,14 +17,20 @@ parse_opts_t parse_opts(char **argv, conopt_t &globopts, Opt &opts, Msg &msg)
 {
 #define YYCTYPE unsigned char
 
-#define NEXT_ARG(option, label) \
-    do { \
-        if (next (YYCURSOR, argv)) goto label; \
-        else { error_arg(option); return EXIT_FAIL; } \
-    } while(0)
+#define NEXT_ARG(option, label) do { \
+    if (next (YYCURSOR, argv)) goto label; \
+    else { error_arg(option); return EXIT_FAIL; } \
+} while(0)
 
-#define ERROR(msg, arg) \
-    do { error(msg, arg); return EXIT_FAIL; } while(0)
+#define ERROR(msg, arg) do { \
+    error(msg, arg); \
+    return EXIT_FAIL; \
+} while(0)
+
+#define ERRARG(opt, exp, arg) do { \
+    error("bad argument '%s' to option %s <%s>", arg, opt, exp); \
+    return EXIT_FAIL; \
+} while(0)
 
     char *YYCURSOR, *YYMARKER;
     Warn::option_t option;
@@ -192,28 +198,25 @@ opt_long:
 
 opt_output:
 /*!re2c
-    * { ERROR("bad argument to option -o, --output: %s", *argv); }
+    * { ERRARG("-o, --output", "filename", *argv); }
     filename end { opts.set_output_file (*argv); goto opt; }
 */
 
 opt_header:
 /*!re2c
-    * { ERROR("bad argument to option -t, --type-header: %s", *argv); }
+    * { ERRARG("-t, --type-header", "filename", *argv); }
     filename end { opts.set_header_file (*argv); goto opt; }
 */
 
 opt_incpath:
 /*!re2c
-    * { ERROR("bad argument to option -I: %s", *argv); }
+    * { ERRARG("-I", "filename", *argv); }
     filename end { globopts.incpaths.push_back(*argv); goto opt; }
 */
 
 opt_encoding_policy:
 /*!re2c
-    * {
-        ERROR("bad argument to option --encoding-policy "
-            "(expected: ignore | substitute | fail): %s", *argv);
-    }
+    * { ERRARG("--encoding-policy", "ignore | substitute | fail", *argv); }
     "ignore"     end { opts.set_encoding_policy (Enc::POLICY_IGNORE);     goto opt; }
     "substitute" end { opts.set_encoding_policy (Enc::POLICY_SUBSTITUTE); goto opt; }
     "fail"       end { opts.set_encoding_policy (Enc::POLICY_FAIL);       goto opt; }
@@ -221,20 +224,14 @@ opt_encoding_policy:
 
 opt_input:
 /*!re2c
-    * {
-        ERROR("bad argument to option --input "
-            "(expected: default | custom): %s", *argv);
-    }
+    * { ERRARG("--input", "default | custom", *argv); }
     "default" end { opts.set_input_api(INPUT_DEFAULT); goto opt; }
     "custom"  end { opts.set_input_api(INPUT_CUSTOM);  goto opt; }
 */
 
 opt_empty_class:
 /*!re2c
-    * {
-        ERROR("bad argument to option --empty-class "
-            "(expected: match-empty | match-none | error): %s", *argv);
-    }
+    * { ERRARG("--empty-class", "match-empty | match-none | error", *argv); }
     "match-empty" end { opts.set_empty_class_policy (EMPTY_CLASS_MATCH_EMPTY); goto opt; }
     "match-none"  end { opts.set_empty_class_policy (EMPTY_CLASS_MATCH_NONE);  goto opt; }
     "error"       end { opts.set_empty_class_policy (EMPTY_CLASS_ERROR);       goto opt; }
@@ -242,29 +239,21 @@ opt_empty_class:
 
 opt_location_format:
 /*!re2c
-    * {
-        ERROR("bad argument to option --location-format (expected: gnu | msvc): %s", *argv);
-    }
+    * { ERRARG("--location-format", "gnu | msvc", *argv); }
     "gnu"  end { msg.locfmt = LOCFMT_GNU;  goto opt; }
     "msvc" end { msg.locfmt = LOCFMT_MSVC; goto opt; }
 */
 
 opt_dfa_minimization:
 /*!re2c
-    * {
-        ERROR("bad argument to option --dfa-minimization "
-            "(expected: table | moore): %s", *argv);
-    }
+    * { ERRARG("--dfa-minimization", "table | moore", *argv); }
     "table" end { globopts.dfa_minimization = DFA_MINIMIZATION_TABLE; goto opt; }
     "moore" end { globopts.dfa_minimization = DFA_MINIMIZATION_MOORE; goto opt; }
 */
 
 opt_posix_closure:
 /*!re2c
-    * {
-        ERROR("bad argument to option --posix_closure "
-            "(expected: gor1 | gtop): %s", *argv);
-    }
+    * { ERRARG("--posix-closure", "gor1 | gtop", *argv); }
     "gor1" end { globopts.posix_closure = POSIX_CLOSURE_GOR1; goto opt; }
     "gtop" end { globopts.posix_closure = POSIX_CLOSURE_GTOP; goto opt; }
 */
@@ -280,6 +269,7 @@ end:
 
 #undef NEXT_ARG
 #undef ERROR
+#undef ERRARG
 #undef YYCTYPE
 }
 
diff --git a/re2c/test/messages/msg_04.--location-format(xxx).c b/re2c/test/messages/msg_04.--location-format(xxx).c
new file mode 100644 (file)
index 0000000..4be670d
--- /dev/null
@@ -0,0 +1 @@
+re2c: error: bad argument 'xxx' to option --location-format <gnu | msvc>
diff --git a/re2c/test/messages/msg_04.--location-format(xxx).re b/re2c/test/messages/msg_04.--location-format(xxx).re
new file mode 100644 (file)
index 0000000..83cfcec
--- /dev/null
@@ -0,0 +1 @@
+/*!re2c <c> "a" {
\ No newline at end of file
diff --git a/re2c/test/messages/msg_05.--dfa-minimization(xxx).c b/re2c/test/messages/msg_05.--dfa-minimization(xxx).c
new file mode 100644 (file)
index 0000000..1bfabf1
--- /dev/null
@@ -0,0 +1 @@
+re2c: error: bad argument 'xxx' to option --dfa-minimization <table | moore>
diff --git a/re2c/test/messages/msg_05.--dfa-minimization(xxx).re b/re2c/test/messages/msg_05.--dfa-minimization(xxx).re
new file mode 100644 (file)
index 0000000..83cfcec
--- /dev/null
@@ -0,0 +1 @@
+/*!re2c <c> "a" {
\ No newline at end of file
diff --git a/re2c/test/messages/msg_06.--posix-closure(xxx).c b/re2c/test/messages/msg_06.--posix-closure(xxx).c
new file mode 100644 (file)
index 0000000..756f233
--- /dev/null
@@ -0,0 +1 @@
+re2c: error: bad argument 'xxx' to option --posix-closure <gor1 | gtop>
diff --git a/re2c/test/messages/msg_06.--posix-closure(xxx).re b/re2c/test/messages/msg_06.--posix-closure(xxx).re
new file mode 100644 (file)
index 0000000..83cfcec
--- /dev/null
@@ -0,0 +1 @@
+/*!re2c <c> "a" {
\ No newline at end of file
diff --git a/re2c/test/messages/msg_07.--empty-class(xxx).c b/re2c/test/messages/msg_07.--empty-class(xxx).c
new file mode 100644 (file)
index 0000000..650ce8f
--- /dev/null
@@ -0,0 +1 @@
+re2c: error: bad argument 'xxx' to option --empty-class <match-empty | match-none | error>
diff --git a/re2c/test/messages/msg_07.--empty-class(xxx).re b/re2c/test/messages/msg_07.--empty-class(xxx).re
new file mode 100644 (file)
index 0000000..83cfcec
--- /dev/null
@@ -0,0 +1 @@
+/*!re2c <c> "a" {
\ No newline at end of file
diff --git a/re2c/test/messages/msg_08.--input(xxx).c b/re2c/test/messages/msg_08.--input(xxx).c
new file mode 100644 (file)
index 0000000..3965748
--- /dev/null
@@ -0,0 +1 @@
+re2c: error: bad argument 'xxx' to option --input <default | custom>
diff --git a/re2c/test/messages/msg_08.--input(xxx).re b/re2c/test/messages/msg_08.--input(xxx).re
new file mode 100644 (file)
index 0000000..83cfcec
--- /dev/null
@@ -0,0 +1 @@
+/*!re2c <c> "a" {
\ No newline at end of file
diff --git a/re2c/test/messages/msg_09.--encoding-policy(xxx).c b/re2c/test/messages/msg_09.--encoding-policy(xxx).c
new file mode 100644 (file)
index 0000000..5876ff2
--- /dev/null
@@ -0,0 +1 @@
+re2c: error: bad argument 'xxx' to option --encoding-policy <ignore | substitute | fail>
diff --git a/re2c/test/messages/msg_09.--encoding-policy(xxx).re b/re2c/test/messages/msg_09.--encoding-policy(xxx).re
new file mode 100644 (file)
index 0000000..83cfcec
--- /dev/null
@@ -0,0 +1 @@
+/*!re2c <c> "a" {
\ No newline at end of file
diff --git a/re2c/test/messages/msg_10.--output(-).c b/re2c/test/messages/msg_10.--output(-).c
new file mode 100644 (file)
index 0000000..22f5668
--- /dev/null
@@ -0,0 +1 @@
+re2c: error: bad argument '-' to option -o, --output <filename>
diff --git a/re2c/test/messages/msg_10.--output(-).re b/re2c/test/messages/msg_10.--output(-).re
new file mode 100644 (file)
index 0000000..83cfcec
--- /dev/null
@@ -0,0 +1 @@
+/*!re2c <c> "a" {
\ No newline at end of file
diff --git a/re2c/test/messages/msg_11.--type-header(-).c b/re2c/test/messages/msg_11.--type-header(-).c
new file mode 100644 (file)
index 0000000..66c34aa
--- /dev/null
@@ -0,0 +1 @@
+re2c: error: bad argument '-' to option -t, --type-header <filename>
diff --git a/re2c/test/messages/msg_11.--type-header(-).re b/re2c/test/messages/msg_11.--type-header(-).re
new file mode 100644 (file)
index 0000000..83cfcec
--- /dev/null
@@ -0,0 +1 @@
+/*!re2c <c> "a" {
\ No newline at end of file