]> granicus.if.org Git - re2c/commitdiff
Added warning '-Wcondition-order'.
authorUlya Trofimovich <skvadrik@gmail.com>
Thu, 27 Aug 2015 11:42:24 +0000 (12:42 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Thu, 27 Aug 2015 11:42:24 +0000 (12:42 +0100)
See parent commit 8c1fe4f0113685b599bf906360814e4715e05447
"Simplified tracking of condition order." for details.

49 files changed:
re2c/bootstrap/src/conf/parse_opts.cc
re2c/src/codegen/emit_action.cc
re2c/src/codegen/emit_dfa.cc
re2c/src/codegen/output.cc
re2c/src/codegen/output.h
re2c/src/conf/parse_opts.re
re2c/src/conf/warn.cc
re2c/src/conf/warn.h
re2c/test/condition_02.cg.c
re2c/test/condition_03.cg.c
re2c/test/condition_04.cg.c
re2c/test/condition_05.cg.c
re2c/test/condition_05.cs.c
re2c/test/condition_11.cg.c
re2c/test/condition_13.cg.c
re2c/test/condtype.c.c [new file with mode: 0644]
re2c/test/condtype.c.re [new file with mode: 0644]
re2c/test/condtype.cg.c [new file with mode: 0644]
re2c/test/condtype.cg.re [new file with mode: 0644]
re2c/test/condtype.cgtcondtype.cg.h.c [new file with mode: 0644]
re2c/test/condtype.cgtcondtype.cg.h.h [new file with mode: 0644]
re2c/test/condtype.cgtcondtype.cg.h.re [new file with mode: 0644]
re2c/test/condtype.cs.c [new file with mode: 0644]
re2c/test/condtype.cs.re [new file with mode: 0644]
re2c/test/condtype.cstcondtype.cs.h.c [new file with mode: 0644]
re2c/test/condtype.cstcondtype.cs.h.h [new file with mode: 0644]
re2c/test/condtype.cstcondtype.cs.h.re [new file with mode: 0644]
re2c/test/condtype.ctcondtype.c.h.c [new file with mode: 0644]
re2c/test/condtype.ctcondtype.c.h.h [new file with mode: 0644]
re2c/test/condtype.ctcondtype.c.h.re [new file with mode: 0644]
re2c/test/condtype_decl.c.c [new file with mode: 0644]
re2c/test/condtype_decl.c.re [new file with mode: 0644]
re2c/test/condtype_decl.cg.c [new file with mode: 0644]
re2c/test/condtype_decl.cg.re [new file with mode: 0644]
re2c/test/condtype_decl.cs.c [new file with mode: 0644]
re2c/test/condtype_decl.cs.re [new file with mode: 0644]
re2c/test/condtype_single.c.c [new file with mode: 0644]
re2c/test/condtype_single.c.re [new file with mode: 0644]
re2c/test/condtype_single.cg.c [new file with mode: 0644]
re2c/test/condtype_single.cg.re [new file with mode: 0644]
re2c/test/condtype_single.cs.c [new file with mode: 0644]
re2c/test/condtype_single.cs.re [new file with mode: 0644]
re2c/test/php20140822_zend_language_scanner.igcFd.c
re2c/test/php20140822_zend_language_scanner_crlf.igcFd.c
re2c/test/php20150211_json_scanner.igc.c
re2c/test/php20150211_phpdbg_lexer.igcFd.c
re2c/test/php20150211_zend_ini_scanner.igcFd--case-inverted.c
re2c/test/php20150211_zend_ini_scanner_trimmed.icFwb.c
re2c/test/php20150211_zend_language_scanner.igcFd--case-inverted.c

index eaa9cc6e3cdba8c49e55f191673fcfcaaf2aca37..283b6dd0211115ef1083b75f4df04a123540891f 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.14.3 on Tue Aug 18 17:43:02 2015 */
+/* Generated by re2c 0.14.3 on Wed Aug 26 15:05:25 2015 */
 #line 1 "../src/conf/parse_opts.re"
 #include <stdio.h>
 
@@ -225,11 +225,12 @@ opt_warn:
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
        switch (yych) {
-       case 'e':       goto yy46;
-       case 'm':       goto yy47;
-       case 'n':       goto yy48;
-       case 's':       goto yy49;
-       case 'u':       goto yy50;
+       case 'c':       goto yy46;
+       case 'e':       goto yy47;
+       case 'm':       goto yy48;
+       case 'n':       goto yy49;
+       case 's':       goto yy50;
+       case 'u':       goto yy51;
        default:        goto yy44;
        }
 yy44:
@@ -240,1167 +241,1204 @@ yy45:
                error ("bad warning: %s", *argv);
                return EXIT_FAIL;
        }
-#line 244 "src/conf/parse_opts.cc"
+#line 245 "src/conf/parse_opts.cc"
 yy46:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'm') goto yy114;
+       if (yych == 'o') goto yy137;
        goto yy45;
 yy47:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy95;
+       if (yych == 'm') goto yy115;
        goto yy45;
 yy48:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy81;
+       if (yych == 'a') goto yy96;
        goto yy45;
 yy49:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'w') goto yy67;
+       if (yych == 'a') goto yy82;
        goto yy45;
 yy50:
+       yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
+       if (yych == 'w') goto yy68;
+       goto yy45;
+yy51:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych != 's') goto yy45;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy53;
-yy52:
+       if (yych == 'e') goto yy54;
+yy53:
        YYCURSOR = YYMARKER;
        goto yy45;
-yy53:
+yy54:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'l') goto yy52;
+       if (yych != 'l') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy52;
+       if (yych != 'e') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy52;
+       if (yych != 's') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy52;
+       if (yych != 's') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy52;
+       if (yych != '-') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy52;
+       if (yych != 'e') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy52;
+       if (yych != 's') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'c') goto yy52;
+       if (yych != 'c') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy52;
+       if (yych != 'a') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy52;
+       if (yych != 'p') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy52;
+       if (yych != 'e') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy52;
+       if (yych >= 0x01) goto yy53;
        ++YYCURSOR;
-#line 82 "../src/conf/parse_opts.re"
+#line 83 "../src/conf/parse_opts.re"
        { warn.set (Warn::USELESS_ESCAPE,        option); goto opt; }
-#line 297 "src/conf/parse_opts.cc"
-yy67:
+#line 302 "src/conf/parse_opts.cc"
+yy68:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy52;
+       if (yych != 'a') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy52;
+       if (yych != 'p') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy52;
+       if (yych != 'p') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy52;
+       if (yych != 'e') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'd') goto yy52;
+       if (yych != 'd') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy52;
+       if (yych != '-') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy52;
+       if (yych != 'r') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy52;
+       if (yych != 'a') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy52;
+       if (yych != 'n') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'g') goto yy52;
+       if (yych != 'g') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy52;
+       if (yych != 'e') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy52;
+       if (yych >= 0x01) goto yy53;
        ++YYCURSOR;
-#line 81 "../src/conf/parse_opts.re"
+#line 82 "../src/conf/parse_opts.re"
        { warn.set (Warn::SWAPPED_RANGE,         option); goto opt; }
-#line 326 "src/conf/parse_opts.cc"
-yy81:
+#line 331 "src/conf/parse_opts.cc"
+yy82:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'k') goto yy52;
+       if (yych != 'k') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy52;
+       if (yych != 'e') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'd') goto yy52;
+       if (yych != 'd') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy52;
+       if (yych != '-') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'd') goto yy52;
+       if (yych != 'd') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy52;
+       if (yych != 'e') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'f') goto yy52;
+       if (yych != 'f') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy52;
+       if (yych != 'a') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy52;
+       if (yych != 'u') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'l') goto yy52;
+       if (yych != 'l') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy52;
+       if (yych != 't') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy52;
+       if (yych >= 0x01) goto yy53;
        ++YYCURSOR;
-#line 80 "../src/conf/parse_opts.re"
+#line 81 "../src/conf/parse_opts.re"
        { warn.set (Warn::NAKED_DEFAULT,         option); goto opt; }
-#line 355 "src/conf/parse_opts.cc"
-yy95:
+#line 360 "src/conf/parse_opts.cc"
+yy96:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy52;
+       if (yych != 't') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'c') goto yy52;
+       if (yych != 'c') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'h') goto yy52;
+       if (yych != 'h') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy52;
+       if (yych != '-') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy52;
+       if (yych != 'e') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'm') goto yy52;
+       if (yych != 'm') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy52;
+       if (yych != 'p') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy52;
+       if (yych != 't') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'y') goto yy52;
+       if (yych != 'y') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy52;
+       if (yych != '-') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy52;
+       if (yych != 's') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy52;
+       if (yych != 't') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy52;
+       if (yych != 'r') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy52;
+       if (yych != 'i') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy52;
+       if (yych != 'n') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'g') goto yy52;
+       if (yych != 'g') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy52;
+       if (yych >= 0x01) goto yy53;
        ++YYCURSOR;
-#line 79 "../src/conf/parse_opts.re"
+#line 80 "../src/conf/parse_opts.re"
        { warn.set (Warn::MATCH_EMPTY_STRING,    option); goto opt; }
-#line 394 "src/conf/parse_opts.cc"
-yy114:
+#line 399 "src/conf/parse_opts.cc"
+yy115:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy52;
+       if (yych != 'p') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy52;
+       if (yych != 't') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'y') goto yy52;
+       if (yych != 'y') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy52;
+       if (yych != '-') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'c') goto yy52;
+       if (yych != 'c') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'h') goto yy52;
+       if (yych != 'h') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy52;
+       if (yych != 'a') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy52;
+       if (yych != 'r') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy52;
+       if (yych != 'a') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'c') goto yy52;
+       if (yych != 'c') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy52;
+       if (yych != 't') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy52;
+       if (yych != 'e') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy52;
+       if (yych != 'r') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy52;
+       if (yych != '-') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'c') goto yy52;
+       if (yych != 'c') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'l') goto yy52;
+       if (yych != 'l') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy52;
+       if (yych != 'a') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy52;
+       if (yych != 's') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy52;
+       if (yych != 's') goto yy53;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy52;
+       if (yych >= 0x01) goto yy53;
        ++YYCURSOR;
-#line 78 "../src/conf/parse_opts.re"
+#line 79 "../src/conf/parse_opts.re"
        { warn.set (Warn::EMPTY_CHARACTER_CLASS, option); goto opt; }
-#line 439 "src/conf/parse_opts.cc"
+#line 444 "src/conf/parse_opts.cc"
+yy137:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych != 'n') goto yy53;
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych != 'd') goto yy53;
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych != 'i') goto yy53;
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych != 't') goto yy53;
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych != 'i') goto yy53;
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych != 'o') goto yy53;
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych != 'n') goto yy53;
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych != '-') goto yy53;
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych != 'o') goto yy53;
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych != 'r') goto yy53;
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych != 'd') goto yy53;
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych != 'e') goto yy53;
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych != 'r') goto yy53;
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych >= 0x01) goto yy53;
+       ++YYCURSOR;
+#line 78 "../src/conf/parse_opts.re"
+       { warn.set (Warn::CONDITION_ORDER,       option); goto opt; }
+#line 477 "src/conf/parse_opts.cc"
 }
-#line 83 "../src/conf/parse_opts.re"
+#line 84 "../src/conf/parse_opts.re"
 
 
 opt_short:
 
