]> granicus.if.org Git - re2c/commitdiff
Added directive '/*!taglists:re2c ... */' to handle tags with history.
authorUlya Trofimovich <skvadrik@gmail.com>
Sun, 16 Jul 2017 11:13:04 +0000 (12:13 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Sun, 16 Jul 2017 11:13:04 +0000 (12:13 +0100)
It is exactly like '/*!tags:re2c ... */', except that the latter is for
simple tags, while the former is for tags with history.

re2c/bootstrap/src/ast/lex.cc
re2c/src/ast/lex.re
re2c/src/ast/scanner.h
re2c/src/code/emit_dfa.cc
re2c/src/code/output.cc
re2c/src/code/output.h

index 61cb2004e953715835bd77c4bc4ced6d9dccb1f3..8fd64dd0aab9c45880941af6a307bbb5e21e9dbc 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.16 on Thu May 18 22:54:55 2017 */
+/* Generated by re2c 0.16 on Fri Jul 14 21:52:42 2017 */
 #line 1 "../src/ast/lex.re"
 #include "src/util/c99_stdint.h"
 #include <stddef.h>
@@ -109,7 +109,7 @@ echo:
                }
        }
        ++YYCURSOR;
-#line 121 "../src/ast/lex.re"
+#line 127 "../src/ast/lex.re"
        {
                if (cur != eof) goto echo;
                out.wraw(tok, ptr);
@@ -119,7 +119,7 @@ echo:
 yy4:
        ++YYCURSOR;
 yy5:
-#line 138 "../src/ast/lex.re"
+#line 144 "../src/ast/lex.re"
        { goto echo; }
 #line 125 "src/ast/lex.cc"
 yy6:
@@ -130,7 +130,7 @@ yy6:
        }
        if (yych == '#') goto yy14;
 yy7:
-#line 132 "../src/ast/lex.re"
+#line 138 "../src/ast/lex.re"
        {
                cline++;
                pos = cur;
@@ -297,15 +297,16 @@ yy42:
        goto yy13;
 yy43:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy52;
+       if (yych == 'l') goto yy52;
+       if (yych == 's') goto yy53;
        goto yy13;
 yy44:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy53;
+       if (yych == 'e') goto yy54;
        goto yy13;
 yy45:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == ':') goto yy54;
+       if (yych == ':') goto yy55;
        goto yy13;
 yy46:
        ++YYCURSOR;
@@ -320,194 +321,210 @@ yy47:
                if (yych <= '0') goto yy13;
                if (yych <= '9') {
                        YYCTXMARKER = YYCURSOR;
-                       goto yy55;
+                       goto yy56;
                }
                goto yy13;
        }
 yy48:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy57;
+       if (yych == 't') goto yy58;
        goto yy13;
 yy49:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy58;
+       if (yych == 'r') goto yy59;
        goto yy13;
 yy50:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy59;
+       if (yych == 'r') goto yy60;
        goto yy13;
 yy51:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy60;
+       if (yych == 's') goto yy61;
        goto yy13;
 yy52:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == ':') goto yy61;
+       if (yych == 'i') goto yy62;
        goto yy13;
 yy53:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy62;
+       if (yych == ':') goto yy63;
        goto yy13;
 yy54:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy63;
+       if (yych == 's') goto yy64;
        goto yy13;
 yy55:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'r') goto yy65;
+       goto yy13;
+yy56:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = (YYCTYPE)*YYCURSOR;
        if (yybm[0+yych] & 64) {
-               goto yy55;
+               goto yy56;
        }
        if (yych <= '\f') {
                if (yych <= 0x08) goto yy13;
-               if (yych <= '\t') goto yy64;
-               if (yych <= '\n') goto yy66;
+               if (yych <= '\t') goto yy66;
+               if (yych <= '\n') goto yy68;
                goto yy13;
        } else {
-               if (yych <= '\r') goto yy68;
-               if (yych == ' ') goto yy64;
+               if (yych <= '\r') goto yy70;
+               if (yych == ' ') goto yy66;
                goto yy13;
        }
-yy57:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy69;
-       goto yy13;
 yy58:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy70;
+       if (yych == 'a') goto yy71;
        goto yy13;
 yy59:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy71;
+       if (yych == 'e') goto yy72;
        goto yy13;
 yy60:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == ':') goto yy72;
+       if (yych == 'e') goto yy73;
        goto yy13;
 yy61:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy73;
+       if (yych == ':') goto yy74;
        goto yy13;
 yy62:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == ':') goto yy74;
+       if (yych == 's') goto yy75;
        goto yy13;
 yy63:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy75;
+       if (yych == 'r') goto yy76;
        goto yy13;
 yy64:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == ':') goto yy77;
+       goto yy13;
+yy65:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'e') goto yy78;
+       goto yy13;
+yy66:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy64;
+               if (yych == '\t') goto yy66;
                goto yy13;
        } else {
-               if (yych <= ' ') goto yy64;
-               if (yych == '"') goto yy76;
+               if (yych <= ' ') goto yy66;
+               if (yych == '"') goto yy79;
                goto yy13;
        }
-yy66:
+yy68:
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
-#line 127 "../src/ast/lex.re"
+#line 133 "../src/ast/lex.re"
        {
                set_sourceline();
                goto echo;
        }
-#line 421 "src/ast/lex.cc"
-yy68:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '\n') goto yy66;
-       goto yy13;
-yy69:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy78;
-       goto yy13;
+#line 430 "src/ast/lex.cc"
 yy70:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == ':') goto yy79;
+       if (yych == '\n') goto yy68;
        goto yy13;
 yy71:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '2') goto yy80;
+       if (yych == 't') goto yy81;
        goto yy13;
 yy72:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy81;
+       if (yych == ':') goto yy82;
        goto yy13;
 yy73:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy82;
+       if (yych == '2') goto yy83;
        goto yy13;
 yy74:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy83;
+       if (yych == 'r') goto yy84;
        goto yy13;
 yy75:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '2') goto yy84;
+       if (yych == 't') goto yy85;
        goto yy13;
 yy76:
-       ++YYCURSOR;
-       if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
-       yych = (YYCTYPE)*YYCURSOR;
-       if (yybm[0+yych] & 128) {
-               goto yy76;
-       }
-       if (yych <= '\n') goto yy13;
-       if (yych <= '"') goto yy85;
-       goto yy86;
-yy78:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy87;
+       if (yych == 'e') goto yy86;
        goto yy13;
-yy79:
+yy77:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy88;
+       if (yych == 'r') goto yy87;
        goto yy13;
-yy80:
+yy78:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy89;
+       if (yych == '2') goto yy88;
        goto yy13;
+yy79:
+       ++YYCURSOR;
+       if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
+       yych = (YYCTYPE)*YYCURSOR;
+       if (yybm[0+yych] & 128) {
+               goto yy79;
+       }
+       if (yych <= '\n') goto yy13;
+       if (yych <= '"') goto yy89;
+       goto yy90;
 yy81:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'e') goto yy91;
        goto yy13;
 yy82:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '2') goto yy92;
+       if (yych == 'r') goto yy92;
        goto yy13;
 yy83:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy93;
+       if (yych == 'c') goto yy93;
        goto yy13;
 yy84:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy94;
+       if (yych == 'e') goto yy95;
        goto yy13;
 yy85:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '\n') goto yy66;
-       if (yych == '\r') goto yy68;
+       if (yych == 's') goto yy96;
        goto yy13;
 yy86:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == '2') goto yy97;
+       goto yy13;
+yy87:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'e') goto yy98;
+       goto yy13;
+yy88:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'c') goto yy99;
+       goto yy13;
+yy89:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == '\n') goto yy68;
+       if (yych == '\r') goto yy70;
+       goto yy13;
+yy90:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych == '\n') goto yy13;
-       goto yy76;
-yy87:
+       goto yy79;
+yy91:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == ':') goto yy96;
+       if (yych == ':') goto yy101;
        goto yy13;
-yy88:
+yy92:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy97;
+       if (yych == 'e') goto yy102;
        goto yy13;
-yy89:
+yy93:
        ++YYCURSOR;
 #line 92 "../src/ast/lex.re"
        {
@@ -516,69 +533,81 @@ yy89:
                lex_end_of_comment(out);
                goto echo;
        }
-#line 520 "src/ast/lex.cc"
-yy91:
+#line 537 "src/ast/lex.cc"
+yy95:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '2') goto yy98;
+       if (yych == '2') goto yy103;
        goto yy13;
-yy92:
+yy96:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy99;
+       if (yych == ':') goto yy104;
        goto yy13;
-yy93:
+yy97:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'c') goto yy105;
+       goto yy13;
+yy98:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '2') goto yy101;
+       if (yych == '2') goto yy107;
        goto yy13;
-yy94:
+yy99:
        ++YYCURSOR;
 #line 81 "../src/ast/lex.re"
        {
                out.wraw(tok, ptr);
                return Reuse;
        }
-#line 540 "src/ast/lex.cc"
-yy96:
+#line 561 "src/ast/lex.cc"
+yy101:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy102;
+       if (yych == 'r') goto yy108;
        goto yy13;
-yy97:
+yy102:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '2') goto yy103;
+       if (yych == '2') goto yy109;
        goto yy13;
-yy98:
+yy103:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy104;
+       if (yych == 'c') goto yy110;
        goto yy13;
-yy99:
+yy104:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'r') goto yy112;
+       goto yy13;
+yy105:
        ++YYCURSOR;
 #line 115 "../src/ast/lex.re"
        {
                out.wraw(tok, ptr);
-               lex_tags(out);
+               lex_tags(out, false);
                goto echo;
        }
-#line 561 "src/ast/lex.cc"
-yy101:
+#line 586 "src/ast/lex.cc"
+yy107:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy106;
+       if (yych == 'c') goto yy113;
        goto yy13;
-yy102:
+yy108:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy108;
+       if (yych == 'e') goto yy115;
        goto yy13;
-yy103:
+yy109:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy109;
+       if (yych == 'c') goto yy116;
        goto yy13;
-yy104:
+yy110:
        ++YYCURSOR;
 #line 76 "../src/ast/lex.re"
        {
                out.wraw(tok, ptr);
                return Rules;
        }
-#line 581 "src/ast/lex.cc"
-yy106:
+#line 606 "src/ast/lex.cc"
+yy112:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'e') goto yy118;
+       goto yy13;
+yy113:
        ++YYCURSOR;
 #line 106 "../src/ast/lex.re"
        {
@@ -589,12 +618,12 @@ yy106:
                lex_end_of_comment(out);
                goto echo;
        }
-#line 593 "src/ast/lex.cc"
-yy108:
+#line 622 "src/ast/lex.cc"
+yy115:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '2') goto yy111;
+       if (yych == '2') goto yy119;
        goto yy13;
-yy109:
+yy116:
        ++YYCURSOR;
 #line 86 "../src/ast/lex.re"
        {
@@ -602,10 +631,20 @@ yy109:
                lex_end_of_comment(out);
                goto echo;
        }
-#line 606 "src/ast/lex.cc"
-yy111:
+#line 635 "src/ast/lex.cc"
+yy118:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == '2') goto yy120;
+       goto yy13;
+yy119:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'c') goto yy121;
+       goto yy13;
+yy120:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'c') goto yy13;
+       if (yych == 'c') goto yy123;
+       goto yy13;
+yy121:
        ++YYCURSOR;
 #line 99 "../src/ast/lex.re"
        {
@@ -614,9 +653,18 @@ yy111:
                lex_end_of_comment(out);
                goto echo;
        }
-#line 618 "src/ast/lex.cc"
+#line 657 "src/ast/lex.cc"
+yy123:
+       ++YYCURSOR;
+#line 121 "../src/ast/lex.re"
+       {
+               out.wraw(tok, ptr);
+               lex_tags(out, true);
+               goto echo;
+       }
+#line 666 "src/ast/lex.cc"
 }
-#line 139 "../src/ast/lex.re"
+#line 145 "../src/ast/lex.re"
 
 }
 
@@ -624,45 +672,45 @@ void Scanner::lex_end_of_comment(OutputFile &out)
 {
        uint32_t ignored = 0;
        for (;;) {
-#line 628 "src/ast/lex.cc"
+#line 676 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= '\f') {
-               if (yych <= 0x00) goto yy116;
-               if (yych == '\n') goto yy120;
-               goto yy118;
+               if (yych <= 0x00) goto yy127;
+               if (yych == '\n') goto yy131;
+               goto yy129;
        } else {
-               if (yych <= '\r') goto yy122;
-               if (yych == '*') goto yy123;
-               goto yy118;
+               if (yych <= '\r') goto yy133;
+               if (yych == '*') goto yy134;
+               goto yy129;
        }
-yy116:
+yy127:
        ++YYCURSOR;
-#line 146 "../src/ast/lex.re"
+#line 152 "../src/ast/lex.re"
        { fatal("expected end of block"); }
-#line 646 "src/ast/lex.cc"
-yy118:
+#line 694 "src/ast/lex.cc"
+yy129:
        ++YYCURSOR;
-yy119:
-#line 148 "../src/ast/lex.re"
+yy130:
+#line 154 "../src/ast/lex.re"
        { continue; }
-#line 652 "src/ast/lex.cc"
-yy120:
+#line 700 "src/ast/lex.cc"
+yy131:
        ++YYCURSOR;
-#line 149 "../src/ast/lex.re"
+#line 155 "../src/ast/lex.re"
        { ++ignored; continue; }
-#line 657 "src/ast/lex.cc"
-yy122:
+#line 705 "src/ast/lex.cc"
+yy133:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '\n') goto yy120;
-       goto yy119;
-yy123:
+       if (yych == '\n') goto yy131;
+       goto yy130;
+yy134:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '/') goto yy119;
+       if (yych != '/') goto yy130;
        ++YYCURSOR;
