From 52ad8ae802aef671785877ed03ba77ef6cf68ea2 Mon Sep 17 00:00:00 2001 From: Ulya Trofimovich Date: Sun, 16 Jul 2017 12:13:04 +0100 Subject: [PATCH] Added directive '/*!taglists:re2c ... */' to handle tags with history. 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 | 2216 +++++++++++++++++---------------- re2c/src/ast/lex.re | 12 +- re2c/src/ast/scanner.h | 2 +- re2c/src/code/emit_dfa.cc | 1 + re2c/src/code/output.cc | 34 +- re2c/src/code/output.h | 9 +- 6 files changed, 1170 insertions(+), 1104 deletions(-) diff --git a/re2c/bootstrap/src/ast/lex.cc b/re2c/bootstrap/src/ast/lex.cc index 61cb2004..8fd64dd0 100644 --- a/re2c/bootstrap/src/ast/lex.cc +++ b/re2c/bootstrap/src/ast/lex.cc @@ -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 @@ -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::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(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(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('-'); } -#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('\\'); } -#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(']'); } -#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('\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('\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('\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('\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('\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('\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('\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(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(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('\\'); } -#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('\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('\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('\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('\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('\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('\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('\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" } diff --git a/re2c/src/ast/lex.re b/re2c/src/ast/lex.re index 43d2ea7c..80fbb5b4 100644 --- a/re2c/src/ast/lex.re +++ b/re2c/src/ast/lex.re @@ -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; } diff --git a/re2c/src/ast/scanner.h b/re2c/src/ast/scanner.h index 96fe51a5..9df32522 100644 --- a/re2c/src/ast/scanner.h +++ b/re2c/src/ast/scanner.h @@ -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); diff --git a/re2c/src/code/emit_dfa.cc b/re2c/src/code/emit_dfa.cc index 37db6fde..00ccca3b 100644 --- a/re2c/src/code/emit_dfa.cc +++ b/re2c/src/code/emit_dfa.cc @@ -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); diff --git a/re2c/src/code/output.cc b/re2c/src/code/output.cc index f3363b6d..75512a36 100644 --- a/re2c/src/code/output.cc +++ b/re2c/src/code/output.cc @@ -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 &types, - std::set &tags) const +void OutputFile::global_lists(uniq_vector_t &types, + std::set &tags, std::set &taglists) const { for (unsigned int i = 0; i < blocks.size(); ++i) { - const std::vector &ts = blocks[i]->types; - for (size_t j = 0; j < ts.size(); ++j) { - types.find_or_add(ts[j]); + const std::vector &cs = blocks[i]->types; + for (size_t j = 0; j < cs.size(); ++j) { + types.find_or_add(cs[j]); } - const std::set &cs = blocks[i]->tags; - tags.insert(cs.begin(), cs.end()); + const std::set &ts = blocks[i]->tags; + tags.insert(ts.begin(), ts.end()); + + const std::set &tls = blocks[i]->taglists; + taglists.insert(tls.begin(), tls.end()); } } @@ -390,6 +394,7 @@ static void foldexpr(std::vector &frags) bool OutputFile::emit(const uniq_vector_t &global_types, const std::set &global_tags, + const std::set &global_taglists, size_t max_fill) { FILE *file = NULL; @@ -439,6 +444,9 @@ bool OutputFile::emit(const uniq_vector_t &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 types; - std::set tags; - source.global_lists(types, tags); + std::set 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); } diff --git a/re2c/src/code/output.h b/re2c/src/code/output.h index 494ac4eb..5e9b9a0c 100644 --- a/re2c/src/code/output.h +++ b/re2c/src/code/output.h @@ -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 types; std::set tags; + std::set 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 &types, - std::set &tags) const; + std::set &tags, std::set &taglists) const; bool emit(const uniq_vector_t &global_types, - const std::set &global_tags, size_t max_fill); + const std::set &global_tags, + const std::set &global_taglists, size_t max_fill); FORBID_COPY (OutputFile); }; -- 2.40.0