-#line 446 "src/conf/parse_opts.cc"
+#line 484 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 'c') {
                if (yych <= 'C') {
                        if (yych <= '7') {
-                               if (yych <= 0x00) goto yy138;
-                               if (yych == '1') goto yy142;
-                               goto yy140;
+                               if (yych <= 0x00) goto yy155;
+                               if (yych == '1') goto yy159;
+                               goto yy157;
                        } else {
-                               if (yych <= '8') goto yy144;
-                               if (yych == '?') goto yy146;
-                               goto yy140;
+                               if (yych <= '8') goto yy161;
+                               if (yych == '?') goto yy163;
+                               goto yy157;
                        }
                } else {
                        if (yych <= 'U') {
-                               if (yych <= 'D') goto yy148;
-                               if (yych == 'F') goto yy150;
-                               goto yy140;
+                               if (yych <= 'D') goto yy165;
+                               if (yych == 'F') goto yy167;
+                               goto yy157;
                        } else {
-                               if (yych <= 'V') goto yy152;
-                               if (yych <= 'a') goto yy140;
-                               if (yych <= 'b') goto yy154;
-                               goto yy156;
+                               if (yych <= 'V') goto yy169;
+                               if (yych <= 'a') goto yy157;
+                               if (yych <= 'b') goto yy171;
+                               goto yy173;
                        }
                }
        } else {
                if (yych <= 'o') {
                        if (yych <= 'g') {
-                               if (yych <= 'd') goto yy158;
-                               if (yych <= 'e') goto yy160;
-                               if (yych <= 'f') goto yy162;
-                               goto yy164;
+                               if (yych <= 'd') goto yy175;
+                               if (yych <= 'e') goto yy177;
+                               if (yych <= 'f') goto yy179;
+                               goto yy181;
                        } else {
-                               if (yych <= 'h') goto yy146;
-                               if (yych <= 'i') goto yy166;
-                               if (yych <= 'n') goto yy140;
-                               goto yy168;
+                               if (yych <= 'h') goto yy163;
+                               if (yych <= 'i') goto yy183;
+                               if (yych <= 'n') goto yy157;
+                               goto yy185;
                        }
                } else {
                        if (yych <= 't') {
-                               if (yych <= 'q') goto yy140;
-                               if (yych <= 'r') goto yy170;
-                               if (yych <= 's') goto yy172;
-                               goto yy174;
+                               if (yych <= 'q') goto yy157;
+                               if (yych <= 'r') goto yy187;
+                               if (yych <= 's') goto yy189;
+                               goto yy191;
                        } else {
                                if (yych <= 'v') {
-                                       if (yych <= 'u') goto yy176;
-                                       goto yy178;
+                                       if (yych <= 'u') goto yy193;
+                                       goto yy195;
                                } else {
-                                       if (yych <= 'w') goto yy180;
-                                       if (yych <= 'x') goto yy182;
-                                       goto yy140;
+                                       if (yych <= 'w') goto yy197;
+                                       if (yych <= 'x') goto yy199;
+                                       goto yy157;
                                }
                        }
                }
        }
-yy138:
+yy155:
        ++YYCURSOR;
-#line 92 "../src/conf/parse_opts.re"
+#line 93 "../src/conf/parse_opts.re"
        { goto opt; }
-#line 508 "src/conf/parse_opts.cc"
-yy140:
+#line 546 "src/conf/parse_opts.cc"
+yy157:
        ++YYCURSOR;
-#line 88 "../src/conf/parse_opts.re"
+#line 89 "../src/conf/parse_opts.re"
        {
                error ("bad short option: %s", *argv);
                return EXIT_FAIL;
        }
-#line 516 "src/conf/parse_opts.cc"
-yy142:
+#line 554 "src/conf/parse_opts.cc"
+yy159:
        ++YYCURSOR;
-#line 115 "../src/conf/parse_opts.re"
+#line 116 "../src/conf/parse_opts.re"
        { goto opt_short; }
-#line 521 "src/conf/parse_opts.cc"
-yy144:
+#line 559 "src/conf/parse_opts.cc"
+yy161:
        ++YYCURSOR;
-#line 110 "../src/conf/parse_opts.re"
+#line 111 "../src/conf/parse_opts.re"
        { if (!opts.utf_8 ())      { error_encoding (); return EXIT_FAIL; } goto opt_short; }
-#line 526 "src/conf/parse_opts.cc"
-yy146:
+#line 564 "src/conf/parse_opts.cc"
+yy163:
        ++YYCURSOR;
-#line 93 "../src/conf/parse_opts.re"
+#line 94 "../src/conf/parse_opts.re"
        { usage ();   return EXIT_OK; }
-#line 531 "src/conf/parse_opts.cc"
-yy148:
+#line 569 "src/conf/parse_opts.cc"
+yy165:
        ++YYCURSOR;
-#line 99 "../src/conf/parse_opts.re"
+#line 100 "../src/conf/parse_opts.re"
        { opts.emit_dot ();         goto opt_short; }
-#line 536 "src/conf/parse_opts.cc"
-yy150:
+#line 574 "src/conf/parse_opts.cc"
+yy167:
        ++YYCURSOR;
-#line 101 "../src/conf/parse_opts.re"
+#line 102 "../src/conf/parse_opts.re"
        { opts.flex_syntax ();      goto opt_short; }
-#line 541 "src/conf/parse_opts.cc"
-yy152:
+#line 579 "src/conf/parse_opts.cc"
+yy169:
        ++YYCURSOR;
-#line 95 "../src/conf/parse_opts.re"
+#line 96 "../src/conf/parse_opts.re"
        { vernum ();  return EXIT_OK; }
-#line 546 "src/conf/parse_opts.cc"
-yy154:
+#line 584 "src/conf/parse_opts.cc"
+yy171:
        ++YYCURSOR;
-#line 96 "../src/conf/parse_opts.re"
+#line 97 "../src/conf/parse_opts.re"
        { opts.bit_vectors ();      goto opt_short; }
-#line 551 "src/conf/parse_opts.cc"
-yy156:
+#line 589 "src/conf/parse_opts.cc"
+yy173:
        ++YYCURSOR;
-#line 97 "../src/conf/parse_opts.re"
+#line 98 "../src/conf/parse_opts.re"
        { opts.start_conditions (); goto opt_short; }
-#line 556 "src/conf/parse_opts.cc"
-yy158:
+#line 594 "src/conf/parse_opts.cc"
+yy175:
        ++YYCURSOR;
-#line 98 "../src/conf/parse_opts.re"
+#line 99 "../src/conf/parse_opts.re"
        { opts.debug_output ();     goto opt_short; }
-#line 561 "src/conf/parse_opts.cc"
-yy160:
+#line 599 "src/conf/parse_opts.cc"
+yy177:
        ++YYCURSOR;
-#line 106 "../src/conf/parse_opts.re"
+#line 107 "../src/conf/parse_opts.re"
        { if (!opts.ecb ())        { error_encoding (); return EXIT_FAIL; } goto opt_short; }
-#line 566 "src/conf/parse_opts.cc"
-yy162:
+#line 604 "src/conf/parse_opts.cc"
+yy179:
        ++YYCURSOR;
-#line 100 "../src/conf/parse_opts.re"
+#line 101 "../src/conf/parse_opts.re"
        { opts.storable_state ();   goto opt_short; }
-#line 571 "src/conf/parse_opts.cc"
-yy164:
+#line 609 "src/conf/parse_opts.cc"
+yy181:
        ++YYCURSOR;
-#line 102 "../src/conf/parse_opts.re"
+#line 103 "../src/conf/parse_opts.re"
        { opts.computed_gotos ();   goto opt_short; }
-#line 576 "src/conf/parse_opts.cc"
-yy166:
+#line 614 "src/conf/parse_opts.cc"
+yy183:
        ++YYCURSOR;
-#line 103 "../src/conf/parse_opts.re"
+#line 104 "../src/conf/parse_opts.re"
        { opts.no_debug_info ();    goto opt_short; }
-#line 581 "src/conf/parse_opts.cc"
-yy168:
+#line 619 "src/conf/parse_opts.cc"
+yy185:
        ++YYCURSOR;
-       if ((yych = (YYCTYPE)*YYCURSOR) <= 0x00) goto yy186;
-#line 112 "../src/conf/parse_opts.re"
+       if ((yych = (YYCTYPE)*YYCURSOR) <= 0x00) goto yy203;
+#line 113 "../src/conf/parse_opts.re"
        { *argv = YYCURSOR;                                                             goto opt_output; }
-#line 587 "src/conf/parse_opts.cc"
-yy170:
+#line 625 "src/conf/parse_opts.cc"
+yy187:
        ++YYCURSOR;
-#line 104 "../src/conf/parse_opts.re"
+#line 105 "../src/conf/parse_opts.re"
        { opts.reusable ();         goto opt_short; }
-#line 592 "src/conf/parse_opts.cc"
-yy172:
+#line 630 "src/conf/parse_opts.cc"
+yy189:
        ++YYCURSOR;
-#line 105 "../src/conf/parse_opts.re"
+#line 106 "../src/conf/parse_opts.re"
        { opts.nested_ifs ();       goto opt_short; }
-#line 597 "src/conf/parse_opts.cc"
-yy174:
+#line 635 "src/conf/parse_opts.cc"
+yy191:
        ++YYCURSOR;
-       if ((yych = (YYCTYPE)*YYCURSOR) <= 0x00) goto yy184;
-#line 114 "../src/conf/parse_opts.re"
+       if ((yych = (YYCTYPE)*YYCURSOR) <= 0x00) goto yy201;
+#line 115 "../src/conf/parse_opts.re"
        { *argv = YYCURSOR;                                                                  goto opt_header; }
-#line 603 "src/conf/parse_opts.cc"
-yy176:
+#line 641 "src/conf/parse_opts.cc"
+yy193:
        ++YYCURSOR;
-#line 107 "../src/conf/parse_opts.re"
+#line 108 "../src/conf/parse_opts.re"
        { if (!opts.unicode ())    { error_encoding (); return EXIT_FAIL; } goto opt_short; }
-#line 608 "src/conf/parse_opts.cc"
-yy178:
+#line 646 "src/conf/parse_opts.cc"
+yy195:
        ++YYCURSOR;
-#line 94 "../src/conf/parse_opts.re"
+#line 95 "../src/conf/parse_opts.re"
        { version (); return EXIT_OK; }
-#line 613 "src/conf/parse_opts.cc"
-yy180:
+#line 651 "src/conf/parse_opts.cc"
+yy197:
        ++YYCURSOR;
-#line 108 "../src/conf/parse_opts.re"
+#line 109 "../src/conf/parse_opts.re"
        { if (!opts.wide_chars ()) { error_encoding (); return EXIT_FAIL; } goto opt_short; }
-#line 618 "src/conf/parse_opts.cc"
-yy182:
+#line 656 "src/conf/parse_opts.cc"
+yy199:
        ++YYCURSOR;
-#line 109 "../src/conf/parse_opts.re"
+#line 110 "../src/conf/parse_opts.re"
        { if (!opts.utf_16 ())     { error_encoding (); return EXIT_FAIL; } goto opt_short; }
-#line 623 "src/conf/parse_opts.cc"
-yy184:
+#line 661 "src/conf/parse_opts.cc"
+yy201:
        ++YYCURSOR;
-#line 113 "../src/conf/parse_opts.re"
+#line 114 "../src/conf/parse_opts.re"
        { if (!next (YYCURSOR, argv)) { error_arg ("-t, --type-header"); return EXIT_FAIL; } goto opt_header; }
-#line 628 "src/conf/parse_opts.cc"
-yy186:
+#line 666 "src/conf/parse_opts.cc"
+yy203:
        ++YYCURSOR;
-#line 111 "../src/conf/parse_opts.re"
+#line 112 "../src/conf/parse_opts.re"
        { if (!next (YYCURSOR, argv)) { error_arg ("-o, --output"); return EXIT_FAIL; } goto opt_output; }
-#line 633 "src/conf/parse_opts.cc"
+#line 671 "src/conf/parse_opts.cc"
 }
-#line 116 "../src/conf/parse_opts.re"
+#line 117 "../src/conf/parse_opts.re"
 
 
 opt_long:
 