-#line 150 "../src/ast/lex.re"
+#line 156 "../src/ast/lex.re"
        {
                        if (ignored > 0) {
                                cline += ignored;
@@ -671,17 +719,17 @@ yy123:
                        tok = pos = cur;
                        return;
                }
-#line 675 "src/ast/lex.cc"
+#line 723 "src/ast/lex.cc"
 }
-#line 158 "../src/ast/lex.re"
+#line 164 "../src/ast/lex.re"
 }
 }
 
-void Scanner::lex_tags(OutputFile &out)
+void Scanner::lex_tags(OutputFile &out, bool lists)
 {
        std::string fmt, sep;
        for (;;) {
-#line 685 "src/ast/lex.cc"
+#line 733 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -721,119 +769,119 @@ void Scanner::lex_tags(OutputFile &out)
        if ((YYLIMIT - YYCURSOR) < 9) YYFILL(9);
        yych = (YYCTYPE)*YYCURSOR;
        if (yybm[0+yych] & 128) {
-               goto yy130;
+               goto yy141;
        }
        if (yych <= ')') {
                if (yych <= '\n') {
-                       if (yych >= '\t') goto yy133;
+                       if (yych >= '\t') goto yy144;
                } else {
-                       if (yych == '\r') goto yy135;
+                       if (yych == '\r') goto yy146;
                }
        } else {
                if (yych <= 'f') {
-                       if (yych <= '*') goto yy136;
-                       if (yych >= 'f') goto yy137;
+                       if (yych <= '*') goto yy147;
+                       if (yych >= 'f') goto yy148;
                } else {
-                       if (yych == 's') goto yy138;
+                       if (yych == 's') goto yy149;
                }
        }
        ++YYCURSOR;
-yy129:
-#line 165 "../src/ast/lex.re"
+yy140:
+#line 171 "../src/ast/lex.re"
        { fatal("unrecognized configuration"); }
-#line 745 "src/ast/lex.cc"
-yy130:
+#line 793 "src/ast/lex.cc"
+yy141:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yybm[0+yych] & 128) {
-               goto yy130;
+               goto yy141;
        }
-#line 170 "../src/ast/lex.re"
+#line 176 "../src/ast/lex.re"
        { continue; }
-#line 755 "src/ast/lex.cc"
-yy133:
+#line 803 "src/ast/lex.cc"
+yy144:
        ++YYCURSOR;
-#line 171 "../src/ast/lex.re"
+#line 177 "../src/ast/lex.re"
        { ++cline; continue; }
-#line 760 "src/ast/lex.cc"
-yy135:
+#line 808 "src/ast/lex.cc"
+yy146:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '\n') goto yy133;
-       goto yy129;
-yy136:
+       if (yych == '\n') goto yy144;
+       goto yy140;
+yy147:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '/') goto yy139;
-       goto yy129;
-yy137:
+       if (yych == '/') goto yy150;
+       goto yy140;
+yy148:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'o') goto yy141;
-       goto yy129;
-yy138:
+       if (yych == 'o') goto yy152;
+       goto yy140;
+yy149:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy143;
-       goto yy129;
-yy139:
+       if (yych == 'e') goto yy154;
+       goto yy140;
+yy150:
        ++YYCURSOR;
-#line 172 "../src/ast/lex.re"
+#line 178 "../src/ast/lex.re"
        {
-                       out.wdelay_tags(new ConfTags(fmt, sep));
+                       out.wdelay_tags(new ConfTags(fmt, sep), lists);
                        tok = pos = cur;
                        return;
                }
-#line 785 "src/ast/lex.cc"
-yy141:
+#line 833 "src/ast/lex.cc"
+yy152:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy144;
-yy142:
+       if (yych == 'r') goto yy155;
+yy153:
        YYCURSOR = YYMARKER;
-       goto yy129;
-yy143:
+       goto yy140;
+yy154:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy145;
-       goto yy142;
-yy144:
+       if (yych == 'p') goto yy156;
+       goto yy153;
+yy155:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy146;
-       goto yy142;
-yy145:
+       if (yych == 'm') goto yy157;
+       goto yy153;
+yy156:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy147;
-       goto yy142;
-yy146:
+       if (yych == 'a') goto yy158;
+       goto yy153;
+yy157:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy148;
-       goto yy142;
-yy147:
+       if (yych == 'a') goto yy159;
+       goto yy153;
+yy158:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy149;
-       goto yy142;
-yy148:
+       if (yych == 'r') goto yy160;
+       goto yy153;
+yy159:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy150;
-       goto yy142;
-yy149:
+       if (yych == 't') goto yy161;
+       goto yy153;
+yy160:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy152;
-       goto yy142;
-yy150:
+       if (yych == 'a') goto yy163;
+       goto yy153;
+yy161:
        ++YYCURSOR;
-#line 167 "../src/ast/lex.re"
+#line 173 "../src/ast/lex.re"
        { fmt = lex_conf_string(); continue; }
-#line 824 "src/ast/lex.cc"
-yy152:
+#line 872 "src/ast/lex.cc"
+yy163:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy142;
+       if (yych != 't') goto yy153;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy142;
+       if (yych != 'o') goto yy153;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy142;
+       if (yych != 'r') goto yy153;
        ++YYCURSOR;
-#line 168 "../src/ast/lex.re"
+#line 174 "../src/ast/lex.re"
        { sep = lex_conf_string(); continue; }
-#line 835 "src/ast/lex.cc"
+#line 883 "src/ast/lex.cc"
 }
-#line 177 "../src/ast/lex.re"
+#line 183 "../src/ast/lex.re"
 }
 }
 
@@ -844,7 +892,7 @@ scan:
        tchar = cur - pos;
        tok = cur;
 
-#line 848 "src/ast/lex.cc"
+#line 896 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -885,94 +933,94 @@ scan:
        if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
        yych = (YYCTYPE)*YYCURSOR;
        if (yybm[0+yych] & 16) {
-               goto yy161;
+               goto yy172;
        }
        if (yych <= '.') {
                if (yych <= '#') {
                        if (yych <= '\r') {
-                               if (yych <= 0x08) goto yy159;
-                               if (yych <= '\n') goto yy164;
-                               if (yych >= '\r') goto yy166;
+                               if (yych <= 0x08) goto yy170;
+                               if (yych <= '\n') goto yy175;
+                               if (yych >= '\r') goto yy177;
                        } else {
-                               if (yych <= 0x1F) goto yy159;
-                               if (yych <= '!') goto yy167;
-                               if (yych <= '"') goto yy169;
-                               goto yy171;
+                               if (yych <= 0x1F) goto yy170;
+                               if (yych <= '!') goto yy178;
+                               if (yych <= '"') goto yy180;
+                               goto yy182;
                        }
                } else {
                        if (yych <= '\'') {
-                               if (yych == '%') goto yy172;
-                               if (yych >= '\'') goto yy173;
+                               if (yych == '%') goto yy183;
+                               if (yych >= '\'') goto yy184;
                        } else {
                                if (yych <= '*') {
-                                       if (yych <= ')') goto yy167;
-                                       goto yy175;
+                                       if (yych <= ')') goto yy178;
+                                       goto yy186;
                                } else {
-                                       if (yych <= ',') goto yy167;
-                                       if (yych >= '.') goto yy176;
+                                       if (yych <= ',') goto yy178;
+                                       if (yych >= '.') goto yy187;
                                }
                        }
                }
        } else {
                if (yych <= '\\') {
                        if (yych <= '?') {
-                               if (yych <= '/') goto yy178;
-                               if (yych <= '9') goto yy179;
-                               if (yych <= ':') goto yy181;
-                               goto yy167;
+                               if (yych <= '/') goto yy189;
+                               if (yych <= '9') goto yy190;
+                               if (yych <= ':') goto yy192;
+                               goto yy178;
                        } else {
-                               if (yych <= '@') goto yy171;
-                               if (yych <= 'Z') goto yy179;
-                               if (yych <= '[') goto yy182;
-                               goto yy167;
+                               if (yych <= '@') goto yy182;
+                               if (yych <= 'Z') goto yy190;
+                               if (yych <= '[') goto yy193;
+                               goto yy178;
                        }
                } else {
                        if (yych <= 'q') {
-                               if (yych == '_') goto yy179;
-                               if (yych >= 'a') goto yy179;
+                               if (yych == '_') goto yy190;
+                               if (yych >= 'a') goto yy190;
                        } else {
                                if (yych <= 'z') {
-                                       if (yych <= 'r') goto yy184;
-                                       goto yy179;
+                                       if (yych <= 'r') goto yy195;
+                                       goto yy190;
                                } else {
-                                       if (yych <= '{') goto yy185;
-                                       if (yych <= '|') goto yy167;
+                                       if (yych <= '{') goto yy196;
+                                       if (yych <= '|') goto yy178;
                                }
                        }
                }
        }
-yy159:
+yy170:
        ++YYCURSOR;
-yy160:
-#line 337 "../src/ast/lex.re"
+yy171:
+#line 343 "../src/ast/lex.re"
        {
                                        fatalf("unexpected character: '%c'", *tok);
                                        goto scan;
                                }
-#line 953 "src/ast/lex.cc"
-yy161:
+#line 1001 "src/ast/lex.cc"
+yy172:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yybm[0+yych] & 16) {
-               goto yy161;
+               goto yy172;
        }
-#line 316 "../src/ast/lex.re"
+#line 322 "../src/ast/lex.re"
        {
                                        goto scan;
                                }
-#line 965 "src/ast/lex.cc"
-yy164:
+#line 1013 "src/ast/lex.cc"
+yy175:
        yyaccept = 0;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy187;
+               if (yych == '\t') goto yy198;
        } else {
-               if (yych <= ' ') goto yy187;
-               if (yych == '#') goto yy190;
+               if (yych <= ' ') goto yy198;
+               if (yych == '#') goto yy201;
        }
-yy165:
-#line 325 "../src/ast/lex.re"
+yy176:
+#line 331 "../src/ast/lex.re"
        {
                if (cur == eof) return 0;
                pos = cur;
@@ -984,218 +1032,218 @@ yy165:
                        goto scan;
                }
        }
-#line 988 "src/ast/lex.cc"
-yy166:
+#line 1036 "src/ast/lex.cc"
+yy177:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '\n') goto yy164;
-       goto yy160;
-yy167:
+       if (yych == '\n') goto yy175;
+       goto yy171;
+yy178:
        ++YYCURSOR;
-yy168:
-#line 229 "../src/ast/lex.re"
+yy179:
+#line 235 "../src/ast/lex.re"
        { return *tok; }
-#line 998 "src/ast/lex.cc"
-yy169:
+#line 1046 "src/ast/lex.cc"
+yy180:
        ++YYCURSOR;
-#line 219 "../src/ast/lex.re"
+#line 225 "../src/ast/lex.re"
        { yylval.regexp = lex_str('"'); return TOKEN_REGEXP; }
-#line 1003 "src/ast/lex.cc"
-yy171:
+#line 1051 "src/ast/lex.cc"
+yy182:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 'Z') {
-               if (yych <= '/') goto yy160;
-               if (yych <= '9') goto yy192;
-               if (yych <= '@') goto yy160;
-               goto yy192;
+               if (yych <= '/') goto yy171;
+               if (yych <= '9') goto yy203;
+               if (yych <= '@') goto yy171;
+               goto yy203;
        } else {
                if (yych <= '_') {
-                       if (yych <= '^') goto yy160;
-                       goto yy192;
+                       if (yych <= '^') goto yy171;
+                       goto yy203;
                } else {
-                       if (yych <= '`') goto yy160;
-                       if (yych <= 'z') goto yy192;
-                       goto yy160;
+                       if (yych <= '`') goto yy171;
+                       if (yych <= 'z') goto yy203;
+                       goto yy171;
                }
        }
-yy172:
+yy183:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '}') goto yy195;
-       goto yy160;
-yy173:
+       if (yych == '}') goto yy206;
+       goto yy171;
+yy184:
        ++YYCURSOR;
-#line 218 "../src/ast/lex.re"
+#line 224 "../src/ast/lex.re"
        { yylval.regexp = lex_str('\''); return TOKEN_REGEXP; }
-#line 1029 "src/ast/lex.cc"
-yy175:
+#line 1077 "src/ast/lex.cc"
+yy186:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '/') goto yy195;
-       goto yy168;
-yy176:
+       if (yych == '/') goto yy206;
+       goto yy179;
+yy187:
        ++YYCURSOR;
-#line 311 "../src/ast/lex.re"
+#line 317 "../src/ast/lex.re"
        {
                                        yylval.regexp = ast_dot(cline, get_column());
                                        return TOKEN_REGEXP;
                                }
-#line 1041 "src/ast/lex.cc"
-yy178:
+#line 1089 "src/ast/lex.cc"
+yy189:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '*') goto yy197;
-       if (yych == '/') goto yy199;
-       goto yy168;
-yy179:
+       if (yych == '*') goto yy208;
+       if (yych == '/') goto yy210;
+       goto yy179;
+yy190:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-yy180:
+yy191:
        if (yybm[0+yych] & 32) {
-               goto yy179;
+               goto yy190;
        }
        if (yych <= ' ') {
                if (yych == '\t') {
                        YYCTXMARKER = YYCURSOR;
-                       goto yy203;
+                       goto yy214;
                }
-               if (yych <= 0x1F) goto yy201;
+               if (yych <= 0x1F) goto yy212;
                YYCTXMARKER = YYCURSOR;
-               goto yy203;
+               goto yy214;
        } else {
                if (yych <= ',') {
-                       if (yych <= '+') goto yy201;
+                       if (yych <= '+') goto yy212;
                        YYCTXMARKER = YYCURSOR;
-                       goto yy205;
+                       goto yy216;
                } else {
-                       if (yych <= '<') goto yy201;
+                       if (yych <= '<') goto yy212;
                        if (yych <= '>') {
                                YYCTXMARKER = YYCURSOR;
-                               goto yy205;
+                               goto yy216;
                        }
-                       goto yy201;
+                       goto yy212;
                }
        }
-yy181:
+yy192:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '=') goto yy207;
-       goto yy160;
-yy182:
+       if (yych == '=') goto yy218;
+       goto yy171;
+yy193:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '^') goto yy209;
-#line 220 "../src/ast/lex.re"
+       if (yych == '^') goto yy220;
+#line 226 "../src/ast/lex.re"
        { yylval.regexp = lex_cls(false); return TOKEN_REGEXP; }
-#line 1086 "src/ast/lex.cc"
-yy184:
+#line 1134 "src/ast/lex.cc"
+yy195:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy211;
-       goto yy180;
-yy185:
+       if (yych == 'e') goto yy222;
+       goto yy191;
+yy196:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yybm[0+yych] & 64) {
-               goto yy214;
+               goto yy225;
        }
        if (yych <= 'Z') {
-               if (yych == ',') goto yy212;
-               if (yych >= 'A') goto yy216;
+               if (yych == ',') goto yy223;
+               if (yych >= 'A') goto yy227;
        } else {
                if (yych <= '_') {
-                       if (yych >= '_') goto yy216;
+                       if (yych >= '_') goto yy227;
                } else {
-                       if (yych <= '`') goto yy186;
-                       if (yych <= 'z') goto yy216;
+                       if (yych <= '`') goto yy197;
+                       if (yych <= 'z') goto yy227;
                }
        }
-yy186:
-#line 187 "../src/ast/lex.re"
+yy197:
+#line 193 "../src/ast/lex.re"
        {
                                        depth = 1;
                                        code_line = cline;
                                        goto code;
                                }
-#line 1115 "src/ast/lex.cc"
-yy187:
+#line 1163 "src/ast/lex.cc"
+yy198:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy187;
+               if (yych == '\t') goto yy198;
        } else {
-               if (yych <= ' ') goto yy187;
-               if (yych == '#') goto yy190;
+               if (yych <= ' ') goto yy198;
+               if (yych == '#') goto yy201;
        }
-yy189:
+yy200:
        YYCURSOR = YYMARKER;
        if (yyaccept <= 1) {
                if (yyaccept == 0) {
-                       goto yy165;
+                       goto yy176;
                } else {
-                       goto yy186;
+                       goto yy197;
                }
        } else {
-               goto yy213;
+               goto yy224;
        }
-yy190:
+yy201:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy190;
-               goto yy189;
+               if (yych == '\t') goto yy201;
+               goto yy200;
        } else {
-               if (yych <= ' ') goto yy190;
-               if (yych == 'l') goto yy218;
-               goto yy189;
+               if (yych <= ' ') goto yy201;
+               if (yych == 'l') goto yy229;
+               goto yy200;
        }
-yy192:
+yy203:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 'Z') {
-               if (yych <= '/') goto yy194;
-               if (yych <= '9') goto yy192;
-               if (yych >= 'A') goto yy192;
+               if (yych <= '/') goto yy205;
+               if (yych <= '9') goto yy203;
+               if (yych >= 'A') goto yy203;
        } else {
                if (yych <= '_') {
-                       if (yych >= '_') goto yy192;
+                       if (yych >= '_') goto yy203;
                } else {
-                       if (yych <= '`') goto yy194;
-                       if (yych <= 'z') goto yy192;
+                       if (yych <= '`') goto yy205;
+                       if (yych <= 'z') goto yy203;
                }
        }
-yy194:
-#line 223 "../src/ast/lex.re"
+yy205:
+#line 229 "../src/ast/lex.re"
        {
                const std::string *name = new std::string(tok + 1, tok_len() - 1);
                yylval.regexp = ast_tag(cline, get_column(), name, tok[0] == '#');
                return TOKEN_REGEXP;
        }
-#line 1172 "src/ast/lex.cc"
-yy195:
+#line 1220 "src/ast/lex.cc"
+yy206:
        ++YYCURSOR;
-#line 213 "../src/ast/lex.re"
+#line 219 "../src/ast/lex.re"
        {
                                        tok = cur;
                                        return 0;
                                }
-#line 1180 "src/ast/lex.cc"
-yy197:
+#line 1228 "src/ast/lex.cc"
+yy208:
        ++YYCURSOR;
-#line 207 "../src/ast/lex.re"
+#line 213 "../src/ast/lex.re"
        {
                                        depth = 1;
                                        goto comment;
                                }
-#line 1188 "src/ast/lex.cc"
-yy199:
+#line 1236 "src/ast/lex.cc"
+yy210:
        ++YYCURSOR;
-#line 204 "../src/ast/lex.re"
+#line 210 "../src/ast/lex.re"
        {
                                goto nextLine;
                        }
-#line 1195 "src/ast/lex.cc"
-yy201:
+#line 1243 "src/ast/lex.cc"
+yy212:
        ++YYCURSOR;
        YYCURSOR -= 1;
-#line 294 "../src/ast/lex.re"
+#line 300 "../src/ast/lex.re"
        {
                                        if (!globopts->FFlag) {
                                                yylval.str = new std::string (tok, tok_len());
@@ -1212,113 +1260,113 @@ yy201:
                                                return TOKEN_REGEXP;
                                        }
                                }
-#line 1216 "src/ast/lex.cc"
-yy203:
+#line 1264 "src/ast/lex.cc"
+yy214:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= ' ') {
-               if (yych == '\t') goto yy203;
-               if (yych <= 0x1F) goto yy219;
-               goto yy203;
+               if (yych == '\t') goto yy214;
+               if (yych <= 0x1F) goto yy230;
+               goto yy214;
        } else {
                if (yych <= ',') {
-                       if (yych <= '+') goto yy219;
+                       if (yych <= '+') goto yy230;
                } else {
-                       if (yych <= '<') goto yy219;
-                       if (yych >= '?') goto yy219;
+                       if (yych <= '<') goto yy230;
+                       if (yych >= '?') goto yy230;
                }
        }
-yy205:
+yy216:
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
-#line 289 "../src/ast/lex.re"
+#line 295 "../src/ast/lex.re"
        {
                                        yylval.str = new std::string (tok, tok_len ());
                                        return TOKEN_ID;
                                }
-#line 1241 "src/ast/lex.cc"
-yy207:
+#line 1289 "src/ast/lex.cc"
+yy218:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '>') goto yy221;
-#line 197 "../src/ast/lex.re"
+       if (yych == '>') goto yy232;
+#line 203 "../src/ast/lex.re"
        {
                                        tok += 2; /* skip ":=" */
                                        depth = 0;
                                        code_line = cline;
                                        goto code;
                                }
-#line 1252 "src/ast/lex.cc"
-yy209:
+#line 1300 "src/ast/lex.cc"
+yy220:
        ++YYCURSOR;
-#line 221 "../src/ast/lex.re"
+#line 227 "../src/ast/lex.re"
        { yylval.regexp = lex_cls(true);  return TOKEN_REGEXP; }
-#line 1257 "src/ast/lex.cc"
-yy211:
+#line 1305 "src/ast/lex.cc"
+yy222:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '2') goto yy223;
-       goto yy180;
-yy212:
+       if (yych == '2') goto yy234;
+       goto yy191;
+yy223:
        ++YYCURSOR;
-yy213:
-#line 262 "../src/ast/lex.re"
+yy224:
+#line 268 "../src/ast/lex.re"
        {
                                        fatal("illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers");
                                }
-#line 1269 "src/ast/lex.cc"
-yy214:
+#line 1317 "src/ast/lex.cc"
+yy225:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = (YYCTYPE)*YYCURSOR;
        if (yybm[0+yych] & 64) {
-               goto yy214;
+               goto yy225;
        }
        if (yych <= '^') {
                if (yych <= ',') {
-                       if (yych <= '+') goto yy189;
-                       goto yy224;
+                       if (yych <= '+') goto yy200;
+                       goto yy235;
                } else {
-                       if (yych <= '@') goto yy189;
-                       if (yych >= '[') goto yy189;
+                       if (yych <= '@') goto yy200;
+                       if (yych >= '[') goto yy200;
                }
        } else {
                if (yych <= 'z') {
-                       if (yych == '`') goto yy189;
+                       if (yych == '`') goto yy200;
                } else {
-                       if (yych == '}') goto yy225;
-                       goto yy189;
+                       if (yych == '}') goto yy236;
+                       goto yy200;
                }
        }
-yy216:
+yy227:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= '^') {
                if (yych <= '9') {
-                       if (yych <= '/') goto yy189;
-                       goto yy216;
+                       if (yych <= '/') goto yy200;
+                       goto yy227;
                } else {
-                       if (yych <= '@') goto yy189;
-                       if (yych <= 'Z') goto yy216;
-                       goto yy189;
+                       if (yych <= '@') goto yy200;
+                       if (yych <= 'Z') goto yy227;
+                       goto yy200;
                }
        } else {
                if (yych <= 'z') {
-                       if (yych == '`') goto yy189;
-                       goto yy216;
+                       if (yych == '`') goto yy200;
+                       goto yy227;
                } else {
-                       if (yych == '}') goto yy227;
-                       goto yy189;
+                       if (yych == '}') goto yy238;
+                       goto yy200;
                }
        }
-yy218:
+yy229:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy229;
-       goto yy189;
-yy219:
+       if (yych == 'i') goto yy240;
+       goto yy200;
+yy230:
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
-#line 276 "../src/ast/lex.re"
+#line 282 "../src/ast/lex.re"
        {
                                        yylval.str = new std::string (tok, tok_len ());
                                        if (globopts->FFlag)
@@ -1331,29 +1379,29 @@ yy219:
                                                return TOKEN_ID;
                                        }
                                }
-#line 1335 "src/ast/lex.cc"
-yy221:
+#line 1383 "src/ast/lex.cc"
+yy232:
        ++YYCURSOR;
        YYCURSOR -= 2;
-#line 193 "../src/ast/lex.re"
+#line 199 "../src/ast/lex.re"
        {
                                        return *tok;
                                }
-#line 1343 "src/ast/lex.cc"
-yy223:
+#line 1391 "src/ast/lex.cc"
+yy234:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy230;
-       goto yy180;
-yy224:
+       if (yych == 'c') goto yy241;
+       goto yy191;
+yy235:
        yyaccept = 2;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych <= '/') goto yy213;
-       if (yych <= '9') goto yy231;
-       if (yych == '}') goto yy233;
-       goto yy213;
-yy225:
+       if (yych <= '/') goto yy224;
+       if (yych <= '9') goto yy242;
+       if (yych == '}') goto yy244;
+       goto yy224;
+yy236:
        ++YYCURSOR;