-#line 640 "src/conf/parse_opts.cc"
+#line 678 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
        switch (yych) {
-       case 'b':       goto yy192;
-       case 'c':       goto yy193;
-       case 'd':       goto yy194;
-       case 'e':       goto yy195;
-       case 'f':       goto yy196;
-       case 'h':       goto yy197;
-       case 'i':       goto yy198;
-       case 'n':       goto yy199;
-       case 'o':       goto yy200;
-       case 'r':       goto yy201;
-       case 's':       goto yy202;
-       case 't':       goto yy203;
-       case 'u':       goto yy204;
-       case 'v':       goto yy205;
-       case 'w':       goto yy206;
-       default:        goto yy190;
+       case 'b':       goto yy209;
+       case 'c':       goto yy210;
+       case 'd':       goto yy211;
+       case 'e':       goto yy212;
+       case 'f':       goto yy213;
+       case 'h':       goto yy214;
+       case 'i':       goto yy215;
+       case 'n':       goto yy216;
+       case 'o':       goto yy217;
+       case 'r':       goto yy218;
+       case 's':       goto yy219;
+       case 't':       goto yy220;
+       case 'u':       goto yy221;
+       case 'v':       goto yy222;
+       case 'w':       goto yy223;
+       default:        goto yy207;
        }
-yy190:
+yy207:
        ++YYCURSOR;
-yy191:
-#line 121 "../src/conf/parse_opts.re"
+yy208:
+#line 122 "../src/conf/parse_opts.re"
        {
                error ("bad long option: %s", *argv);
                return EXIT_FAIL;
        }
-#line 670 "src/conf/parse_opts.cc"
-yy192:
+#line 708 "src/conf/parse_opts.cc"
+yy209:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'i') goto yy488;
-       goto yy191;
-yy193:
+       if (yych == 'i') goto yy505;
+       goto yy208;
+yy210:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy448;
-       if (yych == 'o') goto yy449;
-       goto yy191;
-yy194:
+       if (yych == 'a') goto yy465;
+       if (yych == 'o') goto yy466;
+       goto yy208;
+yy211:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy435;
-       goto yy191;
-yy195:
+       if (yych == 'e') goto yy452;
+       goto yy208;
+yy212:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= 'l') {
-               if (yych == 'c') goto yy397;
-               goto yy191;
+               if (yych == 'c') goto yy414;
+               goto yy208;
        } else {
-               if (yych <= 'm') goto yy395;
-               if (yych <= 'n') goto yy396;
-               goto yy191;
+               if (yych <= 'm') goto yy412;
+               if (yych <= 'n') goto yy413;
+               goto yy208;
        }
-yy196:
+yy213:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'l') goto yy383;
-       goto yy191;
-yy197:
+       if (yych == 'l') goto yy400;
+       goto yy208;
+yy214:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy378;
-       goto yy191;
-yy198:
+       if (yych == 'e') goto yy395;
+       goto yy208;
+yy215:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'n') goto yy372;
-       goto yy191;
-yy199:
+       if (yych == 'n') goto yy389;
+       goto yy208;
+yy216:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy331;
-       if (yych == 'o') goto yy330;
-       goto yy191;
-yy200:
+       if (yych == 'e') goto yy348;
+       if (yych == 'o') goto yy347;
+       goto yy208;
+yy217:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'u') goto yy323;
-       goto yy191;
-yy201:
+       if (yych == 'u') goto yy340;
+       goto yy208;
+yy218:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy314;
-       goto yy191;
-yy202:
+       if (yych == 'e') goto yy331;
+       goto yy208;
+yy219:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= 'j') {
-               if (yych == 'i') goto yy262;
-               goto yy191;
+               if (yych == 'i') goto yy279;
+               goto yy208;
        } else {
-               if (yych <= 'k') goto yy263;
-               if (yych == 't') goto yy264;
-               goto yy191;
+               if (yych <= 'k') goto yy280;
+               if (yych == 't') goto yy281;
+               goto yy208;
        }
-yy203:
+yy220:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'y') goto yy250;
-       goto yy191;
-yy204:
+       if (yych == 'y') goto yy267;
+       goto yy208;
+yy221:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'n') goto yy233;
-       if (yych == 't') goto yy232;
-       goto yy191;
-yy205:
+       if (yych == 'n') goto yy250;
+       if (yych == 't') goto yy249;
+       goto yy208;
+yy222:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy219;
-       goto yy191;
-yy206:
+       if (yych == 'e') goto yy236;
+       goto yy208;
+yy223:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych != 'i') goto yy191;
+       if (yych != 'i') goto yy208;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy209;
-yy208:
+       if (yych == 'd') goto yy226;
+yy225:
        YYCURSOR = YYMARKER;
-       goto yy191;
-yy209:
+       goto yy208;
+yy226:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'c') goto yy208;
+       if (yych != 'c') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'h') goto yy208;
+       if (yych != 'h') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy208;
+       if (yych != 'a') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy208;
+       if (yych != 'r') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 144 "../src/conf/parse_opts.re"
+#line 145 "../src/conf/parse_opts.re"
        { if (!opts.wide_chars ()) { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 770 "src/conf/parse_opts.cc"
-yy219:
+#line 808 "src/conf/parse_opts.cc"
+yy236:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy208;
+       if (yych != 'r') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy221;
-       if (yych == 's') goto yy222;
-       goto yy208;
-yy221:
+       if (yych == 'n') goto yy238;
+       if (yych == 's') goto yy239;
+       goto yy225;
+yy238:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy228;
-       goto yy208;
-yy222:
+       if (yych == 'u') goto yy245;
+       goto yy225;
+yy239:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy208;
+       if (yych != 'i') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy208;
+       if (yych != 'n') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 126 "../src/conf/parse_opts.re"
+#line 127 "../src/conf/parse_opts.re"
        { version (); return EXIT_OK; }
-#line 794 "src/conf/parse_opts.cc"
-yy228:
+#line 832 "src/conf/parse_opts.cc"
+yy245:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'm') goto yy208;
+       if (yych != 'm') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 127 "../src/conf/parse_opts.re"
+#line 128 "../src/conf/parse_opts.re"
        { vernum ();  return EXIT_OK; }
-#line 803 "src/conf/parse_opts.cc"
-yy232:
+#line 841 "src/conf/parse_opts.cc"
+yy249:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy241;
-       goto yy208;
-yy233:
+       if (yych == 'f') goto yy258;
+       goto yy225;
+yy250:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy208;
+       if (yych != 'i') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'c') goto yy208;
+       if (yych != 'c') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'd') goto yy208;
+       if (yych != 'd') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 143 "../src/conf/parse_opts.re"
+#line 144 "../src/conf/parse_opts.re"
        { if (!opts.unicode ())    { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 824 "src/conf/parse_opts.cc"
-yy241:
+#line 862 "src/conf/parse_opts.cc"
+yy258:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '1') goto yy243;
-       if (yych == '8') goto yy244;
-       goto yy208;
-yy243:
+       if (yych == '1') goto yy260;
+       if (yych == '8') goto yy261;
+       goto yy225;
+yy260:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '6') goto yy247;
-       goto yy208;
-yy244:
+       if (yych == '6') goto yy264;
+       goto yy225;
+yy261:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 146 "../src/conf/parse_opts.re"
+#line 147 "../src/conf/parse_opts.re"
        { if (!opts.utf_8 ())      { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 842 "src/conf/parse_opts.cc"
-yy247:
+#line 880 "src/conf/parse_opts.cc"
+yy264:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 145 "../src/conf/parse_opts.re"
+#line 146 "../src/conf/parse_opts.re"
        { if (!opts.utf_16 ())     { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 849 "src/conf/parse_opts.cc"
-yy250:
+#line 887 "src/conf/parse_opts.cc"
+yy267:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy208;
+       if (yych != 'p') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'h') goto yy208;
+       if (yych != 'h') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy208;
+       if (yych != 'a') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'd') goto yy208;
+       if (yych != 'd') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy208;
+       if (yych != 'r') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 148 "../src/conf/parse_opts.re"
+#line 149 "../src/conf/parse_opts.re"
        { if (!next (YYCURSOR, argv)) { error_arg ("-t, --type-header"); return EXIT_FAIL; } goto opt_header; }
-#line 874 "src/conf/parse_opts.cc"
-yy262:
+#line 912 "src/conf/parse_opts.cc"
+yy279:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy303;
-       goto yy208;
-yy263:
+       if (yych == 'n') goto yy320;
+       goto yy225;
+yy280:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy295;
-       goto yy208;
-yy264:
+       if (yych == 'e') goto yy312;
+       goto yy225;
+yy281:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy265;
-       if (yych == 'o') goto yy266;
-       goto yy208;
-yy265:
+       if (yych == 'a') goto yy282;
+       if (yych == 'o') goto yy283;
+       goto yy225;
+yy282:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy280;
-       goto yy208;
-yy266:
+       if (yych == 'r') goto yy297;
+       goto yy225;
+yy283:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy208;
+       if (yych != 'r') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy208;
+       if (yych != 'a') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'b') goto yy208;
+       if (yych != 'b') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'l') goto yy208;
+       if (yych != 'l') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy208;
+       if (yych != 'a') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 132 "../src/conf/parse_opts.re"
+#line 133 "../src/conf/parse_opts.re"
        { opts.storable_state ();     goto opt; }
-#line 920 "src/conf/parse_opts.cc"
-yy280:
+#line 958 "src/conf/parse_opts.cc"
+yy297:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'c') goto yy208;
+       if (yych != 'c') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy208;
+       if (yych != 'n') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'd') goto yy208;
+       if (yych != 'd') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy208;
+       if (yych != 'i') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy208;
+       if (yych != 'i') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy208;
+       if (yych != 'n') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 129 "../src/conf/parse_opts.re"
+#line 130 "../src/conf/parse_opts.re"
        { opts.start_conditions ();   goto opt; }
-#line 951 "src/conf/parse_opts.cc"
-yy295:
+#line 989 "src/conf/parse_opts.cc"
+yy312:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'l') goto yy208;
+       if (yych != 'l') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy208;
+       if (yych != 'n') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 141 "../src/conf/parse_opts.re"
+#line 142 "../src/conf/parse_opts.re"
        { opts.skeleton ();           goto opt; }
-#line 968 "src/conf/parse_opts.cc"
-yy303:
+#line 1006 "src/conf/parse_opts.cc"
+yy320:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'g') goto yy208;
+       if (yych != 'g') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'l') goto yy208;
+       if (yych != 'l') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy208;
+       if (yych != 'p') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy208;
+       if (yych != 'a') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 152 "../src/conf/parse_opts.re"
+#line 153 "../src/conf/parse_opts.re"
        { goto opt; }
-#line 991 "src/conf/parse_opts.cc"
-yy314:
+#line 1029 "src/conf/parse_opts.cc"
+yy331:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy208;
+       if (yych != 'u') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy208;
+       if (yych != 'a') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'b') goto yy208;
+       if (yych != 'b') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'l') goto yy208;
+       if (yych != 'l') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 136 "../src/conf/parse_opts.re"
+#line 137 "../src/conf/parse_opts.re"
        { opts.reusable ();           goto opt; }
-#line 1010 "src/conf/parse_opts.cc"
-yy323:
+#line 1048 "src/conf/parse_opts.cc"
+yy340:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy208;
+       if (yych != 'p') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy208;
+       if (yych != 'u') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 147 "../src/conf/parse_opts.re"
+#line 148 "../src/conf/parse_opts.re"
        { if (!next (YYCURSOR, argv)) { error_arg ("-o, --output"); return EXIT_FAIL; } goto opt_output; }