-#line 231 "../src/ast/lex.re"
+#line 237 "../src/ast/lex.re"
        {
                                        if (!s_to_u32_unsafe (tok + 1, cur - 1, yylval.bounds.min))
                                        {
@@ -1362,10 +1410,10 @@ yy225:
                                        yylval.bounds.max = yylval.bounds.min;
                                        return TOKEN_CLOSESIZE;
                                }
-#line 1366 "src/ast/lex.cc"
-yy227:
+#line 1414 "src/ast/lex.cc"
+yy238:
        ++YYCURSOR;
-#line 266 "../src/ast/lex.re"
+#line 272 "../src/ast/lex.re"
        {
                                        if (!globopts->FFlag) {
                                                fatal("curly braces for names only allowed with -F switch");
@@ -1373,26 +1421,26 @@ yy227:
                                        yylval.str = new std::string (tok + 1, tok_len () - 2); // -2 to omit braces
                                        return TOKEN_ID;
                                }
-#line 1377 "src/ast/lex.cc"
-yy229:
+#line 1425 "src/ast/lex.cc"
+yy240:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy235;
-       goto yy189;
-yy230:
+       if (yych == 'n') goto yy246;
+       goto yy200;
+yy241:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == ':') goto yy236;
-       goto yy180;
-yy231:
+       if (yych == ':') goto yy247;
+       goto yy191;
+yy242:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych <= '/') goto yy189;
-       if (yych <= '9') goto yy231;
-       if (yych == '}') goto yy238;
-       goto yy189;
-yy233:
+       if (yych <= '/') goto yy200;
+       if (yych <= '9') goto yy242;
+       if (yych == '}') goto yy249;
+       goto yy200;
+yy244:
        ++YYCURSOR;
-#line 253 "../src/ast/lex.re"
+#line 259 "../src/ast/lex.re"
        {
                                        if (!s_to_u32_unsafe (tok + 1, cur - 2, yylval.bounds.min))
                                        {
@@ -1401,19 +1449,19 @@ yy233:
                                        yylval.bounds.max = std::numeric_limits<uint32_t>::max();
                                        return TOKEN_CLOSESIZE;
                                }
-#line 1405 "src/ast/lex.cc"
-yy235:
+#line 1453 "src/ast/lex.cc"
+yy246:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy240;
-       goto yy189;
-yy236:
+       if (yych == 'e') goto yy251;
+       goto yy200;
+yy247:
        ++YYCURSOR;
-#line 274 "../src/ast/lex.re"
+#line 280 "../src/ast/lex.re"
        { return TOKEN_CONF; }
-#line 1414 "src/ast/lex.cc"
-yy238:
+#line 1462 "src/ast/lex.cc"
+yy249:
        ++YYCURSOR;
-#line 240 "../src/ast/lex.re"
+#line 246 "../src/ast/lex.re"
        {
                                        const char * p = strchr (tok, ',');
                                        if (!s_to_u32_unsafe (tok + 1, p, yylval.bounds.min))
@@ -1426,98 +1474,98 @@ yy238:
                                        }
                                        return TOKEN_CLOSESIZE;
                                }
-#line 1430 "src/ast/lex.cc"
-yy240:
+#line 1478 "src/ast/lex.cc"
+yy251:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= '0') goto yy242;
-       if (yych <= '9') goto yy189;
-       goto yy242;
-yy241:
+       if (yych <= '0') goto yy253;
+       if (yych <= '9') goto yy200;
+       goto yy253;
+yy252:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-yy242:
+yy253:
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy241;
-               goto yy189;
+               if (yych == '\t') goto yy252;
+               goto yy200;
        } else {
-               if (yych <= ' ') goto yy241;
-               if (yych <= '0') goto yy189;
-               if (yych >= ':') goto yy189;
+               if (yych <= ' ') goto yy252;
+               if (yych <= '0') goto yy200;
+               if (yych >= ':') goto yy200;
                YYCTXMARKER = YYCURSOR;
        }
-yy243:
+yy254:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= '\r') {
                if (yych <= '\t') {
-                       if (yych <= 0x08) goto yy189;
+                       if (yych <= 0x08) goto yy200;
                } else {
-                       if (yych <= '\n') goto yy247;
-                       if (yych <= '\f') goto yy189;
-                       goto yy249;
+                       if (yych <= '\n') goto yy258;
+                       if (yych <= '\f') goto yy200;
+                       goto yy260;
                }
        } else {
                if (yych <= ' ') {
-                       if (yych <= 0x1F) goto yy189;
+                       if (yych <= 0x1F) goto yy200;
                } else {
-                       if (yych <= '/') goto yy189;
-                       if (yych <= '9') goto yy243;
-                       goto yy189;
+                       if (yych <= '/') goto yy200;
+                       if (yych <= '9') goto yy254;
+                       goto yy200;
                }
        }
-yy245:
+yy256:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy245;
-               goto yy189;
+               if (yych == '\t') goto yy256;
+               goto yy200;
        } else {
-               if (yych <= ' ') goto yy245;
-               if (yych == '"') goto yy250;
-               goto yy189;
+               if (yych <= ' ') goto yy256;
+               if (yych == '"') goto yy261;
+               goto yy200;
        }
-yy247:
+yy258:
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
-#line 320 "../src/ast/lex.re"
+#line 326 "../src/ast/lex.re"
        {
                set_sourceline ();
                return TOKEN_LINE_INFO;
        }
-#line 1491 "src/ast/lex.cc"
-yy249:
+#line 1539 "src/ast/lex.cc"
+yy260:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '\n') goto yy247;
-       goto yy189;
-yy250:
+       if (yych == '\n') goto yy258;
+       goto yy200;
+yy261:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = (YYCTYPE)*YYCURSOR;
        if (yybm[0+yych] & 128) {
-               goto yy250;
+               goto yy261;
        }
-       if (yych <= '\n') goto yy189;
-       if (yych >= '#') goto yy253;
+       if (yych <= '\n') goto yy200;
+       if (yych >= '#') goto yy264;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '\n') goto yy247;
-       if (yych == '\r') goto yy249;
-       goto yy189;
-yy253:
+       if (yych == '\n') goto yy258;
+       if (yych == '\r') goto yy260;
+       goto yy200;
+yy264:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == '\n') goto yy189;
-       goto yy250;
+       if (yych == '\n') goto yy200;
+       goto yy261;
 }
-#line 341 "../src/ast/lex.re"
+#line 347 "../src/ast/lex.re"
 
 
 code:
 
-#line 1521 "src/ast/lex.cc"
+#line 1569 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -1559,26 +1607,26 @@ code:
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= '&') {
                if (yych <= '\n') {
-                       if (yych <= 0x00) goto yy256;
-                       if (yych <= '\t') goto yy258;
-                       goto yy260;
+                       if (yych <= 0x00) goto yy267;
+                       if (yych <= '\t') goto yy269;
+                       goto yy271;
                } else {
-                       if (yych == '"') goto yy262;
-                       goto yy258;
+                       if (yych == '"') goto yy273;
+                       goto yy269;
                }
        } else {
                if (yych <= '{') {
-                       if (yych <= '\'') goto yy263;
-                       if (yych <= 'z') goto yy258;
-                       goto yy264;
+                       if (yych <= '\'') goto yy274;
+                       if (yych <= 'z') goto yy269;
+                       goto yy275;
                } else {
-                       if (yych == '}') goto yy266;
-                       goto yy258;
+                       if (yych == '}') goto yy277;
+                       goto yy269;
                }
        }
-yy256:
+yy267:
        ++YYCURSOR;
-#line 404 "../src/ast/lex.re"
+#line 410 "../src/ast/lex.re"
        {
                                        if (cur == eof)
                                        {
@@ -1590,34 +1638,34 @@ yy256:
                                        }
                                        goto code;
                                }
-#line 1594 "src/ast/lex.cc"
-yy258:
+#line 1642 "src/ast/lex.cc"
+yy269:
        ++YYCURSOR;
-yy259:
-#line 418 "../src/ast/lex.re"
+yy270:
+#line 424 "../src/ast/lex.re"
        {
                                        goto code;
                                }
-#line 1602 "src/ast/lex.cc"
-yy260:
+#line 1650 "src/ast/lex.cc"
+yy271:
        yyaccept = 0;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= '\r') {
                if (yych <= '\t') {
-                       if (yych >= '\t') goto yy268;
+                       if (yych >= '\t') goto yy279;
                } else {
-                       if (yych <= '\n') goto yy270;
-                       if (yych >= '\r') goto yy270;
+                       if (yych <= '\n') goto yy281;
+                       if (yych >= '\r') goto yy281;
                }
        } else {
                if (yych <= ' ') {
-                       if (yych >= ' ') goto yy268;
+                       if (yych >= ' ') goto yy279;
                } else {
-                       if (yych == '#') goto yy271;
+                       if (yych == '#') goto yy282;
                }
        }
-yy261:
-#line 385 "../src/ast/lex.re"
+yy272:
+#line 391 "../src/ast/lex.re"
        {
                                        if (depth == 0)
                                        {
@@ -1637,20 +1685,20 @@ yy261:
                                        cline++;
                                        goto code;
                                }
-#line 1641 "src/ast/lex.cc"
-yy262:
+#line 1689 "src/ast/lex.cc"
+yy273:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == '\n') goto yy259;
-       goto yy275;
-yy263:
+       if (yych == '\n') goto yy270;
+       goto yy286;
+yy274:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == '\n') goto yy259;
-       goto yy280;
-yy264:
+       if (yych == '\n') goto yy270;
+       goto yy291;
+yy275:
        ++YYCURSOR;
-#line 357 "../src/ast/lex.re"
+#line 363 "../src/ast/lex.re"
        {
                                        if (depth == 0)
                                        {
@@ -1662,10 +1710,10 @@ yy264:
                                        }
                                        goto code;
                                }
-#line 1666 "src/ast/lex.cc"
-yy266:
+#line 1714 "src/ast/lex.cc"
+yy277:
        ++YYCURSOR;
-#line 345 "../src/ast/lex.re"
+#line 351 "../src/ast/lex.re"
        {
                                        if (depth == 0)
                                        {
@@ -1678,19 +1726,19 @@ yy266:
                                        }
                                        goto code;
                                }
-#line 1682 "src/ast/lex.cc"
-yy268:
+#line 1730 "src/ast/lex.cc"
+yy279:
        yyaccept = 2;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy282;
+               if (yych == '\t') goto yy293;
        } else {
-               if (yych <= ' ') goto yy282;
-               if (yych == '#') goto yy271;
+               if (yych <= ' ') goto yy293;
+               if (yych == '#') goto yy282;
        }
-yy269:
+yy280:
        YYCURSOR -= 1;
-#line 372 "../src/ast/lex.re"
+#line 378 "../src/ast/lex.re"
        {
                                        if (depth == 0)
                                        {
@@ -1704,175 +1752,175 @@ yy269:
                                        cline++;
                                        goto code;
                                }
-#line 1708 "src/ast/lex.cc"
-yy270:
+#line 1756 "src/ast/lex.cc"
+yy281:
        ++YYCURSOR;
-       goto yy269;
-yy271:
+       goto yy280;
+yy282:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
        yych = (YYCTYPE)*YYCURSOR;
        if (yybm[0+yych] & 16) {
-               goto yy271;
+               goto yy282;
        }
-       if (yych == 'l') goto yy284;
-yy273:
+       if (yych == 'l') goto yy295;
+yy284:
        YYCURSOR = YYMARKER;
        if (yyaccept <= 1) {
                if (yyaccept == 0) {
-                       goto yy261;
+                       goto yy272;
                } else {
-                       goto yy259;
+                       goto yy270;
                }
        } else {
-               goto yy269;
+               goto yy280;
        }
-yy274:
+yy285:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-yy275:
+yy286:
        if (yybm[0+yych] & 32) {
-               goto yy274;
+               goto yy285;
        }
-       if (yych <= '\n') goto yy273;
-       if (yych >= '#') goto yy278;
-yy276:
+       if (yych <= '\n') goto yy284;
+       if (yych >= '#') goto yy289;
+yy287:
        ++YYCURSOR;
-#line 415 "../src/ast/lex.re"
+#line 421 "../src/ast/lex.re"
        {
                                        goto code;
                                }
-#line 1747 "src/ast/lex.cc"
-yy278:
+#line 1795 "src/ast/lex.cc"
+yy289:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == '\n') goto yy273;
-       goto yy274;
-yy279:
+       if (yych == '\n') goto yy284;
+       goto yy285;
+yy290:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-yy280:
+yy291:
        if (yybm[0+yych] & 64) {
-               goto yy279;
+               goto yy290;
        }
-       if (yych <= '\n') goto yy273;
-       if (yych <= '\'') goto yy276;
+       if (yych <= '\n') goto yy284;
+       if (yych <= '\'') goto yy287;
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == '\n') goto yy273;
-       goto yy279;
-yy282:
+       if (yych == '\n') goto yy284;
+       goto yy290;
+yy293:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy282;
-               goto yy273;
+               if (yych == '\t') goto yy293;
+               goto yy284;
        } else {
-               if (yych <= ' ') goto yy282;
-               if (yych == '#') goto yy271;
-               goto yy273;
+               if (yych <= ' ') goto yy293;
+               if (yych == '#') goto yy282;
+               goto yy284;
        }
-yy284:
+yy295:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy273;
+       if (yych != 'i') goto yy284;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy273;
+       if (yych != 'n') goto yy284;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy273;
+       if (yych != 'e') goto yy284;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= '0') goto yy289;
-       if (yych <= '9') goto yy273;
-       goto yy289;
-yy288:
+       if (yych <= '0') goto yy300;
+       if (yych <= '9') goto yy284;
+       goto yy300;
+yy299:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-yy289:
+yy300:
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy288;
-               goto yy273;
+               if (yych == '\t') goto yy299;
+               goto yy284;
        } else {
-               if (yych <= ' ') goto yy288;
-               if (yych <= '0') goto yy273;
-               if (yych >= ':') goto yy273;
+               if (yych <= ' ') goto yy299;
+               if (yych <= '0') goto yy284;
+               if (yych >= ':') goto yy284;
                YYCTXMARKER = YYCURSOR;
        }
-yy290:
+yy301:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = (YYCTYPE)*YYCURSOR;
        if (yybm[0+yych] & 128) {
-               goto yy290;
+               goto yy301;
        }
        if (yych <= '\f') {
-               if (yych <= 0x08) goto yy273;
-               if (yych <= '\t') goto yy292;
-               if (yych <= '\n') goto yy294;
-               goto yy273;
+               if (yych <= 0x08) goto yy284;
+               if (yych <= '\t') goto yy303;
+               if (yych <= '\n') goto yy305;
+               goto yy284;
        } else {
-               if (yych <= '\r') goto yy296;
-               if (yych != ' ') goto yy273;
+               if (yych <= '\r') goto yy307;
+               if (yych != ' ') goto yy284;
        }
-yy292:
+yy303:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy292;
-               goto yy273;
+               if (yych == '\t') goto yy303;
+               goto yy284;
        } else {
-               if (yych <= ' ') goto yy292;
-               if (yych == '"') goto yy297;
-               goto yy273;
+               if (yych <= ' ') goto yy303;
+               if (yych == '"') goto yy308;
+               goto yy284;
        }
-yy294:
+yy305:
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
-#line 368 "../src/ast/lex.re"
+#line 374 "../src/ast/lex.re"
        {
                                        set_sourceline ();
                                        goto code;
                                }
-#line 1842 "src/ast/lex.cc"
-yy296:
+#line 1890 "src/ast/lex.cc"
+yy307:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '\n') goto yy294;
-       goto yy273;
-yy297:
+       if (yych == '\n') goto yy305;
+       goto yy284;
+yy308:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= '!') {
-               if (yych == '\n') goto yy273;
-               goto yy297;
+               if (yych == '\n') goto yy284;
+               goto yy308;
        } else {
-               if (yych <= '"') goto yy299;
-               if (yych == '\\') goto yy300;
-               goto yy297;
+               if (yych <= '"') goto yy310;
+               if (yych == '\\') goto yy311;
+               goto yy308;
        }
-yy299:
+yy310:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '\n') goto yy294;
-       if (yych == '\r') goto yy296;
-       goto yy273;
-yy300:
+       if (yych == '\n') goto yy305;
+       if (yych == '\r') goto yy307;
+       goto yy284;
+yy311:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == '\n') goto yy273;
-       goto yy297;
+       if (yych == '\n') goto yy284;
+       goto yy308;
 }
-#line 421 "../src/ast/lex.re"
+#line 427 "../src/ast/lex.re"
 
 
 comment:
 
-#line 1876 "src/ast/lex.cc"
+#line 1924 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -1912,14 +1960,14 @@ comment:
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= ')') {
-               if (yych == '\n') goto yy305;
+               if (yych == '\n') goto yy316;
        } else {
-               if (yych <= '*') goto yy307;
-               if (yych == '/') goto yy308;
+               if (yych <= '*') goto yy318;
+               if (yych == '/') goto yy319;
        }
        ++YYCURSOR;
-yy304:
-#line 453 "../src/ast/lex.re"
+yy315:
+#line 459 "../src/ast/lex.re"
        {
                                        if (cur == eof)
                                        {
@@ -1927,15 +1975,15 @@ yy304:
                                        }
                                        goto comment;
                                }
-#line 1931 "src/ast/lex.cc"
-yy305:
+#line 1979 "src/ast/lex.cc"
+yy316:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yybm[0+yych] & 32) {
-               goto yy309;
+               goto yy320;
        }
-       if (yych == '#') goto yy312;
-yy306:
-#line 444 "../src/ast/lex.re"
+       if (yych == '#') goto yy323;
+yy317:
+#line 450 "../src/ast/lex.re"
        {
                                        if (cur == eof)
                                        {
@@ -1945,41 +1993,41 @@ yy306:
                                        cline++;
                                        goto comment;
                                }
-#line 1949 "src/ast/lex.cc"
-yy307:
+#line 1997 "src/ast/lex.cc"
+yy318:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '/') goto yy314;
-       goto yy304;
-yy308:
+       if (yych == '/') goto yy325;
+       goto yy315;
+yy319:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '*') goto yy316;
-       goto yy304;
-yy309:
+       if (yych == '*') goto yy327;
+       goto yy315;
+yy320:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yybm[0+yych] & 32) {
-               goto yy309;
+               goto yy320;
        }
-       if (yych == '#') goto yy312;
-yy311:
+       if (yych == '#') goto yy323;
+yy322:
        YYCURSOR = YYMARKER;
-       goto yy306;
-yy312:
+       goto yy317;
+yy323:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy312;
-               goto yy311;
+               if (yych == '\t') goto yy323;
+               goto yy322;
        } else {
-               if (yych <= ' ') goto yy312;
-               if (yych == 'l') goto yy318;
-               goto yy311;
+               if (yych <= ' ') goto yy323;
+               if (yych == 'l') goto yy329;
+               goto yy322;
        }
-yy314:
+yy325:
        ++YYCURSOR;
-#line 425 "../src/ast/lex.re"
+#line 431 "../src/ast/lex.re"
        {
                                        if (--depth == 0)
                                        {
@@ -1990,124 +2038,124 @@ yy314:
                                                goto comment;
                                        }
                                }
-#line 1994 "src/ast/lex.cc"
-yy316:
+#line 2042 "src/ast/lex.cc"
+yy327:
        ++YYCURSOR;
-#line 435 "../src/ast/lex.re"
+#line 441 "../src/ast/lex.re"
        {
                                        ++depth;
                                        fatal("ambiguous /* found");
                                        goto comment;
                                }
-#line 2003 "src/ast/lex.cc"
-yy318:
+#line 2051 "src/ast/lex.cc"
+yy329:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'i') goto yy311;
+       if (yych != 'i') goto yy322;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'n') goto yy311;
+       if (yych != 'n') goto yy322;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy311;
+       if (yych != 'e') goto yy322;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= '0') goto yy323;
-       if (yych <= '9') goto yy311;
-       goto yy323;
-yy322:
+       if (yych <= '0') goto yy334;
+       if (yych <= '9') goto yy322;
+       goto yy334;
+yy333:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-yy323:
+yy334:
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy322;
-               goto yy311;
+               if (yych == '\t') goto yy333;
+               goto yy322;
        } else {
-               if (yych <= ' ') goto yy322;
-               if (yych <= '0') goto yy311;
-               if (yych >= ':') goto yy311;
+               if (yych <= ' ') goto yy333;
+               if (yych <= '0') goto yy322;
+               if (yych >= ':') goto yy322;
                YYCTXMARKER = YYCURSOR;
        }
-yy324:
+yy335:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = (YYCTYPE)*YYCURSOR;
        if (yybm[0+yych] & 64) {
-               goto yy324;
+               goto yy335;
        }
        if (yych <= '\f') {
-               if (yych <= 0x08) goto yy311;
-               if (yych <= '\t') goto yy326;
-               if (yych <= '\n') goto yy328;
-               goto yy311;
+               if (yych <= 0x08) goto yy322;
+               if (yych <= '\t') goto yy337;
+               if (yych <= '\n') goto yy339;
+               goto yy322;
        } else {
-               if (yych <= '\r') goto yy330;
-               if (yych != ' ') goto yy311;
+               if (yych <= '\r') goto yy341;
+               if (yych != ' ') goto yy322;
        }
-yy326:
+yy337:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy326;
-               goto yy311;
+               if (yych == '\t') goto yy337;
+               goto yy322;
        } else {
-               if (yych <= ' ') goto yy326;
-               if (yych == '"') goto yy331;
-               goto yy311;
+               if (yych <= ' ') goto yy337;
+               if (yych == '"') goto yy342;
+               goto yy322;
        }
-yy328:
+yy339:
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
-#line 440 "../src/ast/lex.re"
+#line 446 "../src/ast/lex.re"
        {
                                        set_sourceline ();
                                        goto comment;
                                }
-#line 2065 "src/ast/lex.cc"
-yy330:
+#line 2113 "src/ast/lex.cc"
+yy341:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '\n') goto yy328;
-       goto yy311;
-yy331:
+       if (yych == '\n') goto yy339;
+       goto yy322;
+yy342:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = (YYCTYPE)*YYCURSOR;
        if (yybm[0+yych] & 128) {
-               goto yy331;
+               goto yy342;
        }
-       if (yych <= '\n') goto yy311;
-       if (yych >= '#') goto yy334;
+       if (yych <= '\n') goto yy322;
+       if (yych >= '#') goto yy345;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '\n') goto yy328;
-       if (yych == '\r') goto yy330;
-       goto yy311;
-yy334:
+       if (yych == '\n') goto yy339;
+       if (yych == '\r') goto yy341;
+       goto yy322;
+yy345:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == '\n') goto yy311;
-       goto yy331;
+       if (yych == '\n') goto yy322;
+       goto yy342;
 }
-#line 460 "../src/ast/lex.re"
+#line 466 "../src/ast/lex.re"
 
 
 nextLine:
 
-#line 2095 "src/ast/lex.cc"
+#line 2143 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == '\n') goto yy339;
+       if (yych == '\n') goto yy350;
        ++YYCURSOR;
-#line 471 "../src/ast/lex.re"
+#line 477 "../src/ast/lex.re"
        {  if(cur == eof) {
                   return 0;
                }
                goto nextLine;
             }
-#line 2108 "src/ast/lex.cc"
-yy339:
+#line 2156 "src/ast/lex.cc"
+yy350:
        ++YYCURSOR;
-#line 464 "../src/ast/lex.re"
+#line 470 "../src/ast/lex.re"
        { if(cur == eof) {
                   return 0;
                }
@@ -2115,9 +2163,9 @@ yy339:
                cline++;
                goto scan;
             }
-#line 2119 "src/ast/lex.cc"
+#line 2167 "src/ast/lex.cc"
 }
-#line 476 "../src/ast/lex.re"
+#line 482 "../src/ast/lex.re"
 
 }
 
@@ -2143,44 +2191,44 @@ fst:
        tok = cur;
        c = get_column();
        
-#line 2147 "src/ast/lex.cc"
+#line 2195 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == ']') goto yy344;
-#line 502 "../src/ast/lex.re"
+       if (yych == ']') goto yy355;
+#line 508 "../src/ast/lex.re"
        { l = lex_cls_chr(); goto snd; }
-#line 2155 "src/ast/lex.cc"
-yy344:
+#line 2203 "src/ast/lex.cc"
+yy355:
        ++YYCURSOR;
-#line 501 "../src/ast/lex.re"
+#line 507 "../src/ast/lex.re"
        { return ast_cls(cline, c0, cls, neg); }
-#line 2160 "src/ast/lex.cc"
+#line 2208 "src/ast/lex.cc"
 }
-#line 503 "../src/ast/lex.re"
+#line 509 "../src/ast/lex.re"
 
 snd:
        
-#line 2166 "src/ast/lex.cc"
+#line 2214 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = (YYCTYPE)*(YYMARKER = YYCURSOR);
-       if (yych == '-') goto yy349;
-yy348:
-#line 506 "../src/ast/lex.re"
+       if (yych == '-') goto yy360;
+yy359:
+#line 512 "../src/ast/lex.re"
        { u = l; goto add; }
-#line 2175 "src/ast/lex.cc"
-yy349:
+#line 2223 "src/ast/lex.cc"
+yy360:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != ']') goto yy351;
+       if (yych != ']') goto yy362;
        YYCURSOR = YYMARKER;
-       goto yy348;
-yy351:
+       goto yy359;
+yy362:
        ++YYCURSOR;
        YYCURSOR -= 1;
-#line 507 "../src/ast/lex.re"
+#line 513 "../src/ast/lex.re"
        {
                        u = lex_cls_chr();
                        if (l > u) {
@@ -2189,9 +2237,9 @@ yy351:
                        }
                        goto add;
                }
-#line 2193 "src/ast/lex.cc"
+#line 2241 "src/ast/lex.cc"
 }