-#line 1025 "src/conf/parse_opts.cc"
-yy330:
+#line 1063 "src/conf/parse_opts.cc"
+yy347:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy342;
-       goto yy208;
-yy331:
+       if (yych == '-') goto yy359;
+       goto yy225;
+yy348:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'd') goto yy208;
+       if (yych != 'd') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy208;
+       if (yych != 'i') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'f') goto yy208;
+       if (yych != 'f') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 137 "../src/conf/parse_opts.re"
+#line 138 "../src/conf/parse_opts.re"
        { opts.nested_ifs ();         goto opt; }
-#line 1052 "src/conf/parse_opts.cc"
-yy342:
+#line 1090 "src/conf/parse_opts.cc"
+yy359:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy344;
-       if (yych != 'g') goto yy208;
+       if (yych == 'd') goto yy361;
+       if (yych != 'g') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy356;
-       goto yy208;
-yy344:
+       if (yych == 'e') goto yy373;
+       goto yy225;
+yy361:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'b') goto yy208;
+       if (yych != 'b') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy208;
+       if (yych != 'u') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'g') goto yy208;
+       if (yych != 'g') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy208;
+       if (yych != 'i') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy208;
+       if (yych != 'n') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'f') goto yy208;
+       if (yych != 'f') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 135 "../src/conf/parse_opts.re"
+#line 136 "../src/conf/parse_opts.re"
        { opts.no_debug_info ();      goto opt; }
-#line 1084 "src/conf/parse_opts.cc"
-yy356:
+#line 1122 "src/conf/parse_opts.cc"
+yy373:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy208;
+       if (yych != 'n') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy208;
+       if (yych != 'r') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy208;
+       if (yych != 'a') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy208;
+       if (yych != 'i') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy208;
+       if (yych != 'n') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'd') goto yy208;
+       if (yych != 'd') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy208;
+       if (yych != 'a') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 138 "../src/conf/parse_opts.re"
+#line 139 "../src/conf/parse_opts.re"
        { opts.no_generation_date (); goto opt; }
-#line 1117 "src/conf/parse_opts.cc"
-yy372:
+#line 1155 "src/conf/parse_opts.cc"
+yy389:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy208;
+       if (yych != 'p') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy208;
+       if (yych != 'u') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 150 "../src/conf/parse_opts.re"
+#line 151 "../src/conf/parse_opts.re"
        { goto opt_input; }
-#line 1130 "src/conf/parse_opts.cc"
-yy378:
+#line 1168 "src/conf/parse_opts.cc"
+yy395:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'l') goto yy208;
+       if (yych != 'l') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy208;
+       if (yych != 'p') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 125 "../src/conf/parse_opts.re"
+#line 126 "../src/conf/parse_opts.re"
        { usage ();   return EXIT_OK; }
-#line 1141 "src/conf/parse_opts.cc"
-yy383:
+#line 1179 "src/conf/parse_opts.cc"
+yy400:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'x') goto yy208;
+       if (yych != 'x') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'y') goto yy208;
+       if (yych != 'y') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy208;
+       if (yych != 'n') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy208;
+       if (yych != 'a') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'x') goto yy208;
+       if (yych != 'x') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 133 "../src/conf/parse_opts.re"
+#line 134 "../src/conf/parse_opts.re"
        { opts.flex_syntax ();        goto opt; }
-#line 1166 "src/conf/parse_opts.cc"
-yy395:
+#line 1204 "src/conf/parse_opts.cc"
+yy412:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy416;
-       if (yych == 'p') goto yy417;
-       goto yy208;
-yy396:
+       if (yych == 'i') goto yy433;
+       if (yych == 'p') goto yy434;
+       goto yy225;
+yy413:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy401;
-       goto yy208;
-yy397:
+       if (yych == 'c') goto yy418;
+       goto yy225;
+yy414:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'b') goto yy208;
+       if (yych != 'b') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 142 "../src/conf/parse_opts.re"
+#line 143 "../src/conf/parse_opts.re"
        { if (!opts.ecb ())        { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 1184 "src/conf/parse_opts.cc"
-yy401:
+#line 1222 "src/conf/parse_opts.cc"
+yy418:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'd') goto yy208;
+       if (yych != 'd') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy208;
+       if (yych != 'i') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy208;
+       if (yych != 'n') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'g') goto yy208;
+       if (yych != 'g') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy208;
+       if (yych != 'p') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'l') goto yy208;
+       if (yych != 'l') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy208;
+       if (yych != 'i') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'c') goto yy208;
+       if (yych != 'c') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'y') goto yy208;
+       if (yych != 'y') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 149 "../src/conf/parse_opts.re"
+#line 150 "../src/conf/parse_opts.re"
        { goto opt_encoding_policy; }
-#line 1215 "src/conf/parse_opts.cc"
-yy416:
+#line 1253 "src/conf/parse_opts.cc"
+yy433:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy428;
-       goto yy208;
-yy417:
+       if (yych == 't') goto yy445;
+       goto yy225;
+yy434:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'y') goto yy208;
+       if (yych != 'y') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'c') goto yy208;
+       if (yych != 'c') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'l') goto yy208;
+       if (yych != 'l') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy208;
+       if (yych != 'a') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 151 "../src/conf/parse_opts.re"
+#line 152 "../src/conf/parse_opts.re"
        { goto opt_empty_class; }
-#line 1242 "src/conf/parse_opts.cc"
-yy428:
+#line 1280 "src/conf/parse_opts.cc"
+yy445:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'd') goto yy208;
+       if (yych != 'd') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 131 "../src/conf/parse_opts.re"
+#line 132 "../src/conf/parse_opts.re"
        { opts.emit_dot ();           goto opt; }
-#line 1257 "src/conf/parse_opts.cc"
-yy435:
+#line 1295 "src/conf/parse_opts.cc"
+yy452:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'b') goto yy208;
+       if (yych != 'b') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy208;
+       if (yych != 'u') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'g') goto yy208;
+       if (yych != 'g') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy208;
+       if (yych != 'u') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy208;
+       if (yych != 'p') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy208;
+       if (yych != 'u') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 130 "../src/conf/parse_opts.re"
+#line 131 "../src/conf/parse_opts.re"
        { opts.debug_output ();       goto opt; }
-#line 1284 "src/conf/parse_opts.cc"
-yy448:
+#line 1322 "src/conf/parse_opts.cc"
+yy465:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy464;
-       goto yy208;
-yy449:
+       if (yych == 's') goto yy481;
+       goto yy225;
+yy466:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'm') goto yy208;
+       if (yych != 'm') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy208;
+       if (yych != 'p') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy208;
+       if (yych != 'u') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'd') goto yy208;
+       if (yych != 'd') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'g') goto yy208;
+       if (yych != 'g') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 134 "../src/conf/parse_opts.re"
+#line 135 "../src/conf/parse_opts.re"
        { opts.computed_gotos ();     goto opt; }
-#line 1319 "src/conf/parse_opts.cc"
-yy464:
+#line 1357 "src/conf/parse_opts.cc"
+yy481:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy208;
+       if (yych != 'i') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy208;
+       if (yych != 'n') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy470;
-       if (yych != 'v') goto yy208;
+       if (yych == 's') goto yy487;
+       if (yych != 'v') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy481;
-       goto yy208;
-yy470:
+       if (yych == 'e') goto yy498;
+       goto yy225;
+yy487:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy208;
+       if (yych != 'n') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy208;
+       if (yych != 'i') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy208;
+       if (yych != 'i') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'v') goto yy208;
+       if (yych != 'v') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 139 "../src/conf/parse_opts.re"
+#line 140 "../src/conf/parse_opts.re"
        { opts.case_insensitive ();   goto opt; }
-#line 1357 "src/conf/parse_opts.cc"
-yy481:
+#line 1395 "src/conf/parse_opts.cc"
+yy498:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy208;
+       if (yych != 'r') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'd') goto yy208;
+       if (yych != 'd') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 140 "../src/conf/parse_opts.re"
+#line 141 "../src/conf/parse_opts.re"
        { opts.case_inverted ();      goto opt; }
-#line 1372 "src/conf/parse_opts.cc"
-yy488:
+#line 1410 "src/conf/parse_opts.cc"
+yy505:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy208;
+       if (yych != '-') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'v') goto yy208;
+       if (yych != 'v') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy208;
+       if (yych != 'e') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'c') goto yy208;
+       if (yych != 'c') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy208;
+       if (yych != 't') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy208;
+       if (yych != 'o') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy208;
+       if (yych != 'r') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy208;
+       if (yych != 's') goto yy225;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy208;
+       if (yych >= 0x01) goto yy225;
        ++YYCURSOR;
-#line 128 "../src/conf/parse_opts.re"
+#line 129 "../src/conf/parse_opts.re"
        { opts.bit_vectors ();        goto opt; }
-#line 1397 "src/conf/parse_opts.cc"
+#line 1435 "src/conf/parse_opts.cc"
 }
-#line 153 "../src/conf/parse_opts.re"
+#line 154 "../src/conf/parse_opts.re"
 
 
 opt_output:
 
-#line 1404 "src/conf/parse_opts.cc"
+#line 1442 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -1438,37 +1476,37 @@ opt_output:
                128, 128, 128, 128, 128, 128, 128, 128, 
        };
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych <= 0x00) goto yy502;
-       if (yych != '-') goto yy504;
-yy502:
+       if (yych <= 0x00) goto yy519;
+       if (yych != '-') goto yy521;
+yy519:
        ++YYCURSOR;
-#line 158 "../src/conf/parse_opts.re"
+#line 159 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option -o, --output: %s", *argv);
                return EXIT_FAIL;
        }
-#line 1451 "src/conf/parse_opts.cc"
-yy504:
+#line 1489 "src/conf/parse_opts.cc"
+yy521:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       goto yy506;
-yy505:
+       goto yy523;
+yy522:
        ++YYCURSOR;
        yych = (YYCTYPE)*YYCURSOR;
-yy506:
+yy523:
        if (yybm[0+yych] & 128) {
-               goto yy505;
+               goto yy522;
        }
        ++YYCURSOR;
-#line 162 "../src/conf/parse_opts.re"
+#line 163 "../src/conf/parse_opts.re"
        { if (!opts.output (*argv)) return EXIT_FAIL; goto opt; }
-#line 1465 "src/conf/parse_opts.cc"
+#line 1503 "src/conf/parse_opts.cc"
 }
-#line 163 "../src/conf/parse_opts.re"
+#line 164 "../src/conf/parse_opts.re"
 
 
 opt_header:
 
-#line 1472 "src/conf/parse_opts.cc"
+#line 1510 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -1506,32 +1544,32 @@ opt_header:
                128, 128, 128, 128, 128, 128, 128, 128, 
        };
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych <= 0x00) goto yy511;
-       if (yych != '-') goto yy513;
-yy511:
+       if (yych <= 0x00) goto yy528;
+       if (yych != '-') goto yy530;
+yy528:
        ++YYCURSOR;
-#line 168 "../src/conf/parse_opts.re"
+#line 169 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option -t, --type-header: %s", *argv);
                return EXIT_FAIL;
        }
-#line 1519 "src/conf/parse_opts.cc"
-yy513:
+#line 1557 "src/conf/parse_opts.cc"
+yy530:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       goto yy515;
-yy514:
+       goto yy532;
+yy531:
        ++YYCURSOR;
        yych = (YYCTYPE)*YYCURSOR;
-yy515:
+yy532:
        if (yybm[0+yych] & 128) {
-               goto yy514;
+               goto yy531;
        }
        ++YYCURSOR;
-#line 172 "../src/conf/parse_opts.re"
+#line 173 "../src/conf/parse_opts.re"
        { if (!opts.type_header (*argv)) return EXIT_FAIL; goto opt; }
-#line 1533 "src/conf/parse_opts.cc"
+#line 1571 "src/conf/parse_opts.cc"
 }