-#line 515 "../src/ast/lex.re"
+#line 521 "../src/ast/lex.re"
 
 add:
        cls->push_back(ASTRange(l, u, c));
@@ -2202,290 +2250,290 @@ uint32_t Scanner::lex_cls_chr()
 {
        tok = cur;
        
-#line 2206 "src/ast/lex.cc"
+#line 2254 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
        if ((YYLIMIT - YYCURSOR) < 10) YYFILL(10);
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == '\n') goto yy357;
-       if (yych == '\\') goto yy359;
+       if (yych == '\n') goto yy368;
+       if (yych == '\\') goto yy370;
        ++YYCURSOR;
-#line 530 "../src/ast/lex.re"
+#line 536 "../src/ast/lex.re"
        { return static_cast<uint8_t>(tok[0]); }
-#line 2217 "src/ast/lex.cc"
-yy357:
+#line 2265 "src/ast/lex.cc"
+yy368:
        ++YYCURSOR;
-#line 525 "../src/ast/lex.re"
+#line 531 "../src/ast/lex.re"
        { fatal (get_column() - tchar, "syntax error"); }
-#line 2222 "src/ast/lex.cc"
-yy359:
+#line 2270 "src/ast/lex.cc"
+yy370:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '`') {
                if (yych <= '7') {
                        if (yych <= ',') {
-                               if (yych != '\n') goto yy361;
+                               if (yych != '\n') goto yy372;
                        } else {
-                               if (yych <= '-') goto yy363;
-                               if (yych <= '/') goto yy361;
-                               if (yych <= '3') goto yy365;
-                               goto yy367;
+                               if (yych <= '-') goto yy374;
+                               if (yych <= '/') goto yy372;
+                               if (yych <= '3') goto yy376;
+                               goto yy378;
                        }
                } else {
                        if (yych <= 'X') {
-                               if (yych == 'U') goto yy368;
-                               if (yych <= 'W') goto yy361;
-                               goto yy370;
+                               if (yych == 'U') goto yy379;
+                               if (yych <= 'W') goto yy372;
+                               goto yy381;
                        } else {
-                               if (yych <= '[') goto yy361;
-                               if (yych <= '\\') goto yy371;
-                               if (yych <= ']') goto yy373;
-                               goto yy361;
+                               if (yych <= '[') goto yy372;
+                               if (yych <= '\\') goto yy382;
+                               if (yych <= ']') goto yy384;
+                               goto yy372;
                        }
                }
        } else {
                if (yych <= 'q') {
                        if (yych <= 'e') {
-                               if (yych <= 'a') goto yy375;
-                               if (yych <= 'b') goto yy377;
-                               goto yy361;
+                               if (yych <= 'a') goto yy386;
+                               if (yych <= 'b') goto yy388;
+                               goto yy372;
                        } else {
-                               if (yych <= 'f') goto yy379;
-                               if (yych == 'n') goto yy381;
-                               goto yy361;
+                               if (yych <= 'f') goto yy390;
+                               if (yych == 'n') goto yy392;
+                               goto yy372;
                        }
                } else {
                        if (yych <= 'u') {
-                               if (yych <= 'r') goto yy383;
-                               if (yych <= 's') goto yy361;
-                               if (yych <= 't') goto yy385;
-                               goto yy370;
+                               if (yych <= 'r') goto yy394;
+                               if (yych <= 's') goto yy372;
+                               if (yych <= 't') goto yy396;
+                               goto yy381;
                        } else {
-                               if (yych <= 'v') goto yy387;
-                               if (yych == 'x') goto yy389;
-                               goto yy361;
+                               if (yych <= 'v') goto yy398;
+                               if (yych == 'x') goto yy400;
+                               goto yy372;
                        }
                }
        }
-#line 528 "../src/ast/lex.re"
+#line 534 "../src/ast/lex.re"
        { fatal (get_column() - tchar, "syntax error in escape sequence"); }
-#line 2273 "src/ast/lex.cc"
-yy361:
+#line 2321 "src/ast/lex.cc"
+yy372:
        ++YYCURSOR;
-#line 543 "../src/ast/lex.re"
+#line 549 "../src/ast/lex.re"
        {
                        warn.useless_escape(cline, get_column(), tok[1]);
                        return static_cast<uint8_t>(tok[1]);
                }
-#line 2281 "src/ast/lex.cc"
-yy363:
+#line 2329 "src/ast/lex.cc"
+yy374:
        ++YYCURSOR;
-#line 541 "../src/ast/lex.re"
+#line 547 "../src/ast/lex.re"
        { return static_cast<uint8_t>('-'); }
-#line 2286 "src/ast/lex.cc"
-yy365:
+#line 2334 "src/ast/lex.cc"
+yy376:
        yyaccept = 0;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych <= '/') goto yy366;
-       if (yych <= '7') goto yy390;
-yy366:
-#line 527 "../src/ast/lex.re"
+       if (yych <= '/') goto yy377;
+       if (yych <= '7') goto yy401;
+yy377:
+#line 533 "../src/ast/lex.re"
        { fatal (get_column() - tchar, "syntax error in octal escape sequence"); }
-#line 2295 "src/ast/lex.cc"
-yy367:
+#line 2343 "src/ast/lex.cc"
+yy378:
        ++YYCURSOR;
-       goto yy366;
-yy368:
+       goto yy377;
+yy379:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= '@') {
-               if (yych <= '/') goto yy369;
-               if (yych <= '9') goto yy392;
+               if (yych <= '/') goto yy380;
+               if (yych <= '9') goto yy403;
        } else {
-               if (yych <= 'F') goto yy392;
-               if (yych <= '`') goto yy369;
-               if (yych <= 'f') goto yy392;
+               if (yych <= 'F') goto yy403;
+               if (yych <= '`') goto yy380;
+               if (yych <= 'f') goto yy403;
        }
-yy369:
-#line 526 "../src/ast/lex.re"
+yy380:
+#line 532 "../src/ast/lex.re"
        { fatal (get_column() - tchar, "syntax error in hexadecimal escape sequence"); }
-#line 2313 "src/ast/lex.cc"
-yy370:
+#line 2361 "src/ast/lex.cc"
+yy381:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= '@') {
-               if (yych <= '/') goto yy369;
-               if (yych <= '9') goto yy393;
-               goto yy369;
+               if (yych <= '/') goto yy380;
+               if (yych <= '9') goto yy404;
+               goto yy380;
        } else {
-               if (yych <= 'F') goto yy393;
-               if (yych <= '`') goto yy369;
-               if (yych <= 'f') goto yy393;
-               goto yy369;
+               if (yych <= 'F') goto yy404;
+               if (yych <= '`') goto yy380;
+               if (yych <= 'f') goto yy404;
+               goto yy380;
        }
-yy371:
+yy382:
        ++YYCURSOR;
-#line 540 "../src/ast/lex.re"
+#line 546 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\\'); }
-#line 2331 "src/ast/lex.cc"
-yy373:
+#line 2379 "src/ast/lex.cc"
+yy384:
        ++YYCURSOR;
-#line 542 "../src/ast/lex.re"
+#line 548 "../src/ast/lex.re"
        { return static_cast<uint8_t>(']'); }
-#line 2336 "src/ast/lex.cc"
-yy375:
+#line 2384 "src/ast/lex.cc"
+yy386:
        ++YYCURSOR;
-#line 533 "../src/ast/lex.re"
+#line 539 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\a'); }
-#line 2341 "src/ast/lex.cc"
-yy377:
+#line 2389 "src/ast/lex.cc"
+yy388:
        ++YYCURSOR;
-#line 534 "../src/ast/lex.re"
+#line 540 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\b'); }
-#line 2346 "src/ast/lex.cc"
-yy379:
+#line 2394 "src/ast/lex.cc"
+yy390:
        ++YYCURSOR;
-#line 535 "../src/ast/lex.re"
+#line 541 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\f'); }
-#line 2351 "src/ast/lex.cc"
-yy381:
+#line 2399 "src/ast/lex.cc"
+yy392:
        ++YYCURSOR;
-#line 536 "../src/ast/lex.re"
+#line 542 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\n'); }
-#line 2356 "src/ast/lex.cc"
-yy383:
+#line 2404 "src/ast/lex.cc"
+yy394:
        ++YYCURSOR;
-#line 537 "../src/ast/lex.re"
+#line 543 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\r'); }
-#line 2361 "src/ast/lex.cc"
-yy385:
+#line 2409 "src/ast/lex.cc"
+yy396:
        ++YYCURSOR;
-#line 538 "../src/ast/lex.re"
+#line 544 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\t'); }
-#line 2366 "src/ast/lex.cc"
-yy387:
+#line 2414 "src/ast/lex.cc"
+yy398:
        ++YYCURSOR;
-#line 539 "../src/ast/lex.re"
+#line 545 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\v'); }
-#line 2371 "src/ast/lex.cc"
-yy389:
+#line 2419 "src/ast/lex.cc"
+yy400:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= '@') {
-               if (yych <= '/') goto yy369;
-               if (yych <= '9') goto yy394;
-               goto yy369;
+               if (yych <= '/') goto yy380;
+               if (yych <= '9') goto yy405;
+               goto yy380;
        } else {
-               if (yych <= 'F') goto yy394;
-               if (yych <= '`') goto yy369;
-               if (yych <= 'f') goto yy394;
-               goto yy369;
+               if (yych <= 'F') goto yy405;
+               if (yych <= '`') goto yy380;
+               if (yych <= 'f') goto yy405;
+               goto yy380;
        }
-yy390:
+yy401:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= '/') goto yy391;
-       if (yych <= '7') goto yy395;
-yy391:
+       if (yych <= '/') goto yy402;
+       if (yych <= '7') goto yy406;
+yy402:
        YYCURSOR = YYMARKER;
        if (yyaccept == 0) {
-               goto yy366;
+               goto yy377;
        } else {
-               goto yy369;
+               goto yy380;
        }
-yy392:
+yy403:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy391;
-               if (yych <= '9') goto yy397;
-               goto yy391;
+               if (yych <= '/') goto yy402;
+               if (yych <= '9') goto yy408;
+               goto yy402;
        } else {
-               if (yych <= 'F') goto yy397;
-               if (yych <= '`') goto yy391;
-               if (yych <= 'f') goto yy397;
-               goto yy391;
+               if (yych <= 'F') goto yy408;
+               if (yych <= '`') goto yy402;
+               if (yych <= 'f') goto yy408;
+               goto yy402;
        }
-yy393:
+yy404:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy391;
-               if (yych <= '9') goto yy398;
-               goto yy391;
+               if (yych <= '/') goto yy402;
+               if (yych <= '9') goto yy409;
+               goto yy402;
        } else {
-               if (yych <= 'F') goto yy398;
-               if (yych <= '`') goto yy391;
-               if (yych <= 'f') goto yy398;
-               goto yy391;
+               if (yych <= 'F') goto yy409;
+               if (yych <= '`') goto yy402;
+               if (yych <= 'f') goto yy409;
+               goto yy402;
        }
-yy394:
+yy405:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy391;
-               if (yych <= '9') goto yy399;
-               goto yy391;
+               if (yych <= '/') goto yy402;
+               if (yych <= '9') goto yy410;
+               goto yy402;
        } else {
-               if (yych <= 'F') goto yy399;
-               if (yych <= '`') goto yy391;
-               if (yych <= 'f') goto yy399;
-               goto yy391;
+               if (yych <= 'F') goto yy410;
+               if (yych <= '`') goto yy402;
+               if (yych <= 'f') goto yy410;
+               goto yy402;
        }
-yy395:
+yy406:
        ++YYCURSOR;
-#line 532 "../src/ast/lex.re"
+#line 538 "../src/ast/lex.re"
        { return unesc_oct(tok, cur); }
-#line 2436 "src/ast/lex.cc"
-yy397:
+#line 2484 "src/ast/lex.cc"
+yy408:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy391;
-               if (yych <= '9') goto yy401;
-               goto yy391;
+               if (yych <= '/') goto yy402;
+               if (yych <= '9') goto yy412;
+               goto yy402;
        } else {
-               if (yych <= 'F') goto yy401;
-               if (yych <= '`') goto yy391;
-               if (yych <= 'f') goto yy401;
-               goto yy391;
+               if (yych <= 'F') goto yy412;
+               if (yych <= '`') goto yy402;
+               if (yych <= 'f') goto yy412;
+               goto yy402;
        }
-yy398:
+yy409:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy391;
-               if (yych <= '9') goto yy394;
-               goto yy391;
+               if (yych <= '/') goto yy402;
+               if (yych <= '9') goto yy405;
+               goto yy402;
        } else {
-               if (yych <= 'F') goto yy394;
-               if (yych <= '`') goto yy391;
-               if (yych <= 'f') goto yy394;
-               goto yy391;
+               if (yych <= 'F') goto yy405;
+               if (yych <= '`') goto yy402;
+               if (yych <= 'f') goto yy405;
+               goto yy402;
        }
-yy399:
+yy410:
        ++YYCURSOR;
-#line 531 "../src/ast/lex.re"
+#line 537 "../src/ast/lex.re"
        { return unesc_hex(tok, cur); }
-#line 2465 "src/ast/lex.cc"
-yy401:
+#line 2513 "src/ast/lex.cc"
+yy412:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy391;
-               if (yych >= ':') goto yy391;
+               if (yych <= '/') goto yy402;
+               if (yych >= ':') goto yy402;
        } else {
-               if (yych <= 'F') goto yy402;
-               if (yych <= '`') goto yy391;
-               if (yych >= 'g') goto yy391;
+               if (yych <= 'F') goto yy413;
+               if (yych <= '`') goto yy402;
+               if (yych >= 'g') goto yy402;
        }
-yy402:
+yy413:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy391;
-               if (yych <= '9') goto yy393;
-               goto yy391;
+               if (yych <= '/') goto yy402;
+               if (yych <= '9') goto yy404;
+               goto yy402;
        } else {
-               if (yych <= 'F') goto yy393;
-               if (yych <= '`') goto yy391;
-               if (yych <= 'f') goto yy393;
-               goto yy391;
+               if (yych <= 'F') goto yy404;
+               if (yych <= '`') goto yy402;
+               if (yych <= 'f') goto yy404;
+               goto yy402;
        }
 }
-#line 547 "../src/ast/lex.re"
+#line 553 "../src/ast/lex.re"
 
 }
 
@@ -2494,282 +2542,282 @@ uint32_t Scanner::lex_str_chr(char quote, bool &end)
        end = false;
        tok = cur;
        
-#line 2498 "src/ast/lex.cc"
+#line 2546 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
        if ((YYLIMIT - YYCURSOR) < 10) YYFILL(10);
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == '\n') goto yy407;
-       if (yych == '\\') goto yy409;
+       if (yych == '\n') goto yy418;
+       if (yych == '\\') goto yy420;
        ++YYCURSOR;
-#line 560 "../src/ast/lex.re"
+#line 566 "../src/ast/lex.re"
        {
                        end = tok[0] == quote;
                        return static_cast<uint8_t>(tok[0]);
                }
-#line 2512 "src/ast/lex.cc"
-yy407:
+#line 2560 "src/ast/lex.cc"
+yy418:
        ++YYCURSOR;
-#line 555 "../src/ast/lex.re"
+#line 561 "../src/ast/lex.re"
        { fatal (get_column() - tchar, "syntax error"); }
-#line 2517 "src/ast/lex.cc"
-yy409:
+#line 2565 "src/ast/lex.cc"
+yy420:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 'a') {
                if (yych <= 'T') {
                        if (yych <= '/') {
-                               if (yych != '\n') goto yy411;
+                               if (yych != '\n') goto yy422;
                        } else {
-                               if (yych <= '3') goto yy413;
-                               if (yych <= '7') goto yy415;
-                               goto yy411;
+                               if (yych <= '3') goto yy424;
+                               if (yych <= '7') goto yy426;
+                               goto yy422;
                        }
                } else {
                        if (yych <= 'X') {
-                               if (yych <= 'U') goto yy416;
-                               if (yych <= 'W') goto yy411;
-                               goto yy418;
+                               if (yych <= 'U') goto yy427;
+                               if (yych <= 'W') goto yy422;
+                               goto yy429;
                        } else {
-                               if (yych == '\\') goto yy419;
-                               if (yych <= '`') goto yy411;
-                               goto yy421;
+                               if (yych == '\\') goto yy430;
+                               if (yych <= '`') goto yy422;
+                               goto yy432;
                        }
                }
        } else {
                if (yych <= 'r') {
                        if (yych <= 'f') {
-                               if (yych <= 'b') goto yy423;
-                               if (yych <= 'e') goto yy411;
-                               goto yy425;
+                               if (yych <= 'b') goto yy434;
+                               if (yych <= 'e') goto yy422;
+                               goto yy436;
                        } else {
-                               if (yych == 'n') goto yy427;
-                               if (yych <= 'q') goto yy411;
-                               goto yy429;
+                               if (yych == 'n') goto yy438;
+                               if (yych <= 'q') goto yy422;
+                               goto yy440;
                        }
                } else {
                        if (yych <= 'u') {
-                               if (yych <= 's') goto yy411;
-                               if (yych <= 't') goto yy431;
-                               goto yy418;
+                               if (yych <= 's') goto yy422;
+                               if (yych <= 't') goto yy442;
+                               goto yy429;
                        } else {
-                               if (yych <= 'v') goto yy433;
-                               if (yych == 'x') goto yy435;
-                               goto yy411;
+                               if (yych <= 'v') goto yy444;
+                               if (yych == 'x') goto yy446;
+                               goto yy422;
                        }
                }
        }
-#line 558 "../src/ast/lex.re"
+#line 564 "../src/ast/lex.re"
        { fatal (get_column() - tchar, "syntax error in escape sequence"); }
-#line 2565 "src/ast/lex.cc"
-yy411:
+#line 2613 "src/ast/lex.cc"
+yy422:
        ++YYCURSOR;
-#line 574 "../src/ast/lex.re"
+#line 580 "../src/ast/lex.re"
        {
                        if (tok[1] != quote) {
                                warn.useless_escape(cline, get_column(), tok[1]);
                        }
                        return static_cast<uint8_t>(tok[1]);
                }
-#line 2575 "src/ast/lex.cc"
-yy413:
+#line 2623 "src/ast/lex.cc"
+yy424:
        yyaccept = 0;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych <= '/') goto yy414;
-       if (yych <= '7') goto yy436;
-yy414:
-#line 557 "../src/ast/lex.re"
+       if (yych <= '/') goto yy425;
+       if (yych <= '7') goto yy447;
+yy425:
+#line 563 "../src/ast/lex.re"
        { fatal (get_column() - tchar, "syntax error in octal escape sequence"); }
-#line 2584 "src/ast/lex.cc"
-yy415:
+#line 2632 "src/ast/lex.cc"
+yy426:
        ++YYCURSOR;
-       goto yy414;
-yy416:
+       goto yy425;
+yy427:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= '@') {
-               if (yych <= '/') goto yy417;
-               if (yych <= '9') goto yy438;
+               if (yych <= '/') goto yy428;
+               if (yych <= '9') goto yy449;
        } else {
-               if (yych <= 'F') goto yy438;
-               if (yych <= '`') goto yy417;
-               if (yych <= 'f') goto yy438;
+               if (yych <= 'F') goto yy449;
+               if (yych <= '`') goto yy428;
+               if (yych <= 'f') goto yy449;
        }
-yy417:
-#line 556 "../src/ast/lex.re"
+yy428:
+#line 562 "../src/ast/lex.re"
        { fatal (get_column() - tchar, "syntax error in hexadecimal escape sequence"); }
-#line 2602 "src/ast/lex.cc"
-yy418:
+#line 2650 "src/ast/lex.cc"
+yy429:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= '@') {
-               if (yych <= '/') goto yy417;
-               if (yych <= '9') goto yy439;
-               goto yy417;
+               if (yych <= '/') goto yy428;
+               if (yych <= '9') goto yy450;
+               goto yy428;
        } else {
-               if (yych <= 'F') goto yy439;
-               if (yych <= '`') goto yy417;
-               if (yych <= 'f') goto yy439;
-               goto yy417;
+               if (yych <= 'F') goto yy450;
+               if (yych <= '`') goto yy428;
+               if (yych <= 'f') goto yy450;
+               goto yy428;
        }
-yy419:
+yy430:
        ++YYCURSOR;
-#line 573 "../src/ast/lex.re"
+#line 579 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\\'); }
-#line 2620 "src/ast/lex.cc"
-yy421:
+#line 2668 "src/ast/lex.cc"
+yy432:
        ++YYCURSOR;
-#line 566 "../src/ast/lex.re"
+#line 572 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\a'); }
-#line 2625 "src/ast/lex.cc"
-yy423:
+#line 2673 "src/ast/lex.cc"
+yy434:
        ++YYCURSOR;
-#line 567 "../src/ast/lex.re"
+#line 573 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\b'); }
-#line 2630 "src/ast/lex.cc"
-yy425:
+#line 2678 "src/ast/lex.cc"
+yy436:
        ++YYCURSOR;
-#line 568 "../src/ast/lex.re"
+#line 574 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\f'); }
-#line 2635 "src/ast/lex.cc"
-yy427:
+#line 2683 "src/ast/lex.cc"
+yy438:
        ++YYCURSOR;
-#line 569 "../src/ast/lex.re"
+#line 575 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\n'); }
-#line 2640 "src/ast/lex.cc"
-yy429:
+#line 2688 "src/ast/lex.cc"
+yy440:
        ++YYCURSOR;
-#line 570 "../src/ast/lex.re"
+#line 576 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\r'); }
-#line 2645 "src/ast/lex.cc"
-yy431:
+#line 2693 "src/ast/lex.cc"
+yy442:
        ++YYCURSOR;
-#line 571 "../src/ast/lex.re"
+#line 577 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\t'); }
-#line 2650 "src/ast/lex.cc"
-yy433:
+#line 2698 "src/ast/lex.cc"
+yy444:
        ++YYCURSOR;
-#line 572 "../src/ast/lex.re"
+#line 578 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\v'); }
-#line 2655 "src/ast/lex.cc"
-yy435:
+#line 2703 "src/ast/lex.cc"
+yy446:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= '@') {
-               if (yych <= '/') goto yy417;
-               if (yych <= '9') goto yy440;
-               goto yy417;
+               if (yych <= '/') goto yy428;
+               if (yych <= '9') goto yy451;
+               goto yy428;
        } else {
-               if (yych <= 'F') goto yy440;
-               if (yych <= '`') goto yy417;
-               if (yych <= 'f') goto yy440;
-               goto yy417;
+               if (yych <= 'F') goto yy451;
+               if (yych <= '`') goto yy428;
+               if (yych <= 'f') goto yy451;
+               goto yy428;
        }
-yy436:
+yy447:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= '/') goto yy437;
-       if (yych <= '7') goto yy441;
-yy437:
+       if (yych <= '/') goto yy448;
+       if (yych <= '7') goto yy452;
+yy448:
        YYCURSOR = YYMARKER;
        if (yyaccept == 0) {
-               goto yy414;
+               goto yy425;
        } else {
-               goto yy417;
+               goto yy428;
        }
-yy438:
+yy449:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy437;
-               if (yych <= '9') goto yy443;
-               goto yy437;
+               if (yych <= '/') goto yy448;
+               if (yych <= '9') goto yy454;
+               goto yy448;
        } else {
-               if (yych <= 'F') goto yy443;
-               if (yych <= '`') goto yy437;
-               if (yych <= 'f') goto yy443;
-               goto yy437;
+               if (yych <= 'F') goto yy454;
+               if (yych <= '`') goto yy448;
+               if (yych <= 'f') goto yy454;
+               goto yy448;
        }
-yy439:
+yy450:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy437;
-               if (yych <= '9') goto yy444;
-               goto yy437;
+               if (yych <= '/') goto yy448;
+               if (yych <= '9') goto yy455;
+               goto yy448;
        } else {
-               if (yych <= 'F') goto yy444;
-               if (yych <= '`') goto yy437;
-               if (yych <= 'f') goto yy444;
-               goto yy437;
+               if (yych <= 'F') goto yy455;
+               if (yych <= '`') goto yy448;
+               if (yych <= 'f') goto yy455;
+               goto yy448;
        }
-yy440:
+yy451:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy437;
-               if (yych <= '9') goto yy445;
-               goto yy437;
+               if (yych <= '/') goto yy448;
+               if (yych <= '9') goto yy456;
+               goto yy448;
        } else {
-               if (yych <= 'F') goto yy445;
-               if (yych <= '`') goto yy437;
-               if (yych <= 'f') goto yy445;
-               goto yy437;
+               if (yych <= 'F') goto yy456;
+               if (yych <= '`') goto yy448;
+               if (yych <= 'f') goto yy456;
+               goto yy448;
        }
-yy441:
+yy452:
        ++YYCURSOR;
-#line 565 "../src/ast/lex.re"
+#line 571 "../src/ast/lex.re"
        { return unesc_oct(tok, cur); }
-#line 2720 "src/ast/lex.cc"
-yy443:
+#line 2768 "src/ast/lex.cc"
+yy454:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy437;
-               if (yych <= '9') goto yy447;
-               goto yy437;
+               if (yych <= '/') goto yy448;
+               if (yych <= '9') goto yy458;
+               goto yy448;
        } else {
-               if (yych <= 'F') goto yy447;
-               if (yych <= '`') goto yy437;
-               if (yych <= 'f') goto yy447;
-               goto yy437;
+               if (yych <= 'F') goto yy458;
+               if (yych <= '`') goto yy448;
+               if (yych <= 'f') goto yy458;
+               goto yy448;
        }