-#line 173 "../src/conf/parse_opts.re"
+#line 174 "../src/conf/parse_opts.re"
 
 
 opt_encoding_policy:
@@ -1541,89 +1579,89 @@ opt_encoding_policy:
                return EXIT_FAIL;
        }
 
-#line 1545 "src/conf/parse_opts.cc"
+#line 1583 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 'h') {
-               if (yych == 'f') goto yy522;
+               if (yych == 'f') goto yy539;
        } else {
-               if (yych <= 'i') goto yy523;
-               if (yych == 's') goto yy524;
+               if (yych <= 'i') goto yy540;
+               if (yych == 's') goto yy541;
        }
        ++YYCURSOR;
-yy521:
-#line 183 "../src/conf/parse_opts.re"
+yy538:
+#line 184 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --encoding-policy (expected: ignore | substitute | fail): %s", *argv);
                return EXIT_FAIL;
        }
-#line 1562 "src/conf/parse_opts.cc"
-yy522:
+#line 1600 "src/conf/parse_opts.cc"
+yy539:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy544;
-       goto yy521;
-yy523:
+       if (yych == 'a') goto yy561;
+       goto yy538;
+yy540:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'g') goto yy537;
-       goto yy521;
-yy524:
+       if (yych == 'g') goto yy554;
+       goto yy538;
+yy541:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych != 'u') goto yy521;
+       if (yych != 'u') goto yy538;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy527;
-yy526:
+       if (yych == 'b') goto yy544;
+yy543:
        YYCURSOR = YYMARKER;
-       goto yy521;
-yy527:
+       goto yy538;
+yy544:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy526;
+       if (yych != 's') goto yy543;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy526;
+       if (yych != 't') goto yy543;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy526;
+       if (yych != 'i') goto yy543;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy526;
+       if (yych != 't') goto yy543;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy526;
+       if (yych != 'u') goto yy543;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy526;
+       if (yych != 't') goto yy543;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy526;
+       if (yych != 'e') goto yy543;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy526;
+       if (yych >= 0x01) goto yy543;
        ++YYCURSOR;
-#line 188 "../src/conf/parse_opts.re"
+#line 189 "../src/conf/parse_opts.re"
        { opts.encoding_policy (Enc::POLICY_SUBSTITUTE); goto opt; }
-#line 1599 "src/conf/parse_opts.cc"
-yy537:
+#line 1637 "src/conf/parse_opts.cc"
+yy554:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy526;
+       if (yych != 'n') goto yy543;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy526;
+       if (yych != 'o') goto yy543;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy526;
+       if (yych != 'r') goto yy543;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy526;
+       if (yych != 'e') goto yy543;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy526;
+       if (yych >= 0x01) goto yy543;
        ++YYCURSOR;
-#line 187 "../src/conf/parse_opts.re"
+#line 188 "../src/conf/parse_opts.re"
        { opts.encoding_policy (Enc::POLICY_IGNORE);     goto opt; }
-#line 1614 "src/conf/parse_opts.cc"
-yy544:
+#line 1652 "src/conf/parse_opts.cc"
+yy561:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy526;
+       if (yych != 'i') goto yy543;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'l') goto yy526;
+       if (yych != 'l') goto yy543;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy526;
+       if (yych >= 0x01) goto yy543;
        ++YYCURSOR;
-#line 189 "../src/conf/parse_opts.re"
+#line 190 "../src/conf/parse_opts.re"
        { opts.encoding_policy (Enc::POLICY_FAIL);       goto opt; }
-#line 1625 "src/conf/parse_opts.cc"
+#line 1663 "src/conf/parse_opts.cc"
 }
-#line 190 "../src/conf/parse_opts.re"
+#line 191 "../src/conf/parse_opts.re"
 
 
 opt_input:
@@ -1633,66 +1671,66 @@ opt_input:
                return EXIT_FAIL;
        }
 
-#line 1637 "src/conf/parse_opts.cc"
+#line 1675 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych <= 'b') goto yy551;
-       if (yych <= 'c') goto yy553;
-       if (yych <= 'd') goto yy554;
-yy551:
+       if (yych <= 'b') goto yy568;
+       if (yych <= 'c') goto yy570;
+       if (yych <= 'd') goto yy571;
+yy568:
        ++YYCURSOR;
-yy552:
-#line 200 "../src/conf/parse_opts.re"
+yy569:
+#line 201 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --input (expected: default | custom): %s", *argv);
                return EXIT_FAIL;
        }
-#line 1652 "src/conf/parse_opts.cc"
-yy553:
+#line 1690 "src/conf/parse_opts.cc"
+yy570:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'u') goto yy564;
-       goto yy552;
-yy554:
+       if (yych == 'u') goto yy581;
+       goto yy569;
+yy571:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych != 'e') goto yy552;
+       if (yych != 'e') goto yy569;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy557;
-yy556:
+       if (yych == 'f') goto yy574;
+yy573:
        YYCURSOR = YYMARKER;
-       goto yy552;
-yy557:
+       goto yy569;
+yy574:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'a') goto yy556;
+       if (yych != 'a') goto yy573;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy556;
+       if (yych != 'u') goto yy573;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'l') goto yy556;
+       if (yych != 'l') goto yy573;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy556;
+       if (yych != 't') goto yy573;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy556;
+       if (yych >= 0x01) goto yy573;
        ++YYCURSOR;
-#line 204 "../src/conf/parse_opts.re"
+#line 205 "../src/conf/parse_opts.re"
        { opts.input (InputAPI::DEFAULT); goto opt; }
-#line 1679 "src/conf/parse_opts.cc"
-yy564:
+#line 1717 "src/conf/parse_opts.cc"
+yy581:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 's') goto yy556;
+       if (yych != 's') goto yy573;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy556;
+       if (yych != 't') goto yy573;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy556;
+       if (yych != 'o') goto yy573;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'm') goto yy556;
+       if (yych != 'm') goto yy573;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy556;
+       if (yych >= 0x01) goto yy573;
        ++YYCURSOR;
-#line 205 "../src/conf/parse_opts.re"
+#line 206 "../src/conf/parse_opts.re"
        { opts.input (InputAPI::CUSTOM);  goto opt; }
-#line 1694 "src/conf/parse_opts.cc"
+#line 1732 "src/conf/parse_opts.cc"
 }
-#line 206 "../src/conf/parse_opts.re"
+#line 207 "../src/conf/parse_opts.re"
 
 
 opt_empty_class:
@@ -1702,88 +1740,88 @@ opt_empty_class:
                return EXIT_FAIL;
        }
 
-#line 1706 "src/conf/parse_opts.cc"
+#line 1744 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == 'e') goto yy575;
-       if (yych == 'm') goto yy576;
+       if (yych == 'e') goto yy592;
+       if (yych == 'm') goto yy593;
        ++YYCURSOR;
-yy574:
-#line 216 "../src/conf/parse_opts.re"
+yy591:
+#line 217 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --empty-class (expected: match-empty | match-none | error): %s", *argv);
                return EXIT_FAIL;
        }
-#line 1719 "src/conf/parse_opts.cc"
-yy575:
+#line 1757 "src/conf/parse_opts.cc"
+yy592:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'r') goto yy596;
-       goto yy574;
-yy576:
+       if (yych == 'r') goto yy613;
+       goto yy591;
+yy593:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych != 'a') goto yy574;
+       if (yych != 'a') goto yy591;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy579;
-yy578:
+       if (yych == 't') goto yy596;
+yy595:
        YYCURSOR = YYMARKER;
-       goto yy574;
-yy579:
+       goto yy591;
+yy596:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'c') goto yy578;
+       if (yych != 'c') goto yy595;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'h') goto yy578;
+       if (yych != 'h') goto yy595;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy578;
+       if (yych != '-') goto yy595;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy583;
-       if (yych == 'n') goto yy584;
-       goto yy578;
-yy583:
+       if (yych == 'e') goto yy600;
+       if (yych == 'n') goto yy601;
+       goto yy595;
+yy600:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy590;
-       goto yy578;
-yy584:
+       if (yych == 'm') goto yy607;
+       goto yy595;
+yy601:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy578;
+       if (yych != 'o') goto yy595;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy578;
+       if (yych != 'n') goto yy595;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy578;
+       if (yych != 'e') goto yy595;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy578;
+       if (yych >= 0x01) goto yy595;
        ++YYCURSOR;
-#line 221 "../src/conf/parse_opts.re"
+#line 222 "../src/conf/parse_opts.re"
        { opts.empty_class (EMPTY_CLASS_MATCH_NONE);  goto opt; }
-#line 1759 "src/conf/parse_opts.cc"
-yy590:
+#line 1797 "src/conf/parse_opts.cc"
+yy607:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'p') goto yy578;
+       if (yych != 'p') goto yy595;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy578;
+       if (yych != 't') goto yy595;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'y') goto yy578;
+       if (yych != 'y') goto yy595;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy578;
+       if (yych >= 0x01) goto yy595;
        ++YYCURSOR;
-#line 220 "../src/conf/parse_opts.re"
+#line 221 "../src/conf/parse_opts.re"
        { opts.empty_class (EMPTY_CLASS_MATCH_EMPTY); goto opt; }
-#line 1772 "src/conf/parse_opts.cc"
-yy596:
+#line 1810 "src/conf/parse_opts.cc"
+yy613:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy578;
+       if (yych != 'r') goto yy595;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy578;
+       if (yych != 'o') goto yy595;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy578;
+       if (yych != 'r') goto yy595;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy578;
+       if (yych >= 0x01) goto yy595;
        ++YYCURSOR;
-#line 222 "../src/conf/parse_opts.re"
+#line 223 "../src/conf/parse_opts.re"
        { opts.empty_class (EMPTY_CLASS_ERROR);       goto opt; }
-#line 1785 "src/conf/parse_opts.cc"
+#line 1823 "src/conf/parse_opts.cc"
 }
-#line 223 "../src/conf/parse_opts.re"
+#line 224 "../src/conf/parse_opts.re"
 
 
 end:
index 2021271149fa640a37bdc5a9d04cca4c8eb45a5a..81eb9147fc402b1bd912eb94cb21182de4fb3564 100644 (file)
@@ -364,6 +364,7 @@ void genYYFill(OutputFile & o, uint32_t need)
 
 void genSetCondition(OutputFile & o, uint32_t ind, const std::string& newcond)
 {
+       o.warn_condition_order = false; // see note [condition order]
        if (bUseYYSetConditionParam)
        {
                o << indent(ind) << mapCodeName["YYSETCONDITION"] << "(" << condEnumPrefix << newcond << ");\n";
index fa35858f7585a3521d998b6d63813c0d31ee62c9..ef54d1626465c99e0ca27afeae96c95fb60a79be 100644 (file)
@@ -269,37 +269,66 @@ void genCondGotoSub(OutputFile & o, uint32_t ind, const std::vector<std::string>
        }
 }
 
+/*
+ * note [condition order]
+ *
+ * In theory re2c makes no guarantee about the order of conditions in
+ * the generated lexer. Users should define condition type 'YYCONDTYPE'
+ * and use values of this type with 'YYGETCONDITION' and 'YYSETCONDITION'.
+ * This way code is independent of internal re2c condition numbering.
+ *
+ * However, it is possible to manually hardcode condition numbers and make
+ * re2c generate condition dispatch without explicit use of condition names
+ * (nested 'if' statements with '-b' or computed 'goto' table with '-g').
+ * This code is syntactically valid (compiles), but unsafe:
+ *     - change of re2c options may break compilation
+ *     - change of internal re2c condition numbering may break runtime
+ *
+ * re2c has to preserve the existing numbering scheme.
+ *
+ * re2c warns about implicit assumptions about condition order, unless:
+ *     - condition type is defined with 'types:re2c' or '-t, --type-header'
+ *     - condition names are explicitly used in dispatch or YYSETCONDITION
+ *     - dispatch shrinks to single unconditional jump
+ */
 void genCondGoto(OutputFile & o, uint32_t ind, const std::vector<std::string> & condnames)
 {
-       if (gFlag)
+       const size_t conds = condnames.size ();
+       if (DFlag)
+       {
+               o.warn_condition_order = false; // see note [condition order]
+               for (size_t i = 0; i < conds; ++i)
+               {
+                       const std::string cond = condnames[i];
+                       o << "0 -> " << cond << " [label=\"state=" << cond << "\"]\n";
+               }
+       }
+       else if (gFlag)
        {
                o << indent(ind) << "goto *" << mapCodeName["yyctable"] << "[" << genGetCondition() << "];\n";
        }
-       else
+       else if (sFlag)
        {
-               const size_t conds = condnames.size ();
-               if (sFlag)
+               if (conds == 1)
                {
-                       genCondGotoSub(o, ind, condnames, 0, static_cast<uint32_t> (conds) - 1);
-               }
-               else if (DFlag)
-               {
-                       for (size_t i = 0; i < conds; ++i)
-                       {
-                               const std::string cond = condnames[i];
-                               o << "0 -> " << cond << " [label=\"state=" << cond << "\"]\n";
-                       }
+                       o.warn_condition_order = false; // see note [condition order]
                }
-               else
+               genCondGotoSub(o, ind, condnames, 0, static_cast<uint32_t> (conds) - 1);
+       }
+       else
+       {
+               o.warn_condition_order = false; // see note [condition order]
+               o << indent(ind) << "switch (" << genGetCondition() << ") {\n";
+               for (size_t i = 0; i < conds; ++i)
                {
-                       o << indent(ind) << "switch (" << genGetCondition() << ") {\n";
-                       for (size_t i = 0; i < conds; ++i)
-                       {
-                               const std::string & cond = condnames[i];
-                               o << indent(ind) << "case " << condEnumPrefix << cond << ": goto " << condPrefix << cond << ";\n";
-                       }
-                       o << indent(ind) << "}\n";
+                       const std::string & cond = condnames[i];
+                       o << indent(ind) << "case " << condEnumPrefix << cond << ": goto " << condPrefix << cond << ";\n";
                }
+               o << indent(ind) << "}\n";
+       }
+       if (o.warn_condition_order)  // see note [condition order]
+       {
+               warn.condition_order (o.get_block_line ());
        }
        bWroteCondCheck = true;
 }
index 71357e8741cacbd11e8593592cd80af8cbb83ab5..b429bf2c4ddec996fe8882358a5b51d9943560e1 100644 (file)
@@ -55,6 +55,7 @@ OutputFile::OutputFile (const char * fn)
        , file (NULL)
        , blocks ()
        , label_counter ()
+       , warn_condition_order (!tFlag) // see note [condition order]
 {
        new_block ();
 }
@@ -199,6 +200,7 @@ void OutputFile::insert_state_goto (uint32_t ind)
 
 void OutputFile::insert_types ()
 {
+       warn_condition_order = false; // see note [condition order]
        blocks.back ()->fragments.push_back (new OutputFragment (OutputFragment::TYPES, 0));
        insert_code ();
 }
index cc79d4b821700fd367f9d586462a99fc0cb5656b..d667706b789c8b0473c26fe332a0cfa9713ba922 100644 (file)
@@ -55,6 +55,7 @@ private:
 
 public:
        counter_t<label_t> label_counter;
+       bool warn_condition_order;
 
 private:
        std::ostream & stream ();
index 009c655882512c428e68758425476dd119c08da1..e3e8aa5215ffa5871d2a1ab29c343131b50224af 100644 (file)
@@ -75,6 +75,7 @@ opt_warn:
                error ("bad warning: %s", *argv);
                return EXIT_FAIL;
        }
+       "condition-order"       end { warn.set (Warn::CONDITION_ORDER,       option); goto opt; }
        "empty-character-class" end { warn.set (Warn::EMPTY_CHARACTER_CLASS, option); goto opt; }
        "match-empty-string"    end { warn.set (Warn::MATCH_EMPTY_STRING,    option); goto opt; }
        "naked-default"         end { warn.set (Warn::NAKED_DEFAULT,         option); goto opt; }
index 25b5633b4546c5c071aa1cf9f80f1f8a483cdbf6..3d16da9222f0e0abae9618db38b684e101aa1d10 100644 (file)
@@ -73,6 +73,19 @@ void Warn::set_all_error ()
        }
 }
 