-yy444:
+yy455:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy437;
-               if (yych <= '9') goto yy440;
-               goto yy437;
+               if (yych <= '/') goto yy448;
+               if (yych <= '9') goto yy451;
+               goto yy448;
        } else {
-               if (yych <= 'F') goto yy440;
-               if (yych <= '`') goto yy437;
-               if (yych <= 'f') goto yy440;
-               goto yy437;
+               if (yych <= 'F') goto yy451;
+               if (yych <= '`') goto yy448;
+               if (yych <= 'f') goto yy451;
+               goto yy448;
        }
-yy445:
+yy456:
        ++YYCURSOR;
-#line 564 "../src/ast/lex.re"
+#line 570 "../src/ast/lex.re"
        { return unesc_hex(tok, cur); }
-#line 2749 "src/ast/lex.cc"
-yy447:
+#line 2797 "src/ast/lex.cc"
+yy458:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy437;
-               if (yych >= ':') goto yy437;
+               if (yych <= '/') goto yy448;
+               if (yych >= ':') goto yy448;
        } else {
-               if (yych <= 'F') goto yy448;
-               if (yych <= '`') goto yy437;
-               if (yych >= 'g') goto yy437;
+               if (yych <= 'F') goto yy459;
+               if (yych <= '`') goto yy448;
+               if (yych >= 'g') goto yy448;
        }
-yy448:
+yy459:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
-               if (yych <= '/') goto yy437;
-               if (yych <= '9') goto yy439;
-               goto yy437;
+               if (yych <= '/') goto yy448;
+               if (yych <= '9') goto yy450;
+               goto yy448;
        } else {
-               if (yych <= 'F') goto yy439;
-               if (yych <= '`') goto yy437;
-               if (yych <= 'f') goto yy439;
-               goto yy437;
+               if (yych <= 'F') goto yy450;
+               if (yych <= '`') goto yy448;
+               if (yych <= 'f') goto yy450;
+               goto yy448;
        }
 }
-#line 580 "../src/ast/lex.re"
+#line 586 "../src/ast/lex.re"
 
 }
 
@@ -2789,7 +2837,7 @@ void Scanner::set_sourceline ()
 sourceline:
        tok = cur;
 
-#line 2793 "src/ast/lex.cc"
+#line 2841 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -2829,23 +2877,23 @@ sourceline:
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= '!') {
-               if (yych == '\n') goto yy453;
+               if (yych == '\n') goto yy464;
        } else {
-               if (yych <= '"') goto yy455;
-               if (yych <= '0') goto yy451;
-               if (yych <= '9') goto yy456;
+               if (yych <= '"') goto yy466;
+               if (yych <= '0') goto yy462;
+               if (yych <= '9') goto yy467;
        }
-yy451:
+yy462:
        ++YYCURSOR;
-yy452:
-#line 622 "../src/ast/lex.re"
+yy463:
+#line 628 "../src/ast/lex.re"
        {
                                        goto sourceline;
                                }
-#line 2846 "src/ast/lex.cc"
-yy453:
+#line 2894 "src/ast/lex.cc"
+yy464:
        ++YYCURSOR;
-#line 610 "../src/ast/lex.re"
+#line 616 "../src/ast/lex.re"
        {
                                        if (cur == eof)
                                        {
@@ -2858,19 +2906,19 @@ yy453:
                                        tok = cur;
                                        return; 
                                }
-#line 2862 "src/ast/lex.cc"
-yy455:
+#line 2910 "src/ast/lex.cc"
+yy466:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == '\n') goto yy452;
-       goto yy460;
-yy456:
+       if (yych == '\n') goto yy463;
+       goto yy471;
+yy467:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yybm[0+yych] & 64) {
-               goto yy456;
+               goto yy467;
        }
-#line 599 "../src/ast/lex.re"
+#line 605 "../src/ast/lex.re"
        {
                                        if (!s_to_u32_unsafe (tok, cur, cline))
                                        {
@@ -2878,37 +2926,37 @@ yy456:
                                        }
                                        goto sourceline; 
                                }
-#line 2882 "src/ast/lex.cc"
-yy459:
+#line 2930 "src/ast/lex.cc"
+yy470:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-yy460:
+yy471:
        if (yybm[0+yych] & 128) {
-               goto yy459;
+               goto yy470;
        }
-       if (yych <= '\n') goto yy461;
-       if (yych <= '"') goto yy462;
-       goto yy464;
-yy461:
+       if (yych <= '\n') goto yy472;
+       if (yych <= '"') goto yy473;
+       goto yy475;
+yy472:
        YYCURSOR = YYMARKER;
-       goto yy452;
-yy462:
+       goto yy463;
+yy473:
        ++YYCURSOR;
-#line 606 "../src/ast/lex.re"
+#line 612 "../src/ast/lex.re"
        {
                                        escape (in.file_name, std::string (tok + 1, tok_len () - 2)); // -2 to omit quotes
                                        goto sourceline; 
                                }
-#line 2904 "src/ast/lex.cc"
-yy464:
+#line 2952 "src/ast/lex.cc"
+yy475:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == '\n') goto yy461;
-       goto yy459;
+       if (yych == '\n') goto yy472;
+       goto yy470;
 }
-#line 625 "../src/ast/lex.re"
+#line 631 "../src/ast/lex.re"
 
 }
 
index 43d2ea7c603a5ebe485f487b7ff606d288dc0e3c..80fbb5b4ba0dec14ff5a5f3569f5039d8d5257bd 100644 (file)
@@ -114,7 +114,13 @@ echo:
 
        "/*!tags:re2c" {
                out.wraw(tok, ptr);
-               lex_tags(out);
+               lex_tags(out, false);
+               goto echo;
+       }
+
+       "/*!taglists:re2c" {
+               out.wraw(tok, ptr);
+               lex_tags(out, true);
                goto echo;
        }
 
@@ -158,7 +164,7 @@ void Scanner::lex_end_of_comment(OutputFile &out)
        */}
 }
 
-void Scanner::lex_tags(OutputFile &out)
+void Scanner::lex_tags(OutputFile &out, bool lists)
 {
        std::string fmt, sep;
        for (;;) {/*!re2c
@@ -170,7 +176,7 @@ void Scanner::lex_tags(OutputFile &out)
                space+ { continue; }
                eol    { ++cline; continue; }
                eoc    {
-                       out.wdelay_tags(new ConfTags(fmt, sep));
+                       out.wdelay_tags(new ConfTags(fmt, sep), lists);
                        tok = pos = cur;
                        return;
                }
index 96fe51a58ed0c1fbff767cb2bb3ac9f35a2b4588..9df32522ac13edff591f246d127536547fb860e8 100644 (file)
@@ -57,7 +57,7 @@ class Scanner: private ScannerState
 
        void fill (uint32_t);
        void lex_end_of_comment(OutputFile &out);
-       void lex_tags(OutputFile &out);
+       void lex_tags(OutputFile &out, bool lists);
        void set_sourceline ();
        uint32_t lex_cls_chr();
        uint32_t lex_str_chr(char quote, bool &end);
index 37db6fdeb1b83a6b5aba5337bfc9f28c73f67ab2..00ccca3bde0005a4bf12a034d04cbd306aa6bdb1 100644 (file)
@@ -193,6 +193,7 @@ void DFA::emit(Output & output, uint32_t& ind, bool isLastCond, bool& bPrologBra
                }
                delete[] list;
                ob.tags.insert(tagnames.begin(), tagnames.end());
+               ob.taglists.insert(taglistnames.begin(), taglistnames.end());
        }
        if (!cond.empty()) o.block().types.push_back(cond);
 
index f3363b6dfb0ee5f6630e72d1f04a1f689f0dcdd4..75512a3652d1d32e6df0e916bf4761378148ecca 100644 (file)
@@ -45,6 +45,7 @@ OutputBlock::OutputBlock ()
        , line (0)
        , types ()
        , tags ()
+       , taglists ()
        , opts(NULL)
 {
        fragments.push_back (new OutputFragment (OutputFragment::CODE, 0));
@@ -209,10 +210,11 @@ void OutputFile::insert_code ()
        }
 }
 
-OutputFile &OutputFile::wdelay_tags(const ConfTags *cf)
+OutputFile &OutputFile::wdelay_tags(const ConfTags *cf, bool lists)
 {
        if (block().opts->target == TARGET_CODE) {
-               OutputFragment *frag = new OutputFragment(OutputFragment::TAGS, 0);
+               OutputFragment *frag = new OutputFragment(
+                       lists ? OutputFragment::TAGLISTS : OutputFragment::TAGS, 0);
                frag->tags = cf;
                blocks.back()->fragments.push_back(frag);
        }
@@ -313,19 +315,21 @@ void OutputFile::new_block(Opt &opts)
        opts.reset_startlabel();
 }
 
-void OutputFile::global_lists(
-       uniq_vector_t<std::string> &types,
-       std::set<std::string> &tags) const
+void OutputFile::global_lists(uniq_vector_t<std::string> &types,
+       std::set<std::string> &tags, std::set<std::string> &taglists) const
 {
        for (unsigned int i = 0; i < blocks.size(); ++i) {
 
-               const std::vector<std::string> &ts = blocks[i]->types;
-               for (size_t j = 0; j < ts.size(); ++j) {
-                       types.find_or_add(ts[j]);
+               const std::vector<std::string> &cs = blocks[i]->types;
+               for (size_t j = 0; j < cs.size(); ++j) {
+                       types.find_or_add(cs[j]);
                }
 
-               const std::set<std::string> &cs = blocks[i]->tags;
-               tags.insert(cs.begin(), cs.end());
+               const std::set<std::string> &ts = blocks[i]->tags;
+               tags.insert(ts.begin(), ts.end());
+
+               const std::set<std::string> &tls = blocks[i]->taglists;
+               taglists.insert(tls.begin(), tls.end());
        }
 }
 
@@ -390,6 +394,7 @@ static void foldexpr(std::vector<OutputFragment*> &frags)
 
 bool OutputFile::emit(const uniq_vector_t<std::string> &global_types,
        const std::set<std::string> &global_tags,
+       const std::set<std::string> &global_taglists,
        size_t max_fill)
 {
        FILE *file = NULL;
@@ -439,6 +444,9 @@ bool OutputFile::emit(const uniq_vector_t<std::string> &global_types,
                        case OutputFragment::TAGS:
                                output_tags(o, ind, *f.tags, global_tags, bopt);
                                break;
+                       case OutputFragment::TAGLISTS:
+                               output_tags(o, ind, *f.tags, global_taglists, bopt);
+                               break;
                        case OutputFragment::TYPES:
                                output_types(o, ind, block().opts, global_types);
                                break;
@@ -527,13 +535,13 @@ bool Output::emit()
        }
 
        uniq_vector_t<std::string> types;
-       std::set<std::string> tags;
-       source.global_lists(types, tags);
+       std::set<std::string> tags, taglists;
+       source.global_lists(types, tags, taglists);
 
        // global options are last block's options
        const opt_t *opts = source.block().opts;
 
-       return source.emit(types, tags, max_fill)
+       return source.emit(types, tags, taglists, max_fill)
                && header.emit(opts, types);
 }
 
index 494ac4ebdbb0103d25d1d8e7cd17c7afb7e4db4a..5e9b9a0cac28a98f0e60326eeffecde68263e9c9 100644 (file)
@@ -39,6 +39,7 @@ struct OutputFragment
                , LINE_INFO
                , STATE_GOTO
                , TAGS
+               , TAGLISTS
                , TYPES
                , YYACCEPT_INIT
                , YYMAXFILL
@@ -75,6 +76,7 @@ struct OutputBlock
        uint32_t line;
        std::vector<std::string> types;
        std::set<std::string> tags;
+       std::set<std::string> taglists;
        const opt_t *opts;
 
        OutputBlock ();
@@ -121,7 +123,7 @@ public:
        OutputFile & wind (uint32_t ind);
 
        // delayed output
-       OutputFile & wdelay_tags(const ConfTags *cf);
+       OutputFile & wdelay_tags(const ConfTags *cf, bool lists);
        OutputFile & wdelay_line_info ();
        OutputFile & wdelay_cond_goto(uint32_t ind);
        OutputFile & wdelay_cond_table(uint32_t ind);
@@ -134,10 +136,11 @@ public:
        OutputFile& wdelay_backup(uint32_t ind, bool backup);
 
        void global_lists(uniq_vector_t<std::string> &types,
-               std::set<std::string> &tags) const;
+               std::set<std::string> &tags, std::set<std::string> &taglists) const;
 
        bool emit(const uniq_vector_t<std::string> &global_types,
-               const std::set<std::string> &global_tags, size_t max_fill);
+               const std::set<std::string> &global_tags,
+               const std::set<std::string> &global_taglists, size_t max_fill);
 
        FORBID_COPY (OutputFile);
 };