+void Warn::condition_order (uint32_t line)
+{
+       if (mask[CONDITION_ORDER] & WARNING)
+       {
+               const bool e = mask[CONDITION_ORDER] & ERROR;
+               error_accuml |= e;
+               warning (names[CONDITION_ORDER], line, e,
+                       "looks like you use hardcoded numbers instead of autogenerated condition names: "
+                       "better add '/*!types:re2c*/' directive or '-t, --type-header' option "
+                       "and don't rely on fixed condition order.");
+       }
+}
+
 void Warn::empty_class (uint32_t line)
 {
        if (mask[EMPTY_CHARACTER_CLASS] & WARNING)
index 74633c76c8f3806cae20e68b468c66bac68cd350..1c52c31400a4d18bc29bf8d533b91862145f5e92 100644 (file)
@@ -8,6 +8,7 @@
 namespace re2c {
 
 #define RE2C_WARNING_TYPES \
+       W (CONDITION_ORDER,       "condition-order"), \
        W (EMPTY_CHARACTER_CLASS, "empty-character-class"), \
        W (MATCH_EMPTY_STRING,    "match-empty-string"), \
        W (NAKED_DEFAULT,         "naked-default"), \
@@ -46,6 +47,7 @@ public:
        void set (type_t t, option_t o);
        void set_all ();
        void set_all_error ();
+       void condition_order (uint32_t line);
        void empty_class (uint32_t line);
        void match_empty_string (uint32_t line);
        void naked_default (uint32_t line, const std::vector<std::pair<uint32_t, uint32_t> > & stray_cunits, const std::string & cond);
index f96e8f5a2313377f054d7db61aec6e6c002eb759..2babe704c78f914802bfd9e4045bfd016331ca1e 100644 (file)
@@ -1,4 +1,5 @@
 re2c: warning: line 3: rule matches empty string [-Wmatch-empty-string]
+re2c: warning: line 7: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 re2c: warning: line 7: naked default case in condition r1 (stray code units: [0x00-`][c-0xFF]), better add default rule * [-Wnaked-default]
 re2c: warning: line 7: naked default case in condition r2 (stray code units: [0x00-a][c-0xFF]), better add default rule * [-Wnaked-default]
 /* Generated by re2c */
index ab76e9f0ec0770bc3db0500d04ee6c8d8f45930c..4a72336f8aff44307c68ca0195534eb0a342a79c 100644 (file)
@@ -1,4 +1,5 @@
 re2c: warning: line 3: rule matches empty string [-Wmatch-empty-string]
+re2c: warning: line 9: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 re2c: warning: line 9: naked default case in condition r1 (stray code units: [0x00-0][3-`][c-0xFF]), better add default rule * [-Wnaked-default]
 re2c: warning: line 9: naked default case in condition r2 (stray code units: [0x00-0][3-a][c-0xFF]), better add default rule * [-Wnaked-default]
 /* Generated by re2c */
index c1fd98c3ed2101fd54782c5246dcd466ab61a82d..7e40ba866d9e2deb1a25a3960ff63d04c852c099 100644 (file)
@@ -1,4 +1,5 @@
 re2c: warning: line 8: naked default case in condition r1 (stray code units: [0x00-0][3-`][c-0xFF]), better add default rule * [-Wnaked-default]
+re2c: warning: line 8: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 re2c: warning: line 8: naked default case in condition r2 (stray code units: [0x00-0][3-a][c-0xFF]), better add default rule * [-Wnaked-default]
 /* Generated by re2c */
 #line 1 "condition_04.cg.re"
index 00ff442c38b4759cf5d1e499f35f2fdfac82aa05..5865f8ade3c2ea469a0929a566e571509f32b8ea 100644 (file)
@@ -1,3 +1,4 @@
+re2c: warning: line 87: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 /* Generated by re2c */
 #line 1 "condition_05.cg.re"
 #include <stdio.h>
index 0eb81c481c6cf2c103b430c5244279eaabb06bda..52387f514f5d8f0341013f7df0fcfd07b00adbcd 100644 (file)
@@ -1,3 +1,4 @@
+re2c: warning: line 87: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 /* Generated by re2c */
 #line 1 "condition_05.cs.re"
 #include <stdio.h>
index 84f4e1c87e9cb41d1b388f4cbdfb752f2034e106..94bf2b98633124ee817a35c2f22e4d58d8fbbd5c 100644 (file)
@@ -1,4 +1,5 @@
 re2c: warning: line 3: rule matches empty string [-Wmatch-empty-string]
+re2c: warning: line 9: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 re2c: warning: line 9: naked default case in condition r1 (stray code units: [0x00-0][3-`][c-0xFF]), better add default rule * [-Wnaked-default]
 re2c: warning: line 9: naked default case in condition r2 (stray code units: [0x00-0][3-a][c-0xFF]), better add default rule * [-Wnaked-default]
 /* Generated by re2c */
index f456b2265a828b0658c58bbd0026fda296077bff..dc4a3e9d13fb2823e358d3ad3b443df20336ba18 100644 (file)
@@ -1,4 +1,5 @@
 re2c: warning: line 3: rule matches empty string [-Wmatch-empty-string]
+re2c: warning: line 9: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 re2c: warning: line 9: naked default case in condition r1 (stray code units: [0x00-0][3-`][c-0xFF]), better add default rule * [-Wnaked-default]
 re2c: warning: line 9: naked default case in condition r2 (stray code units: [0x00-0][3-a][c-0xFF]), better add default rule * [-Wnaked-default]
 /* Generated by re2c */
diff --git a/re2c/test/condtype.c.c b/re2c/test/condtype.c.c
new file mode 100644 (file)
index 0000000..bdd426f
--- /dev/null
@@ -0,0 +1,48 @@
+re2c: warning: line 11: naked default case in condition a (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default]
+re2c: warning: line 11: naked default case in condition b (stray code units: [0x00-a][c-0xFF]), better add default rule * [-Wnaked-default]
+/* Generated by re2c */
+#line 1 "condtype.c.re"
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+
+#line 10 "<stdout>"
+{
+       unsigned char yych;
+       switch (YYGETCONDITION()) {
+       case yyca: goto yyc_a;
+       case yycb: goto yyc_b;
+       }
+/* *********************************** */
+yyc_a:
+       yych = *YYCURSOR;
+       switch (yych) {
+       case 'a':       goto yy4;
+       default:        goto yy3;
+       }
+yy3:
+yy4:
+       ++YYCURSOR;
+#line 9 "condtype.c.re"
+       {}
+#line 29 "<stdout>"
+/* *********************************** */
+yyc_b:
+       yych = *YYCURSOR;
+       switch (yych) {
+       case 'b':       goto yy9;
+       default:        goto yy8;
+       }
+yy8:
+yy9:
+       ++YYCURSOR;
+#line 10 "condtype.c.re"
+       {}
+#line 42 "<stdout>"
+}
+#line 11 "condtype.c.re"
+
+       return 0;
+}
diff --git a/re2c/test/condtype.c.re b/re2c/test/condtype.c.re
new file mode 100644 (file)
index 0000000..2bad776
--- /dev/null
@@ -0,0 +1,13 @@
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+/*!re2c
+       re2c:yyfill:enable = 0;
+       re2c:define:YYCTYPE = "unsigned char";
+       <a> "a" {}
+       <b> "b" {}
+*/
+       return 0;
+}
diff --git a/re2c/test/condtype.cg.c b/re2c/test/condtype.cg.c
new file mode 100644 (file)
index 0000000..cd6ce5d
--- /dev/null
@@ -0,0 +1,42 @@
+re2c: warning: line 11: naked default case in condition a (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default]
+re2c: warning: line 11: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
+re2c: warning: line 11: naked default case in condition b (stray code units: [0x00-a][c-0xFF]), better add default rule * [-Wnaked-default]
+/* Generated by re2c */
+#line 1 "condtype.cg.re"
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+
+#line 10 "<stdout>"
+{
+       unsigned char yych;
+       static void *yyctable[2] = {
+               &&yyc_a,
+               &&yyc_b,
+       };
+       goto *yyctable[YYGETCONDITION()];
+/* *********************************** */
+yyc_a:
+       yych = *YYCURSOR;
+       if (yych == 'a') goto yy4;
+yy4:
+       ++YYCURSOR;
+#line 9 "condtype.cg.re"
+       {}
+#line 26 "<stdout>"
+/* *********************************** */
+yyc_b:
+       yych = *YYCURSOR;
+       if (yych == 'b') goto yy9;
+yy9:
+       ++YYCURSOR;
+#line 10 "condtype.cg.re"
+       {}
+#line 35 "<stdout>"
+}
+#line 11 "condtype.cg.re"
+
+       return 0;
+}
diff --git a/re2c/test/condtype.cg.re b/re2c/test/condtype.cg.re
new file mode 100644 (file)
index 0000000..2bad776
--- /dev/null
@@ -0,0 +1,13 @@
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+/*!re2c
+       re2c:yyfill:enable = 0;
+       re2c:define:YYCTYPE = "unsigned char";
+       <a> "a" {}
+       <b> "b" {}
+*/
+       return 0;
+}
diff --git a/re2c/test/condtype.cgtcondtype.cg.h.c b/re2c/test/condtype.cgtcondtype.cg.h.c
new file mode 100644 (file)
index 0000000..8827a85
--- /dev/null
@@ -0,0 +1,41 @@
+re2c: warning: line 11: naked default case in condition a (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default]
+re2c: warning: line 11: naked default case in condition b (stray code units: [0x00-a][c-0xFF]), better add default rule * [-Wnaked-default]
+/* Generated by re2c */
+#line 1 "condtype.cgtcondtype.cg.h.re"
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+
+#line 10 "<stdout>"
+{
+       unsigned char yych;
+       static void *yyctable[2] = {
+               &&yyc_a,
+               &&yyc_b,
+       };
+       goto *yyctable[YYGETCONDITION()];
+/* *********************************** */
+yyc_a:
+       yych = *YYCURSOR;
+       if (yych == 'a') goto yy4;
+yy4:
+       ++YYCURSOR;
+#line 9 "condtype.cgtcondtype.cg.h.re"
+       {}
+#line 26 "<stdout>"
+/* *********************************** */
+yyc_b:
+       yych = *YYCURSOR;
+       if (yych == 'b') goto yy9;
+yy9:
+       ++YYCURSOR;
+#line 10 "condtype.cgtcondtype.cg.h.re"
+       {}
+#line 35 "<stdout>"
+}
+#line 11 "condtype.cgtcondtype.cg.h.re"
+
+       return 0;
+}
diff --git a/re2c/test/condtype.cgtcondtype.cg.h.h b/re2c/test/condtype.cgtcondtype.cg.h.h
new file mode 100644 (file)
index 0000000..2968e38
--- /dev/null
@@ -0,0 +1,7 @@
+/* Generated by re2c */
+#line 3 "condtype.cg.h"
+
+enum YYCONDTYPE {
+       yyca,
+       yycb,
+};
diff --git a/re2c/test/condtype.cgtcondtype.cg.h.re b/re2c/test/condtype.cgtcondtype.cg.h.re
new file mode 100644 (file)
index 0000000..2bad776
--- /dev/null
@@ -0,0 +1,13 @@
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+/*!re2c
+       re2c:yyfill:enable = 0;
+       re2c:define:YYCTYPE = "unsigned char";
+       <a> "a" {}
+       <b> "b" {}
+*/
+       return 0;
+}
diff --git a/re2c/test/condtype.cs.c b/re2c/test/condtype.cs.c
new file mode 100644 (file)
index 0000000..8aebde1
--- /dev/null
@@ -0,0 +1,42 @@
+re2c: warning: line 11: naked default case in condition a (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default]
+re2c: warning: line 11: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
+re2c: warning: line 11: naked default case in condition b (stray code units: [0x00-a][c-0xFF]), better add default rule * [-Wnaked-default]
+/* Generated by re2c */
+#line 1 "condtype.cs.re"
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+
+#line 10 "<stdout>"
+{
+       unsigned char yych;
+       if (YYGETCONDITION() < 1) {
+               goto yyc_a;
+       } else {
+               goto yyc_b;
+       }
+/* *********************************** */
+yyc_a:
+       yych = *YYCURSOR;
+       if (yych == 'a') goto yy4;
+yy4:
+       ++YYCURSOR;
+#line 9 "condtype.cs.re"
+       {}
+#line 26 "<stdout>"
+/* *********************************** */
+yyc_b:
+       yych = *YYCURSOR;
+       if (yych == 'b') goto yy9;
+yy9:
+       ++YYCURSOR;
+#line 10 "condtype.cs.re"
+       {}
+#line 35 "<stdout>"
+}
+#line 11 "condtype.cs.re"
+
+       return 0;
+}
diff --git a/re2c/test/condtype.cs.re b/re2c/test/condtype.cs.re
new file mode 100644 (file)
index 0000000..2bad776
--- /dev/null
@@ -0,0 +1,13 @@
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+/*!re2c
+       re2c:yyfill:enable = 0;
+       re2c:define:YYCTYPE = "unsigned char";
+       <a> "a" {}
+       <b> "b" {}
+*/
+       return 0;
+}
diff --git a/re2c/test/condtype.cstcondtype.cs.h.c b/re2c/test/condtype.cstcondtype.cs.h.c
new file mode 100644 (file)
index 0000000..4d91ae2
--- /dev/null
@@ -0,0 +1,41 @@
+re2c: warning: line 11: naked default case in condition a (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default]
+re2c: warning: line 11: naked default case in condition b (stray code units: [0x00-a][c-0xFF]), better add default rule * [-Wnaked-default]
+/* Generated by re2c */
+#line 1 "condtype.cstcondtype.cs.h.re"
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+
+#line 10 "<stdout>"
+{
+       unsigned char yych;
+       if (YYGETCONDITION() < 1) {
+               goto yyc_a;
+       } else {
+               goto yyc_b;
+       }
+/* *********************************** */
+yyc_a:
+       yych = *YYCURSOR;
+       if (yych == 'a') goto yy4;
+yy4:
+       ++YYCURSOR;
+#line 9 "condtype.cstcondtype.cs.h.re"
+       {}
+#line 26 "<stdout>"
+/* *********************************** */
+yyc_b:
+       yych = *YYCURSOR;
+       if (yych == 'b') goto yy9;
+yy9:
+       ++YYCURSOR;
+#line 10 "condtype.cstcondtype.cs.h.re"
+       {}
+#line 35 "<stdout>"
+}
+#line 11 "condtype.cstcondtype.cs.h.re"
+
+       return 0;
+}
diff --git a/re2c/test/condtype.cstcondtype.cs.h.h b/re2c/test/condtype.cstcondtype.cs.h.h
new file mode 100644 (file)
index 0000000..200c172
--- /dev/null
@@ -0,0 +1,7 @@
+/* Generated by re2c */
+#line 3 "condtype.cs.h"
+
+enum YYCONDTYPE {
+       yyca,
+       yycb,
+};
diff --git a/re2c/test/condtype.cstcondtype.cs.h.re b/re2c/test/condtype.cstcondtype.cs.h.re
new file mode 100644 (file)
index 0000000..2bad776
--- /dev/null
@@ -0,0 +1,13 @@
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+/*!re2c
+       re2c:yyfill:enable = 0;
+       re2c:define:YYCTYPE = "unsigned char";
+       <a> "a" {}
+       <b> "b" {}
+*/
+       return 0;
+}
diff --git a/re2c/test/condtype.ctcondtype.c.h.c b/re2c/test/condtype.ctcondtype.c.h.c
new file mode 100644 (file)
index 0000000..b787389
--- /dev/null
@@ -0,0 +1,48 @@
+re2c: warning: line 11: naked default case in condition a (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default]
+re2c: warning: line 11: naked default case in condition b (stray code units: [0x00-a][c-0xFF]), better add default rule * [-Wnaked-default]
+/* Generated by re2c */
+#line 1 "condtype.ctcondtype.c.h.re"
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+
+#line 10 "<stdout>"
+{
+       unsigned char yych;
+       switch (YYGETCONDITION()) {
+       case yyca: goto yyc_a;
+       case yycb: goto yyc_b;
+       }
+/* *********************************** */
+yyc_a:
+       yych = *YYCURSOR;
+       switch (yych) {
+       case 'a':       goto yy4;
+       default:        goto yy3;
+       }
+yy3:
+yy4:
+       ++YYCURSOR;
+#line 9 "condtype.ctcondtype.c.h.re"
+       {}
+#line 29 "<stdout>"
+/* *********************************** */
+yyc_b:
+       yych = *YYCURSOR;
+       switch (yych) {
+       case 'b':       goto yy9;
+       default:        goto yy8;
+       }
+yy8:
+yy9:
+       ++YYCURSOR;
+#line 10 "condtype.ctcondtype.c.h.re"
+       {}
+#line 42 "<stdout>"
+}
+#line 11 "condtype.ctcondtype.c.h.re"
+
+       return 0;
+}
diff --git a/re2c/test/condtype.ctcondtype.c.h.h b/re2c/test/condtype.ctcondtype.c.h.h
new file mode 100644 (file)
index 0000000..691d86d
--- /dev/null
@@ -0,0 +1,7 @@
+/* Generated by re2c */
+#line 3 "condtype.c.h"
+
+enum YYCONDTYPE {
+       yyca,
+       yycb,
+};
diff --git a/re2c/test/condtype.ctcondtype.c.h.re b/re2c/test/condtype.ctcondtype.c.h.re
new file mode 100644 (file)
index 0000000..2bad776
--- /dev/null
@@ -0,0 +1,13 @@
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+/*!re2c
+       re2c:yyfill:enable = 0;
+       re2c:define:YYCTYPE = "unsigned char";
+       <a> "a" {}
+       <b> "b" {}
+*/
+       return 0;
+}
diff --git a/re2c/test/condtype_decl.c.c b/re2c/test/condtype_decl.c.c
new file mode 100644 (file)
index 0000000..792e396
--- /dev/null
@@ -0,0 +1,57 @@
+re2c: warning: line 13: naked default case in condition a (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default]
+re2c: warning: line 13: naked default case in condition b (stray code units: [0x00-a][c-0xFF]), better add default rule * [-Wnaked-default]
+/* Generated by re2c */
+#line 1 "condtype_decl.c.re"
+#line 4 "<stdout>"
+
+enum YYCONDTYPE {
+       yyca,
+       yycb,
+};
+
+#line 1 "condtype_decl.c.re"
+
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+
+#line 19 "<stdout>"
+{
+       unsigned char yych;
+       switch (YYGETCONDITION()) {
+       case yyca: goto yyc_a;
+       case yycb: goto yyc_b;
+       }
+/* *********************************** */
+yyc_a:
+       yych = *YYCURSOR;
+       switch (yych) {
+       case 'a':       goto yy4;
+       default:        goto yy3;
+       }
+yy3:
+yy4:
+       ++YYCURSOR;
+#line 11 "condtype_decl.c.re"
+       {}
+#line 38 "<stdout>"
+/* *********************************** */
+yyc_b:
+       yych = *YYCURSOR;
+       switch (yych) {
+       case 'b':       goto yy9;
+       default:        goto yy8;
+       }
+yy8:
+yy9:
+       ++YYCURSOR;
+#line 12 "condtype_decl.c.re"
+       {}
+#line 51 "<stdout>"
+}
+#line 13 "condtype_decl.c.re"
+
+       return 0;
+}
diff --git a/re2c/test/condtype_decl.c.re b/re2c/test/condtype_decl.c.re
new file mode 100644 (file)
index 0000000..08f86f3
--- /dev/null
@@ -0,0 +1,15 @@
+/*!types:re2c*/
+
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+/*!re2c
+       re2c:yyfill:enable = 0;
+       re2c:define:YYCTYPE = "unsigned char";
+       <a> "a" {}
+       <b> "b" {}
+*/
+       return 0;
+}
diff --git a/re2c/test/condtype_decl.cg.c b/re2c/test/condtype_decl.cg.c
new file mode 100644 (file)
index 0000000..50b45b8
--- /dev/null
@@ -0,0 +1,50 @@
+re2c: warning: line 13: naked default case in condition a (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default]
+re2c: warning: line 13: naked default case in condition b (stray code units: [0x00-a][c-0xFF]), better add default rule * [-Wnaked-default]
+/* Generated by re2c */
+#line 1 "condtype_decl.cg.re"
+#line 4 "<stdout>"
+
+enum YYCONDTYPE {
+       yyca,
+       yycb,
+};
+
+#line 1 "condtype_decl.cg.re"
+
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+
+#line 19 "<stdout>"
+{
+       unsigned char yych;
+       static void *yyctable[2] = {
+               &&yyc_a,
+               &&yyc_b,
+       };
+       goto *yyctable[YYGETCONDITION()];
+/* *********************************** */
+yyc_a:
+       yych = *YYCURSOR;
+       if (yych == 'a') goto yy4;
+yy4:
+       ++YYCURSOR;
+#line 11 "condtype_decl.cg.re"
+       {}
+#line 35 "<stdout>"
+/* *********************************** */
+yyc_b:
+       yych = *YYCURSOR;
+       if (yych == 'b') goto yy9;
+yy9:
+       ++YYCURSOR;
+#line 12 "condtype_decl.cg.re"
+       {}
+#line 44 "<stdout>"
+}
+#line 13 "condtype_decl.cg.re"
+
+       return 0;
+}
diff --git a/re2c/test/condtype_decl.cg.re b/re2c/test/condtype_decl.cg.re
new file mode 100644 (file)
index 0000000..08f86f3
--- /dev/null
@@ -0,0 +1,15 @@
+/*!types:re2c*/
+
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+/*!re2c
+       re2c:yyfill:enable = 0;
+       re2c:define:YYCTYPE = "unsigned char";
+       <a> "a" {}
+       <b> "b" {}
+*/
+       return 0;
+}
diff --git a/re2c/test/condtype_decl.cs.c b/re2c/test/condtype_decl.cs.c
new file mode 100644 (file)
index 0000000..29bac28
--- /dev/null
@@ -0,0 +1,50 @@
+re2c: warning: line 13: naked default case in condition a (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default]
+re2c: warning: line 13: naked default case in condition b (stray code units: [0x00-a][c-0xFF]), better add default rule * [-Wnaked-default]
+/* Generated by re2c */
+#line 1 "condtype_decl.cs.re"
+#line 4 "<stdout>"
+
+enum YYCONDTYPE {
+       yyca,
+       yycb,
+};
+
+#line 1 "condtype_decl.cs.re"
+
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+
+#line 19 "<stdout>"
+{
+       unsigned char yych;
+       if (YYGETCONDITION() < 1) {
+               goto yyc_a;
+       } else {
+               goto yyc_b;
+       }
+/* *********************************** */
+yyc_a:
+       yych = *YYCURSOR;
+       if (yych == 'a') goto yy4;
+yy4:
+       ++YYCURSOR;
+#line 11 "condtype_decl.cs.re"
+       {}
+#line 35 "<stdout>"
+/* *********************************** */
+yyc_b:
+       yych = *YYCURSOR;
+       if (yych == 'b') goto yy9;
+yy9:
+       ++YYCURSOR;
+#line 12 "condtype_decl.cs.re"
+       {}
+#line 44 "<stdout>"
+}
+#line 13 "condtype_decl.cs.re"
+
+       return 0;
+}
diff --git a/re2c/test/condtype_decl.cs.re b/re2c/test/condtype_decl.cs.re
new file mode 100644 (file)
index 0000000..08f86f3
--- /dev/null
@@ -0,0 +1,15 @@
+/*!types:re2c*/
+
+int main ()
+{
+       YYCONDTYPE cond;
+       char * YYCURSOR;
+#define YYGETCONDITION() cond
+/*!re2c
+       re2c:yyfill:enable = 0;
+       re2c:define:YYCTYPE = "unsigned char";
+       <a> "a" {}
+       <b> "b" {}
+*/
+       return 0;
+}
diff --git a/re2c/test/condtype_single.c.c b/re2c/test/condtype_single.c.c
new file mode 100644 (file)
index 0000000..4ac7755
--- /dev/null
@@ -0,0 +1,27 @@
+re2c: warning: line 3: naked default case in condition a (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default]
+/* Generated by re2c */
+#line 1 "condtype_single.c.re"
+
+#line 5 "<stdout>"
+{
+       YYCTYPE yych;
+       switch (YYGETCONDITION()) {
+       case yyca: goto yyc_a;
+       }
+/* *********************************** */
+yyc_a:
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch (yych) {
+       case 'a':       goto yy4;
+       default:        goto yy3;
+       }
+yy3:
+yy4:
+       ++YYCURSOR;
+#line 2 "condtype_single.c.re"
+       {}
+#line 24 "<stdout>"
+}
+#line 3 "condtype_single.c.re"
+
diff --git a/re2c/test/condtype_single.c.re b/re2c/test/condtype_single.c.re
new file mode 100644 (file)
index 0000000..053c3d0
--- /dev/null
@@ -0,0 +1,3 @@
+/*!re2c
+       <a> "a" {}
+*/
diff --git a/re2c/test/condtype_single.cg.c b/re2c/test/condtype_single.cg.c
new file mode 100644 (file)
index 0000000..75fbdfa
--- /dev/null
@@ -0,0 +1,25 @@
+re2c: warning: line 3: naked default case in condition a (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default]
+re2c: warning: line 3: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
+/* Generated by re2c */
+#line 1 "condtype_single.cg.re"
+
+#line 5 "<stdout>"
+{
+       YYCTYPE yych;
+       static void *yyctable[1] = {
+               &&yyc_a,
+       };
+       goto *yyctable[YYGETCONDITION()];
+/* *********************************** */
+yyc_a:
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if (yych == 'a') goto yy4;
+yy4:
+       ++YYCURSOR;
+#line 2 "condtype_single.cg.re"
+       {}
+#line 21 "<stdout>"
+}
+#line 3 "condtype_single.cg.re"
+
diff --git a/re2c/test/condtype_single.cg.re b/re2c/test/condtype_single.cg.re
new file mode 100644 (file)
index 0000000..053c3d0
--- /dev/null
@@ -0,0 +1,3 @@
+/*!re2c
+       <a> "a" {}
+*/
diff --git a/re2c/test/condtype_single.cs.c b/re2c/test/condtype_single.cs.c
new file mode 100644 (file)
index 0000000..e8499e2
--- /dev/null
@@ -0,0 +1,21 @@
+re2c: warning: line 3: naked default case in condition a (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default]
+/* Generated by re2c */
+#line 1 "condtype_single.cs.re"
+
+#line 5 "<stdout>"
+{
+       YYCTYPE yych;
+       goto yyc_a;
+/* *********************************** */
+yyc_a:
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if (yych == 'a') goto yy4;
+yy4:
+       ++YYCURSOR;
+#line 2 "condtype_single.cs.re"
+       {}
+#line 18 "<stdout>"
+}
+#line 3 "condtype_single.cs.re"
+
diff --git a/re2c/test/condtype_single.cs.re b/re2c/test/condtype_single.cs.re
new file mode 100644 (file)
index 0000000..053c3d0
--- /dev/null
@@ -0,0 +1,3 @@
+/*!re2c
+       <a> "a" {}
+*/
index c61b3c41bdf72138c1b5a88092c1ad5d7fa2cc4f..65c5e86e52a6b34fe6596e73365b00a38168e64c 100644 (file)
@@ -1,4 +1,5 @@
 re2c: warning: line 1016: column 12: escape has no effect: '\[' [-Wuseless-escape]
+re2c: warning: line 2441: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 /* Generated by re2c */
 /*
    +----------------------------------------------------------------------+
index 17b7a2f95b9db52b91ba84a39dd91a9f6d9b0466..bd9301bfc07fb117b5cffc58b1f8f0aebed99e2c 100644 (file)
@@ -1,4 +1,5 @@
 re2c: warning: line 1016: column 12: escape has no effect: '\[' [-Wuseless-escape]
+re2c: warning: line 2441: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 /* Generated by re2c */
 /*\r
    +----------------------------------------------------------------------+\r
index aa1765f47e0e350c421e86ad23508c6c21dee554..296bac319c7a050a9872bf4b3f80af59fb5c68e5 100644 (file)
@@ -1,3 +1,4 @@
+re2c: warning: line 340: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 /* Generated by re2c */
 /*
   +----------------------------------------------------------------------+
index bac9be344a6ccc59635a24ab108c24d91cabc454..0911c226799cf0d901b5b826fe81534d9194123a 100644 (file)
@@ -1,4 +1,5 @@
 re2c: warning: line 60: column 20: escape has no effect: '\.' [-Wuseless-escape]
+re2c: warning: line 182: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 /* Generated by re2c */
 /*
  * phpdbg_lexer.l
index eb04b3959e8689fa3eb1aabf02770d7fd074718e..281c2ddbdff132e4b9e0a59126a17b3de114e8ea 100644 (file)
@@ -2,6 +2,7 @@ re2c: warning: line 384: column 13: escape has no effect: '\.' [-Wuseless-escape
 re2c: warning: line 384: column 32: escape has no effect: '\.' [-Wuseless-escape]
 re2c: warning: line 391: column 27: escape has no effect: '\[' [-Wuseless-escape]
 re2c: warning: line 392: column 11: escape has no effect: '\[' [-Wuseless-escape]
+re2c: warning: line 652: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 /* Generated by re2c */
 /*
    +----------------------------------------------------------------------+
index 8e8e12145013b6cdbdddebc5ff8d10f586170318..c52580c4254f31059d06cae78dc237c7c7e5f6b4 100644 (file)
@@ -2,6 +2,7 @@ re2c: warning: line 4: column 13: escape has no effect: '\.' [-Wuseless-escape]
 re2c: warning: line 4: column 32: escape has no effect: '\.' [-Wuseless-escape]
 re2c: warning: line 11: column 27: escape has no effect: '\[' [-Wuseless-escape]
 re2c: warning: line 12: column 11: escape has no effect: '\[' [-Wuseless-escape]
+re2c: warning: line 56: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 /* Generated by re2c */
 
 {
index 1936b8f434468519213c6e7f77922680a23a3743..e74de710fa9bb4aa81a94ce4c15dad85d483caa5 100644 (file)
@@ -1,6 +1,7 @@
 re2c: warning: line 1095: column 12: escape has no effect: '\[' [-Wuseless-escape]
 re2c: warning: line 1476: column 19: escape has no effect: '\*' [-Wuseless-escape]
 re2c: warning: line 1480: column 19: escape has no effect: '\*' [-Wuseless-escape]
+re2c: warning: line 2358: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
 /* Generated by re2c */
 /*
    +----------------------------------------------------------------------+