From c50f26462ffbd4a2b40ccc0b213d601e65d850f7 Mon Sep 17 00:00:00 2001 From: Ulya Trofimovich Date: Wed, 21 Nov 2018 22:03:12 +0000 Subject: [PATCH] Use tags to lex condition goto. --- re2c/bootstrap/src/ast/lex.cc | 1923 ++++++++++++++++----------------- re2c/src/ast/lex.re | 20 +- re2c/src/ast/scanner.h | 1 - 3 files changed, 932 insertions(+), 1012 deletions(-) diff --git a/re2c/bootstrap/src/ast/lex.cc b/re2c/bootstrap/src/ast/lex.cc index d1607945..5971906e 100644 --- a/re2c/bootstrap/src/ast/lex.cc +++ b/re2c/bootstrap/src/ast/lex.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 1.1.1 on Wed Nov 21 00:09:57 2018 */ +/* Generated by re2c 1.1.1 on Wed Nov 21 08:27:30 2018 */ #line 1 "../src/ast/lex.re" #include "src/util/c99_stdint.h" #include @@ -1135,7 +1135,7 @@ scan: yy201: ++YYCURSOR; yy202: -#line 354 "../src/ast/lex.re" +#line 357 "../src/ast/lex.re" { fatal_lc(get_cline(), get_column(), "unexpected character: '%c'", *tok); goto scan; @@ -1148,7 +1148,7 @@ yy203: if (yybm[0+yych] & 16) { goto yy203; } -#line 335 "../src/ast/lex.re" +#line 338 "../src/ast/lex.re" { goto scan; } #line 1154 "src/ast/lex.cc" yy206: @@ -1161,7 +1161,7 @@ yy206: if (yych == '#') goto yy236; } yy207: -#line 342 "../src/ast/lex.re" +#line 345 "../src/ast/lex.re" { pos = cur; cline++; @@ -1180,7 +1180,7 @@ yy208: goto yy202; yy209: ++YYCURSOR; -#line 253 "../src/ast/lex.re" +#line 256 "../src/ast/lex.re" { yylval.regexp = lex_str('"'); return TOKEN_REGEXP; } #line 1186 "src/ast/lex.cc" yy211: @@ -1200,13 +1200,13 @@ yy212: goto yy202; yy213: ++YYCURSOR; -#line 252 "../src/ast/lex.re" +#line 255 "../src/ast/lex.re" { yylval.regexp = lex_str('\''); return TOKEN_REGEXP; } #line 1206 "src/ast/lex.cc" yy215: ++YYCURSOR; yy216: -#line 263 "../src/ast/lex.re" +#line 266 "../src/ast/lex.re" { return *tok; } #line 1212 "src/ast/lex.cc" yy217: @@ -1215,7 +1215,7 @@ yy217: goto yy216; yy218: ++YYCURSOR; -#line 330 "../src/ast/lex.re" +#line 333 "../src/ast/lex.re" { yylval.regexp = ast_dot(cline, get_column()); return TOKEN_REGEXP; @@ -1232,11 +1232,12 @@ yy221: goto yy202; yy222: ++YYCURSOR; -#line 245 "../src/ast/lex.re" +#line 248 "../src/ast/lex.re" { return lex_clist(); } #line 1238 "src/ast/lex.cc" yy224: - yych = (YYCTYPE)*++YYCURSOR; + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych == '>') goto yy249; goto yy216; yy225: @@ -1247,7 +1248,7 @@ yy226: if (yybm[0+yych] & 32) { goto yy225; } -#line 307 "../src/ast/lex.re" +#line 310 "../src/ast/lex.re" { if (!globopts->FFlag || lex_namedef_context_re2c()) { yylval.str = new std::string (tok, tok_len()); @@ -1270,19 +1271,19 @@ yy226: return TOKEN_REGEXP; } } -#line 1274 "src/ast/lex.cc" +#line 1275 "src/ast/lex.cc" yy228: yych = (YYCTYPE)*++YYCURSOR; if (yych == '^') goto yy251; -#line 254 "../src/ast/lex.re" +#line 257 "../src/ast/lex.re" { yylval.regexp = lex_cls(false); return TOKEN_REGEXP; } -#line 1280 "src/ast/lex.cc" +#line 1281 "src/ast/lex.cc" yy230: yych = (YYCTYPE)*++YYCURSOR; if (yych == 'e') goto yy253; goto yy226; yy231: - yyaccept = 1; + yyaccept = 2; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 64) { goto yy256; @@ -1301,7 +1302,7 @@ yy231: yy232: #line 240 "../src/ast/lex.re" { lex_code_in_braces(); return TOKEN_CODE; } -#line 1305 "src/ast/lex.cc" +#line 1306 "src/ast/lex.cc" yy233: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -1314,14 +1315,22 @@ yy233: } yy235: YYCURSOR = YYMARKER; - if (yyaccept <= 1) { - if (yyaccept == 0) { - goto yy207; + if (yyaccept <= 2) { + if (yyaccept <= 1) { + if (yyaccept == 0) { + goto yy207; + } else { + goto yy216; + } } else { goto yy232; } } else { - goto yy255; + if (yyaccept == 3) { + goto yy248; + } else { + goto yy255; + } } yy236: ++YYCURSOR; @@ -1352,57 +1361,84 @@ yy238: } } yy240: -#line 257 "../src/ast/lex.re" +#line 260 "../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 1362 "src/ast/lex.cc" +#line 1371 "src/ast/lex.cc" yy241: ++YYCURSOR; -#line 250 "../src/ast/lex.re" +#line 253 "../src/ast/lex.re" { tok = cur; return 0; } -#line 1367 "src/ast/lex.cc" +#line 1376 "src/ast/lex.cc" yy243: ++YYCURSOR; -#line 248 "../src/ast/lex.re" +#line 251 "../src/ast/lex.re" { lex_c_comment(); goto scan; } -#line 1372 "src/ast/lex.cc" +#line 1381 "src/ast/lex.cc" yy245: ++YYCURSOR; -#line 247 "../src/ast/lex.re" +#line 250 "../src/ast/lex.re" { lex_cpp_comment(); goto scan; } -#line 1377 "src/ast/lex.cc" +#line 1386 "src/ast/lex.cc" yy247: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == '>') goto yy261; + yyaccept = 3; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych == '>') goto yy249; +yy248: #line 241 "../src/ast/lex.re" { lex_code_indented(); return TOKEN_CODE; } -#line 1383 "src/ast/lex.cc" +#line 1394 "src/ast/lex.cc" yy249: ++YYCURSOR; -#line 243 "../src/ast/lex.re" - { lex_cgoto(); return TOKEN_CNEXT; } -#line 1388 "src/ast/lex.cc" + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = (YYCTYPE)*YYCURSOR; + if (yych <= '@') { + if (yych <= '\t') { + if (yych <= 0x08) goto yy235; + goto yy249; + } else { + if (yych == ' ') goto yy249; + goto yy235; + } + } else { + if (yych <= '_') { + if (yych <= 'Z') { + yyt1 = YYCURSOR; + goto yy261; + } + if (yych <= '^') goto yy235; + yyt1 = YYCURSOR; + goto yy261; + } else { + if (yych <= '`') goto yy235; + if (yych <= 'z') { + yyt1 = YYCURSOR; + goto yy261; + } + goto yy235; + } + } yy251: ++YYCURSOR; -#line 255 "../src/ast/lex.re" +#line 258 "../src/ast/lex.re" { yylval.regexp = lex_cls(true); return TOKEN_REGEXP; } -#line 1393 "src/ast/lex.cc" +#line 1429 "src/ast/lex.cc" yy253: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '2') goto yy263; + if (yych == '2') goto yy264; goto yy226; yy254: ++YYCURSOR; yy255: -#line 291 "../src/ast/lex.re" +#line 294 "../src/ast/lex.re" { fatal_lc(get_cline(), get_column(), "illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers"); } -#line 1406 "src/ast/lex.cc" +#line 1442 "src/ast/lex.cc" yy256: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -1412,9 +1448,9 @@ yy256: } if (yych == ',') { yyt1 = YYCURSOR; - goto yy264; + goto yy265; } - if (yych == '}') goto yy265; + if (yych == '}') goto yy266; goto yy235; yy258: ++YYCURSOR; @@ -1434,33 +1470,52 @@ yy258: if (yych == '`') goto yy235; goto yy258; } else { - if (yych == '}') goto yy267; + if (yych == '}') goto yy268; goto yy235; } } yy260: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy269; + if (yych == 'i') goto yy270; goto yy235; yy261: ++YYCURSOR; -#line 244 "../src/ast/lex.re" - { lex_cgoto(); return TOKEN_CJUMP; } -#line 1450 "src/ast/lex.cc" + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = (YYCTYPE)*YYCURSOR; + if (yych <= 'Z') { + if (yych <= '/') goto yy263; + if (yych <= '9') goto yy261; + if (yych >= 'A') goto yy261; + } else { + if (yych <= '_') { + if (yych >= '_') goto yy261; + } else { + if (yych <= '`') goto yy263; + if (yych <= 'z') goto yy261; + } + } yy263: + p = yyt1; +#line 243 "../src/ast/lex.re" + { + yylval.str = new std::string(p, static_cast(cur - p)); + return tok[0] == ':' ? TOKEN_CJUMP : TOKEN_CNEXT; + } +#line 1505 "src/ast/lex.cc" +yy264: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'c') goto yy270; + if (yych == 'c') goto yy271; goto yy226; -yy264: - yyaccept = 2; +yy265: + yyaccept = 4; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= '/') goto yy255; - if (yych <= '9') goto yy271; - if (yych == '}') goto yy273; + if (yych <= '9') goto yy272; + if (yych == '}') goto yy274; goto yy255; -yy265: +yy266: ++YYCURSOR; -#line 265 "../src/ast/lex.re" +#line 268 "../src/ast/lex.re" { if (!s_to_u32_unsafe (tok + 1, cur - 1, yylval.bounds.min)) { fatal_lc(get_cline(), get_column(), "repetition count overflow"); @@ -1468,10 +1523,10 @@ yy265: yylval.bounds.max = yylval.bounds.min; return TOKEN_CLOSESIZE; } -#line 1472 "src/ast/lex.cc" -yy267: +#line 1527 "src/ast/lex.cc" +yy268: ++YYCURSOR; -#line 296 "../src/ast/lex.re" +#line 299 "../src/ast/lex.re" { if (!globopts->FFlag) { fatal_lc(get_cline(), get_column(), @@ -1480,26 +1535,26 @@ yy267: yylval.str = new std::string (tok + 1, tok_len () - 2); // -2 to omit braces return TOKEN_ID; } -#line 1484 "src/ast/lex.cc" -yy269: +#line 1539 "src/ast/lex.cc" +yy270: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy275; + if (yych == 'n') goto yy276; goto yy235; -yy270: +yy271: yych = (YYCTYPE)*++YYCURSOR; - if (yych == ':') goto yy276; + if (yych == ':') goto yy277; goto yy226; -yy271: +yy272: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= '/') goto yy235; - if (yych <= '9') goto yy271; - if (yych == '}') goto yy278; + if (yych <= '9') goto yy272; + if (yych == '}') goto yy279; goto yy235; -yy273: +yy274: ++YYCURSOR; -#line 283 "../src/ast/lex.re" +#line 286 "../src/ast/lex.re" { if (!s_to_u32_unsafe (tok + 1, cur - 2, yylval.bounds.min)) { fatal_lc(get_cline(), get_column(), "repetition lower bound overflow"); @@ -1507,20 +1562,20 @@ yy273: yylval.bounds.max = std::numeric_limits::max(); return TOKEN_CLOSESIZE; } -#line 1511 "src/ast/lex.cc" -yy275: +#line 1566 "src/ast/lex.cc" +yy276: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy280; + if (yych == 'e') goto yy281; goto yy235; -yy276: +yy277: ++YYCURSOR; -#line 305 "../src/ast/lex.re" +#line 308 "../src/ast/lex.re" { return TOKEN_CONF; } -#line 1520 "src/ast/lex.cc" -yy278: +#line 1575 "src/ast/lex.cc" +yy279: ++YYCURSOR; p = yyt1; -#line 273 "../src/ast/lex.re" +#line 276 "../src/ast/lex.re" { if (!s_to_u32_unsafe (tok + 1, p, yylval.bounds.min)) { fatal_lc(get_cline(), get_column(), "repetition lower bound overflow"); @@ -1530,27 +1585,27 @@ yy278: } return TOKEN_CLOSESIZE; } -#line 1534 "src/ast/lex.cc" -yy280: +#line 1589 "src/ast/lex.cc" +yy281: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '0') goto yy282; + if (yych <= '0') goto yy283; if (yych <= '9') goto yy235; - goto yy282; -yy281: + goto yy283; +yy282: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy282: +yy283: if (yych <= 0x1F) { - if (yych == '\t') goto yy281; + if (yych == '\t') goto yy282; goto yy235; } else { - if (yych <= ' ') goto yy281; + if (yych <= ' ') goto yy282; if (yych <= '0') goto yy235; if (yych >= ':') goto yy235; yyt1 = YYCURSOR; } -yy283: +yy284: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; @@ -1558,73 +1613,73 @@ yy283: if (yych <= '\t') { if (yych <= 0x08) goto yy235; } else { - if (yych <= '\n') goto yy287; + if (yych <= '\n') goto yy288; if (yych <= '\f') goto yy235; - goto yy289; + goto yy290; } } else { if (yych <= ' ') { if (yych <= 0x1F) goto yy235; } else { if (yych <= '/') goto yy235; - if (yych <= '9') goto yy283; + if (yych <= '9') goto yy284; goto yy235; } } -yy285: +yy286: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy285; + if (yych == '\t') goto yy286; goto yy235; } else { - if (yych <= ' ') goto yy285; - if (yych == '"') goto yy290; + if (yych <= ' ') goto yy286; + if (yych == '"') goto yy291; goto yy235; } -yy287: +yy288: ++YYCURSOR; YYCURSOR = yyt1; -#line 337 "../src/ast/lex.re" +#line 340 "../src/ast/lex.re" { set_sourceline (); return TOKEN_LINE_INFO; } -#line 1595 "src/ast/lex.cc" -yy289: +#line 1650 "src/ast/lex.cc" +yy290: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy287; + if (yych == '\n') goto yy288; goto yy235; -yy290: +yy291: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 128) { - goto yy290; + goto yy291; } if (yych <= '\n') goto yy235; - if (yych >= '#') goto yy293; + if (yych >= '#') goto yy294; yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy287; - if (yych == '\r') goto yy289; + if (yych == '\n') goto yy288; + if (yych == '\r') goto yy290; goto yy235; -yy293: +yy294: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x00) goto yy235; if (yych == '\n') goto yy235; - goto yy290; + goto yy291; } -#line 358 "../src/ast/lex.re" +#line 361 "../src/ast/lex.re" } bool Scanner::lex_namedef_context_re2c() { -#line 1628 "src/ast/lex.cc" +#line 1683 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -1666,50 +1721,50 @@ bool Scanner::lex_namedef_context_re2c() if (yych <= 0x1F) { if (yych == '\t') { yyt1 = YYCURSOR; - goto yy297; + goto yy298; } } else { if (yych <= ' ') { yyt1 = YYCURSOR; - goto yy297; + goto yy298; } if (yych == '=') { yyt1 = YYCURSOR; - goto yy300; + goto yy301; } } -yy296: -#line 365 "../src/ast/lex.re" - { return false; } -#line 1685 "src/ast/lex.cc" yy297: +#line 368 "../src/ast/lex.re" + { return false; } +#line 1740 "src/ast/lex.cc" +yy298: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 128) { - goto yy297; + goto yy298; } - if (yych == '=') goto yy300; -yy299: - YYCURSOR = YYMARKER; - goto yy296; + if (yych == '=') goto yy301; yy300: + YYCURSOR = YYMARKER; + goto yy297; +yy301: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '>') goto yy299; + if (yych == '>') goto yy300; ++YYCURSOR; YYCURSOR = yyt1; -#line 364 "../src/ast/lex.re" +#line 367 "../src/ast/lex.re" { return true; } -#line 1704 "src/ast/lex.cc" +#line 1759 "src/ast/lex.cc" } -#line 366 "../src/ast/lex.re" +#line 369 "../src/ast/lex.re" } bool Scanner::lex_namedef_context_flex() { -#line 1713 "src/ast/lex.cc" +#line 1768 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -1750,40 +1805,40 @@ bool Scanner::lex_namedef_context_flex() yych = (YYCTYPE)*YYCURSOR; if (yych == '\t') { yyt1 = YYCURSOR; - goto yy306; + goto yy307; } if (yych == ' ') { yyt1 = YYCURSOR; - goto yy306; + goto yy307; } -#line 374 "../src/ast/lex.re" +#line 377 "../src/ast/lex.re" { return false; } -#line 1762 "src/ast/lex.cc" -yy306: +#line 1817 "src/ast/lex.cc" +yy307: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 128) { - goto yy306; + goto yy307; } if (yych <= '<') { - if (yych == ':') goto yy309; + if (yych == ':') goto yy310; } else { - if (yych <= '=') goto yy309; - if (yych == '{') goto yy309; + if (yych <= '=') goto yy310; + if (yych == '{') goto yy310; } YYCURSOR = yyt1; -#line 373 "../src/ast/lex.re" +#line 376 "../src/ast/lex.re" { return true; } -#line 1779 "src/ast/lex.cc" -yy309: +#line 1834 "src/ast/lex.cc" +yy310: ++YYCURSOR; YYCURSOR = yyt1; -#line 372 "../src/ast/lex.re" +#line 375 "../src/ast/lex.re" { return false; } -#line 1785 "src/ast/lex.cc" +#line 1840 "src/ast/lex.cc" } -#line 375 "../src/ast/lex.re" +#line 378 "../src/ast/lex.re" } @@ -1792,7 +1847,7 @@ int Scanner::lex_clist() int kind = TOKEN_CLIST; CondList *cl = new CondList; -#line 1796 "src/ast/lex.cc" +#line 1851 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -1829,43 +1884,43 @@ int Scanner::lex_clist() 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - goto yy311; -yy312: + goto yy312; +yy313: ++YYCURSOR; -yy311: +yy312: if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 128) { - goto yy312; + goto yy313; } - if (yych <= 0x1F) goto yy314; - if (yych <= '!') goto yy315; - if (yych == '>') goto yy318; -yy314: -#line 385 "../src/ast/lex.re" - { goto cond; } -#line 1848 "src/ast/lex.cc" + if (yych <= 0x1F) goto yy315; + if (yych <= '!') goto yy316; + if (yych == '>') goto yy319; yy315: +#line 388 "../src/ast/lex.re" + { goto cond; } +#line 1903 "src/ast/lex.cc" +yy316: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\t') goto yy315; - if (yych == ' ') goto yy315; -#line 383 "../src/ast/lex.re" + if (yych == '\t') goto yy316; + if (yych == ' ') goto yy316; +#line 386 "../src/ast/lex.re" { kind = TOKEN_CSETUP; goto cond; } -#line 1857 "src/ast/lex.cc" -yy318: +#line 1912 "src/ast/lex.cc" +yy319: ++YYCURSOR; -#line 384 "../src/ast/lex.re" +#line 387 "../src/ast/lex.re" { kind = TOKEN_CZERO; goto end; } -#line 1862 "src/ast/lex.cc" +#line 1917 "src/ast/lex.cc" } -#line 386 "../src/ast/lex.re" +#line 389 "../src/ast/lex.re" cond: tok = cur; -#line 1869 "src/ast/lex.cc" +#line 1924 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -1905,42 +1960,42 @@ cond: if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 'Z') { - if (yych == '*') goto yy324; - if (yych >= 'A') goto yy326; + if (yych == '*') goto yy325; + if (yych >= 'A') goto yy327; } else { if (yych <= '_') { - if (yych >= '_') goto yy326; + if (yych >= '_') goto yy327; } else { - if (yych <= '`') goto yy322; - if (yych <= 'z') goto yy326; + if (yych <= '`') goto yy323; + if (yych <= 'z') goto yy327; } } -yy322: +yy323: ++YYCURSOR; -#line 392 "../src/ast/lex.re" +#line 395 "../src/ast/lex.re" { goto error; } -#line 1923 "src/ast/lex.cc" -yy324: +#line 1978 "src/ast/lex.cc" +yy325: ++YYCURSOR; -#line 391 "../src/ast/lex.re" +#line 394 "../src/ast/lex.re" { if (!cl->empty()) goto error; cl->insert("*"); goto next; } -#line 1928 "src/ast/lex.cc" -yy326: +#line 1983 "src/ast/lex.cc" +yy327: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 128) { - goto yy326; + goto yy327; } -#line 390 "../src/ast/lex.re" +#line 393 "../src/ast/lex.re" { cl->insert(std::string(tok, tok_len())); goto next; } -#line 1938 "src/ast/lex.cc" +#line 1993 "src/ast/lex.cc" } -#line 393 "../src/ast/lex.re" +#line 396 "../src/ast/lex.re" next: -#line 1944 "src/ast/lex.cc" +#line 1999 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -1980,67 +2035,67 @@ next: if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yych <= ' ') { - if (yych == '\t') goto yy333; - if (yych >= ' ') goto yy333; + if (yych == '\t') goto yy334; + if (yych >= ' ') goto yy334; } else { if (yych <= ',') { - if (yych >= ',') goto yy334; + if (yych >= ',') goto yy335; } else { - if (yych == '>') goto yy337; + if (yych == '>') goto yy338; } } ++YYCURSOR; -yy332: -#line 398 "../src/ast/lex.re" - { goto error; } -#line 1997 "src/ast/lex.cc" yy333: +#line 401 "../src/ast/lex.re" + { goto error; } +#line 2052 "src/ast/lex.cc" +yy334: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= ' ') { - if (yych == '\t') goto yy339; - if (yych <= 0x1F) goto yy332; - goto yy339; + if (yych == '\t') goto yy340; + if (yych <= 0x1F) goto yy333; + goto yy340; } else { if (yych <= ',') { - if (yych <= '+') goto yy332; + if (yych <= '+') goto yy333; } else { - if (yych == '>') goto yy337; - goto yy332; + if (yych == '>') goto yy338; + goto yy333; } } -yy334: +yy335: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 128) { - goto yy334; + goto yy335; } -#line 396 "../src/ast/lex.re" +#line 399 "../src/ast/lex.re" { goto cond; } -#line 2021 "src/ast/lex.cc" -yy337: +#line 2076 "src/ast/lex.cc" +yy338: ++YYCURSOR; -#line 397 "../src/ast/lex.re" +#line 400 "../src/ast/lex.re" { goto end; } -#line 2026 "src/ast/lex.cc" -yy339: +#line 2081 "src/ast/lex.cc" +yy340: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= ' ') { - if (yych == '\t') goto yy339; - if (yych >= ' ') goto yy339; + if (yych == '\t') goto yy340; + if (yych >= ' ') goto yy340; } else { if (yych <= ',') { - if (yych >= ',') goto yy334; + if (yych >= ',') goto yy335; } else { - if (yych == '>') goto yy337; + if (yych == '>') goto yy338; } } YYCURSOR = YYMARKER; - goto yy332; + goto yy333; } -#line 399 "../src/ast/lex.re" +#line 402 "../src/ast/lex.re" end: yylval.clist = cl; @@ -2050,228 +2105,104 @@ error: fatal_l(get_cline(), "syntax error in condition list"); } -void Scanner::lex_cgoto() -{ - -#line 2057 "src/ast/lex.cc" -{ - YYCTYPE yych; - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 128, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - }; - goto yy342; -yy343: - ++YYCURSOR; -yy342: - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = (YYCTYPE)*YYCURSOR; - if (yybm[0+yych] & 128) { - goto yy343; - } -#line 411 "../src/ast/lex.re" - { goto name; } -#line 2105 "src/ast/lex.cc" -} -#line 412 "../src/ast/lex.re" - -name: - tok = cur; - -#line 2112 "src/ast/lex.cc" -{ - YYCTYPE yych; - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 0, 0, 0, 0, 0, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 128, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - }; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = (YYCTYPE)*YYCURSOR; - if (yych <= '^') { - if (yych <= '@') goto yy348; - if (yych <= 'Z') goto yy350; - } else { - if (yych == '`') goto yy348; - if (yych <= 'z') goto yy350; - } -yy348: - ++YYCURSOR; -#line 417 "../src/ast/lex.re" - { fatal_l(get_cline(), "syntax error in condition goto"); } -#line 2162 "src/ast/lex.cc" -yy350: - ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = (YYCTYPE)*YYCURSOR; - if (yybm[0+yych] & 128) { - goto yy350; - } -#line 416 "../src/ast/lex.re" - { yylval.str = new std::string (tok, tok_len ()); return; } -#line 2172 "src/ast/lex.cc" -} -#line 418 "../src/ast/lex.re" - -} - void Scanner::lex_code_indented() { const uint32_t line = cline; tok = cur; code: -#line 2184 "src/ast/lex.cc" +#line 2115 "src/ast/lex.cc" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = (YYCTYPE)*YYCURSOR; if (yych <= '&') { if (yych <= '\f') { - if (yych <= 0x00) goto yy355; - if (yych == '\n') goto yy359; - goto yy357; + if (yych <= 0x00) goto yy345; + if (yych == '\n') goto yy349; + goto yy347; } else { - if (yych <= '\r') goto yy361; - if (yych == '"') goto yy362; - goto yy357; + if (yych <= '\r') goto yy351; + if (yych == '"') goto yy352; + goto yy347; } } else { if (yych <= 'z') { - if (yych <= '\'') goto yy362; - if (yych == '/') goto yy364; - goto yy357; + if (yych <= '\'') goto yy352; + if (yych == '/') goto yy354; + goto yy347; } else { - if (yych == '|') goto yy357; - if (yych <= '}') goto yy365; - goto yy357; + if (yych == '|') goto yy347; + if (yych <= '}') goto yy355; + goto yy347; } } -yy355: +yy345: ++YYCURSOR; -#line 435 "../src/ast/lex.re" +#line 425 "../src/ast/lex.re" { fail_if_eof(); goto code; } -#line 2214 "src/ast/lex.cc" -yy357: +#line 2145 "src/ast/lex.cc" +yy347: ++YYCURSOR; -yy358: -#line 440 "../src/ast/lex.re" +yy348: +#line 430 "../src/ast/lex.re" { goto code; } -#line 2220 "src/ast/lex.cc" -yy359: +#line 2151 "src/ast/lex.cc" +yy349: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '\f') { - if (yych <= 0x08) goto yy360; - if (yych <= '\n') goto yy367; + if (yych <= 0x08) goto yy350; + if (yych <= '\n') goto yy357; } else { - if (yych <= '\r') goto yy367; - if (yych == ' ') goto yy367; + if (yych <= '\r') goto yy357; + if (yych == ' ') goto yy357; } -yy360: -#line 428 "../src/ast/lex.re" +yy350: +#line 418 "../src/ast/lex.re" { while (isspace(tok[0])) ++tok; while (cur > tok && isspace(cur[-1])) --cur; yylval.code = new Code(get_fname (), line, tok, tok_len ()); return; } -#line 2238 "src/ast/lex.cc" -yy361: +#line 2169 "src/ast/lex.cc" +yy351: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy359; - goto yy358; -yy362: + if (yych == '\n') goto yy349; + goto yy348; +yy352: ++YYCURSOR; -#line 439 "../src/ast/lex.re" +#line 429 "../src/ast/lex.re" { lex_string(cur[-1]); goto code; } -#line 2247 "src/ast/lex.cc" -yy364: +#line 2178 "src/ast/lex.cc" +yy354: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '*') goto yy369; - if (yych == '/') goto yy371; - goto yy358; -yy365: + if (yych == '*') goto yy359; + if (yych == '/') goto yy361; + goto yy348; +yy355: ++YYCURSOR; -#line 436 "../src/ast/lex.re" +#line 426 "../src/ast/lex.re" { fatal_l(get_cline(), "Curly braces are not allowed after ':='"); } -#line 2257 "src/ast/lex.cc" -yy367: +#line 2188 "src/ast/lex.cc" +yy357: ++YYCURSOR; YYCURSOR -= 1; -#line 427 "../src/ast/lex.re" +#line 417 "../src/ast/lex.re" { goto code; } -#line 2263 "src/ast/lex.cc" -yy369: +#line 2194 "src/ast/lex.cc" +yy359: ++YYCURSOR; -#line 437 "../src/ast/lex.re" +#line 427 "../src/ast/lex.re" { lex_c_comment(); goto code; } -#line 2268 "src/ast/lex.cc" -yy371: +#line 2199 "src/ast/lex.cc" +yy361: ++YYCURSOR; -#line 438 "../src/ast/lex.re" +#line 428 "../src/ast/lex.re" { lex_cpp_comment(); goto code; } -#line 2273 "src/ast/lex.cc" +#line 2204 "src/ast/lex.cc" } -#line 441 "../src/ast/lex.re" +#line 431 "../src/ast/lex.re" } @@ -2281,7 +2212,7 @@ void Scanner::lex_code_in_braces() uint32_t depth = 1; code: -#line 2285 "src/ast/lex.cc" +#line 2216 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -2322,68 +2253,68 @@ code: yych = (YYCTYPE)*YYCURSOR; if (yych <= '&') { if (yych <= '\f') { - if (yych <= 0x00) goto yy375; - if (yych == '\n') goto yy379; - goto yy377; + if (yych <= 0x00) goto yy365; + if (yych == '\n') goto yy369; + goto yy367; } else { - if (yych <= '\r') goto yy381; - if (yych == '"') goto yy382; - goto yy377; + if (yych <= '\r') goto yy371; + if (yych == '"') goto yy372; + goto yy367; } } else { if (yych <= 'z') { - if (yych <= '\'') goto yy382; - if (yych == '/') goto yy384; - goto yy377; + if (yych <= '\'') goto yy372; + if (yych == '/') goto yy374; + goto yy367; } else { - if (yych <= '{') goto yy385; - if (yych == '}') goto yy387; - goto yy377; + if (yych <= '{') goto yy375; + if (yych == '}') goto yy377; + goto yy367; } } -yy375: +yy365: ++YYCURSOR; -#line 461 "../src/ast/lex.re" +#line 451 "../src/ast/lex.re" { fail_if_eof(); goto code; } -#line 2349 "src/ast/lex.cc" -yy377: +#line 2280 "src/ast/lex.cc" +yy367: ++YYCURSOR; -yy378: -#line 465 "../src/ast/lex.re" +yy368: +#line 455 "../src/ast/lex.re" { goto code; } -#line 2355 "src/ast/lex.cc" -yy379: +#line 2286 "src/ast/lex.cc" +yy369: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 32) { - goto yy389; + goto yy379; } - if (yych == '#') goto yy392; -yy380: -#line 460 "../src/ast/lex.re" + if (yych == '#') goto yy382; +yy370: +#line 450 "../src/ast/lex.re" { pos = cur; cline++; goto code; } -#line 2365 "src/ast/lex.cc" -yy381: +#line 2296 "src/ast/lex.cc" +yy371: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy379; - goto yy378; -yy382: + if (yych == '\n') goto yy369; + goto yy368; +yy372: ++YYCURSOR; -#line 464 "../src/ast/lex.re" +#line 454 "../src/ast/lex.re" { lex_string(cur[-1]); goto code; } -#line 2374 "src/ast/lex.cc" -yy384: +#line 2305 "src/ast/lex.cc" +yy374: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '*') goto yy394; - if (yych == '/') goto yy396; - goto yy378; -yy385: + if (yych == '*') goto yy384; + if (yych == '/') goto yy386; + goto yy368; +yy375: ++YYCURSOR; -#line 458 "../src/ast/lex.re" +#line 448 "../src/ast/lex.re" { ++depth; goto code; } -#line 2384 "src/ast/lex.cc" -yy387: +#line 2315 "src/ast/lex.cc" +yy377: ++YYCURSOR; -#line 450 "../src/ast/lex.re" +#line 440 "../src/ast/lex.re" { if (--depth == 0) { yylval.code = new Code(get_fname (), line, tok, tok_len ()); @@ -2391,125 +2322,125 @@ yy387: } goto code; } -#line 2395 "src/ast/lex.cc" -yy389: +#line 2326 "src/ast/lex.cc" +yy379: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 32) { - goto yy389; + goto yy379; } - if (yych == '#') goto yy392; -yy391: + if (yych == '#') goto yy382; +yy381: YYCURSOR = YYMARKER; - goto yy380; -yy392: + goto yy370; +yy382: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy392; - goto yy391; + if (yych == '\t') goto yy382; + goto yy381; } else { - if (yych <= ' ') goto yy392; - if (yych == 'l') goto yy398; - goto yy391; + if (yych <= ' ') goto yy382; + if (yych == 'l') goto yy388; + goto yy381; } -yy394: +yy384: ++YYCURSOR; -#line 462 "../src/ast/lex.re" +#line 452 "../src/ast/lex.re" { lex_c_comment(); goto code; } -#line 2423 "src/ast/lex.cc" -yy396: +#line 2354 "src/ast/lex.cc" +yy386: ++YYCURSOR; -#line 463 "../src/ast/lex.re" +#line 453 "../src/ast/lex.re" { lex_cpp_comment(); goto code; } -#line 2428 "src/ast/lex.cc" -yy398: +#line 2359 "src/ast/lex.cc" +yy388: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy391; + if (yych != 'i') goto yy381; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy391; + if (yych != 'n') goto yy381; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy391; + if (yych != 'e') goto yy381; yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '0') goto yy403; - if (yych <= '9') goto yy391; - goto yy403; -yy402: + if (yych <= '0') goto yy393; + if (yych <= '9') goto yy381; + goto yy393; +yy392: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy403: +yy393: if (yych <= 0x1F) { - if (yych == '\t') goto yy402; - goto yy391; + if (yych == '\t') goto yy392; + goto yy381; } else { - if (yych <= ' ') goto yy402; - if (yych <= '0') goto yy391; - if (yych >= ':') goto yy391; + if (yych <= ' ') goto yy392; + if (yych <= '0') goto yy381; + if (yych >= ':') goto yy381; yyt1 = YYCURSOR; } -yy404: +yy394: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 64) { - goto yy404; + goto yy394; } if (yych <= '\f') { - if (yych <= 0x08) goto yy391; - if (yych <= '\t') goto yy406; - if (yych <= '\n') goto yy408; - goto yy391; + if (yych <= 0x08) goto yy381; + if (yych <= '\t') goto yy396; + if (yych <= '\n') goto yy398; + goto yy381; } else { - if (yych <= '\r') goto yy410; - if (yych != ' ') goto yy391; + if (yych <= '\r') goto yy400; + if (yych != ' ') goto yy381; } -yy406: +yy396: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy406; - goto yy391; + if (yych == '\t') goto yy396; + goto yy381; } else { - if (yych <= ' ') goto yy406; - if (yych == '"') goto yy411; - goto yy391; + if (yych <= ' ') goto yy396; + if (yych == '"') goto yy401; + goto yy381; } -yy408: +yy398: ++YYCURSOR; YYCURSOR = yyt1; -#line 459 "../src/ast/lex.re" +#line 449 "../src/ast/lex.re" { set_sourceline (); goto code; } -#line 2487 "src/ast/lex.cc" -yy410: +#line 2418 "src/ast/lex.cc" +yy400: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy408; - goto yy391; -yy411: + if (yych == '\n') goto yy398; + goto yy381; +yy401: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 128) { - goto yy411; + goto yy401; } - if (yych <= '\n') goto yy391; - if (yych >= '#') goto yy414; + if (yych <= '\n') goto yy381; + if (yych >= '#') goto yy404; yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy408; - if (yych == '\r') goto yy410; - goto yy391; -yy414: + if (yych == '\n') goto yy398; + if (yych == '\r') goto yy400; + goto yy381; +yy404: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych <= 0x00) goto yy391; - if (yych == '\n') goto yy391; - goto yy411; + if (yych <= 0x00) goto yy381; + if (yych == '\n') goto yy381; + goto yy401; } -#line 466 "../src/ast/lex.re" +#line 456 "../src/ast/lex.re" } @@ -2517,70 +2448,70 @@ void Scanner::lex_string(char delim) { loop: -#line 2521 "src/ast/lex.cc" +#line 2452 "src/ast/lex.cc" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yych <= '!') { if (yych <= '\n') { - if (yych <= 0x00) goto yy417; - if (yych <= '\t') goto yy419; - goto yy421; + if (yych <= 0x00) goto yy407; + if (yych <= '\t') goto yy409; + goto yy411; } else { - if (yych == '\r') goto yy423; - goto yy419; + if (yych == '\r') goto yy413; + goto yy409; } } else { if (yych <= '\'') { - if (yych <= '"') goto yy424; - if (yych <= '&') goto yy419; - goto yy424; + if (yych <= '"') goto yy414; + if (yych <= '&') goto yy409; + goto yy414; } else { - if (yych == '\\') goto yy426; - goto yy419; + if (yych == '\\') goto yy416; + goto yy409; } } -yy417: +yy407: ++YYCURSOR; -#line 476 "../src/ast/lex.re" +#line 466 "../src/ast/lex.re" { fail_if_eof(); goto loop; } -#line 2549 "src/ast/lex.cc" -yy419: +#line 2480 "src/ast/lex.cc" +yy409: ++YYCURSOR; -yy420: -#line 477 "../src/ast/lex.re" +yy410: +#line 467 "../src/ast/lex.re" { goto loop; } -#line 2555 "src/ast/lex.cc" -yy421: +#line 2486 "src/ast/lex.cc" +yy411: ++YYCURSOR; -#line 475 "../src/ast/lex.re" +#line 465 "../src/ast/lex.re" { pos = cur; ++cline; goto loop; } -#line 2560 "src/ast/lex.cc" -yy423: +#line 2491 "src/ast/lex.cc" +yy413: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy421; - goto yy420; -yy424: + if (yych == '\n') goto yy411; + goto yy410; +yy414: ++YYCURSOR; -#line 473 "../src/ast/lex.re" +#line 463 "../src/ast/lex.re" { if (cur[-1] == delim) return; else goto loop; } -#line 2569 "src/ast/lex.cc" -yy426: +#line 2500 "src/ast/lex.cc" +yy416: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '&') { - if (yych != '"') goto yy420; + if (yych != '"') goto yy410; } else { - if (yych <= '\'') goto yy427; - if (yych != '\\') goto yy420; + if (yych <= '\'') goto yy417; + if (yych != '\\') goto yy410; } -yy427: +yy417: ++YYCURSOR; -#line 474 "../src/ast/lex.re" +#line 464 "../src/ast/lex.re" { goto loop; } -#line 2582 "src/ast/lex.cc" +#line 2513 "src/ast/lex.cc" } -#line 478 "../src/ast/lex.re" +#line 468 "../src/ast/lex.re" } @@ -2588,49 +2519,49 @@ void Scanner::lex_c_comment() { loop: -#line 2592 "src/ast/lex.cc" +#line 2523 "src/ast/lex.cc" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yych <= '\f') { - if (yych <= 0x00) goto yy431; - if (yych == '\n') goto yy435; - goto yy433; + if (yych <= 0x00) goto yy421; + if (yych == '\n') goto yy425; + goto yy423; } else { - if (yych <= '\r') goto yy437; - if (yych == '*') goto yy438; - goto yy433; + if (yych <= '\r') goto yy427; + if (yych == '*') goto yy428; + goto yy423; } -yy431: +yy421: ++YYCURSOR; -#line 487 "../src/ast/lex.re" +#line 477 "../src/ast/lex.re" { fail_if_eof(); goto loop; } -#line 2610 "src/ast/lex.cc" -yy433: +#line 2541 "src/ast/lex.cc" +yy423: ++YYCURSOR; -yy434: -#line 488 "../src/ast/lex.re" +yy424: +#line 478 "../src/ast/lex.re" { goto loop; } -#line 2616 "src/ast/lex.cc" -yy435: +#line 2547 "src/ast/lex.cc" +yy425: ++YYCURSOR; -#line 486 "../src/ast/lex.re" +#line 476 "../src/ast/lex.re" { pos = cur; ++cline; goto loop; } -#line 2621 "src/ast/lex.cc" -yy437: +#line 2552 "src/ast/lex.cc" +yy427: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy435; - goto yy434; -yy438: + if (yych == '\n') goto yy425; + goto yy424; +yy428: yych = (YYCTYPE)*++YYCURSOR; - if (yych != '/') goto yy434; + if (yych != '/') goto yy424; ++YYCURSOR; -#line 485 "../src/ast/lex.re" +#line 475 "../src/ast/lex.re" { return; } -#line 2632 "src/ast/lex.cc" +#line 2563 "src/ast/lex.cc" } -#line 489 "../src/ast/lex.re" +#line 479 "../src/ast/lex.re" } @@ -2638,41 +2569,41 @@ void Scanner::lex_cpp_comment() { loop: -#line 2642 "src/ast/lex.cc" +#line 2573 "src/ast/lex.cc" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yych <= '\n') { - if (yych <= 0x00) goto yy443; - if (yych <= '\t') goto yy445; - goto yy447; + if (yych <= 0x00) goto yy433; + if (yych <= '\t') goto yy435; + goto yy437; } else { - if (yych == '\r') goto yy449; - goto yy445; + if (yych == '\r') goto yy439; + goto yy435; } -yy443: +yy433: ++YYCURSOR; -#line 497 "../src/ast/lex.re" +#line 487 "../src/ast/lex.re" { fail_if_eof(); goto loop; } -#line 2659 "src/ast/lex.cc" -yy445: +#line 2590 "src/ast/lex.cc" +yy435: ++YYCURSOR; -yy446: -#line 498 "../src/ast/lex.re" +yy436: +#line 488 "../src/ast/lex.re" { goto loop; } -#line 2665 "src/ast/lex.cc" -yy447: +#line 2596 "src/ast/lex.cc" +yy437: ++YYCURSOR; -#line 496 "../src/ast/lex.re" +#line 486 "../src/ast/lex.re" { pos = cur; ++cline; return; } -#line 2670 "src/ast/lex.cc" -yy449: +#line 2601 "src/ast/lex.cc" +yy439: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy447; - goto yy446; + if (yych == '\n') goto yy437; + goto yy436; } -#line 499 "../src/ast/lex.re" +#line 489 "../src/ast/lex.re" } @@ -2684,44 +2615,44 @@ fst: tok = cur; c = get_column(); -#line 2688 "src/ast/lex.cc" +#line 2619 "src/ast/lex.cc" { YYCTYPE yych; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == ']') goto yy453; -#line 511 "../src/ast/lex.re" + if (yych == ']') goto yy443; +#line 501 "../src/ast/lex.re" { l = lex_cls_chr(); goto snd; } -#line 2696 "src/ast/lex.cc" -yy453: +#line 2627 "src/ast/lex.cc" +yy443: ++YYCURSOR; -#line 510 "../src/ast/lex.re" +#line 500 "../src/ast/lex.re" { return ast_cls(cline, c0, cls, neg); } -#line 2701 "src/ast/lex.cc" +#line 2632 "src/ast/lex.cc" } -#line 512 "../src/ast/lex.re" +#line 502 "../src/ast/lex.re" snd: -#line 2707 "src/ast/lex.cc" +#line 2638 "src/ast/lex.cc" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*(YYMARKER = YYCURSOR); - if (yych == '-') goto yy458; -yy457: -#line 515 "../src/ast/lex.re" + if (yych == '-') goto yy448; +yy447: +#line 505 "../src/ast/lex.re" { u = l; goto add; } -#line 2716 "src/ast/lex.cc" -yy458: +#line 2647 "src/ast/lex.cc" +yy448: yych = (YYCTYPE)*++YYCURSOR; - if (yych != ']') goto yy460; + if (yych != ']') goto yy450; YYCURSOR = YYMARKER; - goto yy457; -yy460: + goto yy447; +yy450: ++YYCURSOR; YYCURSOR -= 1; -#line 516 "../src/ast/lex.re" +#line 506 "../src/ast/lex.re" { u = lex_cls_chr(); if (l > u) { @@ -2730,9 +2661,9 @@ yy460: } goto add; } -#line 2734 "src/ast/lex.cc" +#line 2665 "src/ast/lex.cc" } -#line 524 "../src/ast/lex.re" +#line 514 "../src/ast/lex.re" add: cls->push_back(ASTRange(l, u, c)); @@ -2744,319 +2675,319 @@ uint32_t Scanner::lex_cls_chr() tok = cur; const uint32_t l = get_cline(), c = get_column(); -#line 2748 "src/ast/lex.cc" +#line 2679 "src/ast/lex.cc" { YYCTYPE yych; unsigned int yyaccept = 0; if ((YYLIMIT - YYCURSOR) < 10) YYFILL(10); yych = (YYCTYPE)*YYCURSOR; if (yych <= '\f') { - if (yych <= 0x00) goto yy464; - if (yych == '\n') goto yy468; - goto yy466; + if (yych <= 0x00) goto yy454; + if (yych == '\n') goto yy458; + goto yy456; } else { - if (yych <= '\r') goto yy470; - if (yych == '\\') goto yy471; - goto yy466; + if (yych <= '\r') goto yy460; + if (yych == '\\') goto yy461; + goto yy456; } -yy464: +yy454: ++YYCURSOR; -#line 536 "../src/ast/lex.re" +#line 526 "../src/ast/lex.re" { fail_if_eof(); return 0; } -#line 2767 "src/ast/lex.cc" -yy466: +#line 2698 "src/ast/lex.cc" +yy456: ++YYCURSOR; -yy467: -#line 542 "../src/ast/lex.re" +yy457: +#line 532 "../src/ast/lex.re" { return static_cast(tok[0]); } -#line 2773 "src/ast/lex.cc" -yy468: +#line 2704 "src/ast/lex.cc" +yy458: ++YYCURSOR; -#line 537 "../src/ast/lex.re" +#line 527 "../src/ast/lex.re" { fatal_lc(l, c, "newline in character class"); } -#line 2778 "src/ast/lex.cc" -yy470: +#line 2709 "src/ast/lex.cc" +yy460: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy468; - goto yy467; -yy471: + if (yych == '\n') goto yy458; + goto yy457; +yy461: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '\\') { if (yych <= '/') { if (yych <= '\f') { - if (yych <= 0x00) goto yy472; - if (yych == '\n') goto yy468; - goto yy473; + if (yych <= 0x00) goto yy462; + if (yych == '\n') goto yy458; + goto yy463; } else { - if (yych <= '\r') goto yy475; - if (yych == '-') goto yy476; - goto yy473; + if (yych <= '\r') goto yy465; + if (yych == '-') goto yy466; + goto yy463; } } else { if (yych <= 'U') { - if (yych <= '3') goto yy478; - if (yych <= '7') goto yy480; - if (yych <= 'T') goto yy473; - goto yy481; + if (yych <= '3') goto yy468; + if (yych <= '7') goto yy470; + if (yych <= 'T') goto yy463; + goto yy471; } else { - if (yych == 'X') goto yy483; - if (yych <= '[') goto yy473; - goto yy484; + if (yych == 'X') goto yy473; + if (yych <= '[') goto yy463; + goto yy474; } } } else { if (yych <= 'n') { if (yych <= 'b') { - if (yych <= ']') goto yy486; - if (yych <= '`') goto yy473; - if (yych <= 'a') goto yy488; - goto yy490; + if (yych <= ']') goto yy476; + if (yych <= '`') goto yy463; + if (yych <= 'a') goto yy478; + goto yy480; } else { - if (yych == 'f') goto yy492; - if (yych <= 'm') goto yy473; - goto yy494; + if (yych == 'f') goto yy482; + if (yych <= 'm') goto yy463; + goto yy484; } } else { if (yych <= 't') { - if (yych == 'r') goto yy496; - if (yych <= 's') goto yy473; - goto yy498; + if (yych == 'r') goto yy486; + if (yych <= 's') goto yy463; + goto yy488; } else { if (yych <= 'v') { - if (yych <= 'u') goto yy483; - goto yy500; + if (yych <= 'u') goto yy473; + goto yy490; } else { - if (yych == 'x') goto yy502; - goto yy473; + if (yych == 'x') goto yy492; + goto yy463; } } } } -yy472: -#line 540 "../src/ast/lex.re" +yy462: +#line 530 "../src/ast/lex.re" { fatal_lc(l, c, "syntax error in escape sequence"); } -#line 2839 "src/ast/lex.cc" -yy473: +#line 2770 "src/ast/lex.cc" +yy463: ++YYCURSOR; -yy474: -#line 555 "../src/ast/lex.re" +yy464: +#line 545 "../src/ast/lex.re" { warn.useless_escape(cline, get_column(), tok[1]); return static_cast(tok[1]); } -#line 2848 "src/ast/lex.cc" -yy475: +#line 2779 "src/ast/lex.cc" +yy465: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy468; - goto yy474; -yy476: + if (yych == '\n') goto yy458; + goto yy464; +yy466: ++YYCURSOR; -#line 553 "../src/ast/lex.re" +#line 543 "../src/ast/lex.re" { return static_cast('-'); } -#line 2857 "src/ast/lex.cc" -yy478: +#line 2788 "src/ast/lex.cc" +yy468: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy479; - if (yych <= '7') goto yy503; -yy479: -#line 539 "../src/ast/lex.re" + if (yych <= '/') goto yy469; + if (yych <= '7') goto yy493; +yy469: +#line 529 "../src/ast/lex.re" { fatal_lc(l, c, "syntax error in octal escape sequence"); } -#line 2866 "src/ast/lex.cc" -yy480: +#line 2797 "src/ast/lex.cc" +yy470: ++YYCURSOR; - goto yy479; -yy481: + goto yy469; +yy471: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= '@') { - if (yych <= '/') goto yy482; - if (yych <= '9') goto yy505; + if (yych <= '/') goto yy472; + if (yych <= '9') goto yy495; } else { - if (yych <= 'F') goto yy505; - if (yych <= '`') goto yy482; - if (yych <= 'f') goto yy505; + if (yych <= 'F') goto yy495; + if (yych <= '`') goto yy472; + if (yych <= 'f') goto yy495; } -yy482: -#line 538 "../src/ast/lex.re" +yy472: +#line 528 "../src/ast/lex.re" { fatal_lc(l, c, "syntax error in hexadecimal escape sequence"); } -#line 2884 "src/ast/lex.cc" -yy483: +#line 2815 "src/ast/lex.cc" +yy473: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= '@') { - if (yych <= '/') goto yy482; - if (yych <= '9') goto yy506; - goto yy482; + if (yych <= '/') goto yy472; + if (yych <= '9') goto yy496; + goto yy472; } else { - if (yych <= 'F') goto yy506; - if (yych <= '`') goto yy482; - if (yych <= 'f') goto yy506; - goto yy482; + if (yych <= 'F') goto yy496; + if (yych <= '`') goto yy472; + if (yych <= 'f') goto yy496; + goto yy472; } -yy484: +yy474: ++YYCURSOR; -#line 552 "../src/ast/lex.re" +#line 542 "../src/ast/lex.re" { return static_cast('\\'); } -#line 2902 "src/ast/lex.cc" -yy486: +#line 2833 "src/ast/lex.cc" +yy476: ++YYCURSOR; -#line 554 "../src/ast/lex.re" +#line 544 "../src/ast/lex.re" { return static_cast(']'); } -#line 2907 "src/ast/lex.cc" -yy488: +#line 2838 "src/ast/lex.cc" +yy478: ++YYCURSOR; -#line 545 "../src/ast/lex.re" +#line 535 "../src/ast/lex.re" { return static_cast('\a'); } -#line 2912 "src/ast/lex.cc" -yy490: +#line 2843 "src/ast/lex.cc" +yy480: ++YYCURSOR; -#line 546 "../src/ast/lex.re" +#line 536 "../src/ast/lex.re" { return static_cast('\b'); } -#line 2917 "src/ast/lex.cc" -yy492: +#line 2848 "src/ast/lex.cc" +yy482: ++YYCURSOR; -#line 547 "../src/ast/lex.re" +#line 537 "../src/ast/lex.re" { return static_cast('\f'); } -#line 2922 "src/ast/lex.cc" -yy494: +#line 2853 "src/ast/lex.cc" +yy484: ++YYCURSOR; -#line 548 "../src/ast/lex.re" +#line 538 "../src/ast/lex.re" { return static_cast('\n'); } -#line 2927 "src/ast/lex.cc" -yy496: +#line 2858 "src/ast/lex.cc" +yy486: ++YYCURSOR; -#line 549 "../src/ast/lex.re" +#line 539 "../src/ast/lex.re" { return static_cast('\r'); } -#line 2932 "src/ast/lex.cc" -yy498: +#line 2863 "src/ast/lex.cc" +yy488: ++YYCURSOR; -#line 550 "../src/ast/lex.re" +#line 540 "../src/ast/lex.re" { return static_cast('\t'); } -#line 2937 "src/ast/lex.cc" -yy500: +#line 2868 "src/ast/lex.cc" +yy490: ++YYCURSOR; -#line 551 "../src/ast/lex.re" +#line 541 "../src/ast/lex.re" { return static_cast('\v'); } -#line 2942 "src/ast/lex.cc" -yy502: +#line 2873 "src/ast/lex.cc" +yy492: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= '@') { - if (yych <= '/') goto yy482; - if (yych <= '9') goto yy507; - goto yy482; + if (yych <= '/') goto yy472; + if (yych <= '9') goto yy497; + goto yy472; } else { - if (yych <= 'F') goto yy507; - if (yych <= '`') goto yy482; - if (yych <= 'f') goto yy507; - goto yy482; + if (yych <= 'F') goto yy497; + if (yych <= '`') goto yy472; + if (yych <= 'f') goto yy497; + goto yy472; } -yy503: +yy493: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '/') goto yy504; - if (yych <= '7') goto yy508; -yy504: + if (yych <= '/') goto yy494; + if (yych <= '7') goto yy498; +yy494: YYCURSOR = YYMARKER; if (yyaccept == 0) { - goto yy479; + goto yy469; } else { - goto yy482; + goto yy472; } -yy505: +yy495: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy504; - if (yych <= '9') goto yy510; - goto yy504; + if (yych <= '/') goto yy494; + if (yych <= '9') goto yy500; + goto yy494; } else { - if (yych <= 'F') goto yy510; - if (yych <= '`') goto yy504; - if (yych <= 'f') goto yy510; - goto yy504; + if (yych <= 'F') goto yy500; + if (yych <= '`') goto yy494; + if (yych <= 'f') goto yy500; + goto yy494; } -yy506: +yy496: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy504; - if (yych <= '9') goto yy511; - goto yy504; + if (yych <= '/') goto yy494; + if (yych <= '9') goto yy501; + goto yy494; } else { - if (yych <= 'F') goto yy511; - if (yych <= '`') goto yy504; - if (yych <= 'f') goto yy511; - goto yy504; + if (yych <= 'F') goto yy501; + if (yych <= '`') goto yy494; + if (yych <= 'f') goto yy501; + goto yy494; } -yy507: +yy497: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy504; - if (yych <= '9') goto yy512; - goto yy504; + if (yych <= '/') goto yy494; + if (yych <= '9') goto yy502; + goto yy494; } else { - if (yych <= 'F') goto yy512; - if (yych <= '`') goto yy504; - if (yych <= 'f') goto yy512; - goto yy504; + if (yych <= 'F') goto yy502; + if (yych <= '`') goto yy494; + if (yych <= 'f') goto yy502; + goto yy494; } -yy508: +yy498: ++YYCURSOR; -#line 544 "../src/ast/lex.re" +#line 534 "../src/ast/lex.re" { return unesc_oct(tok, cur); } -#line 3007 "src/ast/lex.cc" -yy510: +#line 2938 "src/ast/lex.cc" +yy500: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy504; - if (yych <= '9') goto yy514; - goto yy504; + if (yych <= '/') goto yy494; + if (yych <= '9') goto yy504; + goto yy494; } else { - if (yych <= 'F') goto yy514; - if (yych <= '`') goto yy504; - if (yych <= 'f') goto yy514; - goto yy504; + if (yych <= 'F') goto yy504; + if (yych <= '`') goto yy494; + if (yych <= 'f') goto yy504; + goto yy494; } -yy511: +yy501: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy504; - if (yych <= '9') goto yy507; - goto yy504; + if (yych <= '/') goto yy494; + if (yych <= '9') goto yy497; + goto yy494; } else { - if (yych <= 'F') goto yy507; - if (yych <= '`') goto yy504; - if (yych <= 'f') goto yy507; - goto yy504; + if (yych <= 'F') goto yy497; + if (yych <= '`') goto yy494; + if (yych <= 'f') goto yy497; + goto yy494; } -yy512: +yy502: ++YYCURSOR; -#line 543 "../src/ast/lex.re" +#line 533 "../src/ast/lex.re" { return unesc_hex(tok, cur); } -#line 3036 "src/ast/lex.cc" -yy514: +#line 2967 "src/ast/lex.cc" +yy504: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy504; - if (yych >= ':') goto yy504; + if (yych <= '/') goto yy494; + if (yych >= ':') goto yy494; } else { - if (yych <= 'F') goto yy515; - if (yych <= '`') goto yy504; - if (yych >= 'g') goto yy504; + if (yych <= 'F') goto yy505; + if (yych <= '`') goto yy494; + if (yych >= 'g') goto yy494; } -yy515: +yy505: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy504; - if (yych <= '9') goto yy506; - goto yy504; + if (yych <= '/') goto yy494; + if (yych <= '9') goto yy496; + goto yy494; } else { - if (yych <= 'F') goto yy506; - if (yych <= '`') goto yy504; - if (yych <= 'f') goto yy506; - goto yy504; + if (yych <= 'F') goto yy496; + if (yych <= '`') goto yy494; + if (yych <= 'f') goto yy496; + goto yy494; } } -#line 559 "../src/ast/lex.re" +#line 549 "../src/ast/lex.re" } @@ -3066,309 +2997,309 @@ uint32_t Scanner::lex_str_chr(char quote, bool &end) tok = cur; const uint32_t l = get_cline(), c = get_column(); -#line 3070 "src/ast/lex.cc" +#line 3001 "src/ast/lex.cc" { YYCTYPE yych; unsigned int yyaccept = 0; if ((YYLIMIT - YYCURSOR) < 10) YYFILL(10); yych = (YYCTYPE)*YYCURSOR; if (yych <= '\f') { - if (yych <= 0x00) goto yy518; - if (yych == '\n') goto yy522; - goto yy520; + if (yych <= 0x00) goto yy508; + if (yych == '\n') goto yy512; + goto yy510; } else { - if (yych <= '\r') goto yy524; - if (yych == '\\') goto yy525; - goto yy520; + if (yych <= '\r') goto yy514; + if (yych == '\\') goto yy515; + goto yy510; } -yy518: +yy508: ++YYCURSOR; -#line 569 "../src/ast/lex.re" +#line 559 "../src/ast/lex.re" { fail_if_eof(); return 0; } -#line 3089 "src/ast/lex.cc" -yy520: +#line 3020 "src/ast/lex.cc" +yy510: ++YYCURSOR; -yy521: -#line 575 "../src/ast/lex.re" +yy511: +#line 565 "../src/ast/lex.re" { end = tok[0] == quote; return static_cast(tok[0]); } -#line 3098 "src/ast/lex.cc" -yy522: +#line 3029 "src/ast/lex.cc" +yy512: ++YYCURSOR; -#line 570 "../src/ast/lex.re" +#line 560 "../src/ast/lex.re" { fatal_lc(l, c, "newline in character string"); } -#line 3103 "src/ast/lex.cc" -yy524: +#line 3034 "src/ast/lex.cc" +yy514: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy522; - goto yy521; -yy525: + if (yych == '\n') goto yy512; + goto yy511; +yy515: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '`') { if (yych <= '3') { if (yych <= '\n') { - if (yych <= 0x00) goto yy526; - if (yych <= '\t') goto yy527; - goto yy522; + if (yych <= 0x00) goto yy516; + if (yych <= '\t') goto yy517; + goto yy512; } else { - if (yych == '\r') goto yy529; - if (yych <= '/') goto yy527; - goto yy530; + if (yych == '\r') goto yy519; + if (yych <= '/') goto yy517; + goto yy520; } } else { if (yych <= 'W') { - if (yych <= '7') goto yy532; - if (yych == 'U') goto yy533; - goto yy527; + if (yych <= '7') goto yy522; + if (yych == 'U') goto yy523; + goto yy517; } else { - if (yych <= 'X') goto yy535; - if (yych == '\\') goto yy536; - goto yy527; + if (yych <= 'X') goto yy525; + if (yych == '\\') goto yy526; + goto yy517; } } } else { if (yych <= 'q') { if (yych <= 'e') { - if (yych <= 'a') goto yy538; - if (yych <= 'b') goto yy540; - goto yy527; + if (yych <= 'a') goto yy528; + if (yych <= 'b') goto yy530; + goto yy517; } else { - if (yych <= 'f') goto yy542; - if (yych == 'n') goto yy544; - goto yy527; + if (yych <= 'f') goto yy532; + if (yych == 'n') goto yy534; + goto yy517; } } else { if (yych <= 'u') { - if (yych <= 'r') goto yy546; - if (yych <= 's') goto yy527; - if (yych <= 't') goto yy548; - goto yy535; + if (yych <= 'r') goto yy536; + if (yych <= 's') goto yy517; + if (yych <= 't') goto yy538; + goto yy525; } else { - if (yych <= 'v') goto yy550; - if (yych == 'x') goto yy552; - goto yy527; + if (yych <= 'v') goto yy540; + if (yych == 'x') goto yy542; + goto yy517; } } } -yy526: -#line 573 "../src/ast/lex.re" +yy516: +#line 563 "../src/ast/lex.re" { fatal_lc(l, c, "syntax error in escape sequence"); } -#line 3159 "src/ast/lex.cc" -yy527: +#line 3090 "src/ast/lex.cc" +yy517: ++YYCURSOR; -yy528: -#line 589 "../src/ast/lex.re" +yy518: +#line 579 "../src/ast/lex.re" { if (tok[1] != quote) { warn.useless_escape(cline, get_column(), tok[1]); } return static_cast(tok[1]); } -#line 3170 "src/ast/lex.cc" -yy529: +#line 3101 "src/ast/lex.cc" +yy519: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy522; - goto yy528; -yy530: + if (yych == '\n') goto yy512; + goto yy518; +yy520: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy531; - if (yych <= '7') goto yy553; -yy531: -#line 572 "../src/ast/lex.re" + if (yych <= '/') goto yy521; + if (yych <= '7') goto yy543; +yy521: +#line 562 "../src/ast/lex.re" { fatal_lc(l, c, "syntax error in octal escape sequence"); } -#line 3183 "src/ast/lex.cc" -yy532: +#line 3114 "src/ast/lex.cc" +yy522: ++YYCURSOR; - goto yy531; -yy533: + goto yy521; +yy523: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= '@') { - if (yych <= '/') goto yy534; - if (yych <= '9') goto yy555; + if (yych <= '/') goto yy524; + if (yych <= '9') goto yy545; } else { - if (yych <= 'F') goto yy555; - if (yych <= '`') goto yy534; - if (yych <= 'f') goto yy555; + if (yych <= 'F') goto yy545; + if (yych <= '`') goto yy524; + if (yych <= 'f') goto yy545; } -yy534: -#line 571 "../src/ast/lex.re" +yy524: +#line 561 "../src/ast/lex.re" { fatal_lc(l, c, "syntax error in hexadecimal escape sequence"); } -#line 3201 "src/ast/lex.cc" -yy535: +#line 3132 "src/ast/lex.cc" +yy525: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= '@') { - if (yych <= '/') goto yy534; - if (yych <= '9') goto yy556; - goto yy534; + if (yych <= '/') goto yy524; + if (yych <= '9') goto yy546; + goto yy524; } else { - if (yych <= 'F') goto yy556; - if (yych <= '`') goto yy534; - if (yych <= 'f') goto yy556; - goto yy534; + if (yych <= 'F') goto yy546; + if (yych <= '`') goto yy524; + if (yych <= 'f') goto yy546; + goto yy524; } -yy536: +yy526: ++YYCURSOR; -#line 588 "../src/ast/lex.re" +#line 578 "../src/ast/lex.re" { return static_cast('\\'); } -#line 3219 "src/ast/lex.cc" -yy538: +#line 3150 "src/ast/lex.cc" +yy528: ++YYCURSOR; -#line 581 "../src/ast/lex.re" +#line 571 "../src/ast/lex.re" { return static_cast('\a'); } -#line 3224 "src/ast/lex.cc" -yy540: +#line 3155 "src/ast/lex.cc" +yy530: ++YYCURSOR; -#line 582 "../src/ast/lex.re" +#line 572 "../src/ast/lex.re" { return static_cast('\b'); } -#line 3229 "src/ast/lex.cc" -yy542: +#line 3160 "src/ast/lex.cc" +yy532: ++YYCURSOR; -#line 583 "../src/ast/lex.re" +#line 573 "../src/ast/lex.re" { return static_cast('\f'); } -#line 3234 "src/ast/lex.cc" -yy544: +#line 3165 "src/ast/lex.cc" +yy534: ++YYCURSOR; -#line 584 "../src/ast/lex.re" +#line 574 "../src/ast/lex.re" { return static_cast('\n'); } -#line 3239 "src/ast/lex.cc" -yy546: +#line 3170 "src/ast/lex.cc" +yy536: ++YYCURSOR; -#line 585 "../src/ast/lex.re" +#line 575 "../src/ast/lex.re" { return static_cast('\r'); } -#line 3244 "src/ast/lex.cc" -yy548: +#line 3175 "src/ast/lex.cc" +yy538: ++YYCURSOR; -#line 586 "../src/ast/lex.re" +#line 576 "../src/ast/lex.re" { return static_cast('\t'); } -#line 3249 "src/ast/lex.cc" -yy550: +#line 3180 "src/ast/lex.cc" +yy540: ++YYCURSOR; -#line 587 "../src/ast/lex.re" +#line 577 "../src/ast/lex.re" { return static_cast('\v'); } -#line 3254 "src/ast/lex.cc" -yy552: +#line 3185 "src/ast/lex.cc" +yy542: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= '@') { - if (yych <= '/') goto yy534; - if (yych <= '9') goto yy557; - goto yy534; + if (yych <= '/') goto yy524; + if (yych <= '9') goto yy547; + goto yy524; } else { - if (yych <= 'F') goto yy557; - if (yych <= '`') goto yy534; - if (yych <= 'f') goto yy557; - goto yy534; + if (yych <= 'F') goto yy547; + if (yych <= '`') goto yy524; + if (yych <= 'f') goto yy547; + goto yy524; } -yy553: +yy543: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '/') goto yy554; - if (yych <= '7') goto yy558; -yy554: + if (yych <= '/') goto yy544; + if (yych <= '7') goto yy548; +yy544: YYCURSOR = YYMARKER; if (yyaccept == 0) { - goto yy531; + goto yy521; } else { - goto yy534; + goto yy524; } -yy555: +yy545: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy554; - if (yych <= '9') goto yy560; - goto yy554; + if (yych <= '/') goto yy544; + if (yych <= '9') goto yy550; + goto yy544; } else { - if (yych <= 'F') goto yy560; - if (yych <= '`') goto yy554; - if (yych <= 'f') goto yy560; - goto yy554; + if (yych <= 'F') goto yy550; + if (yych <= '`') goto yy544; + if (yych <= 'f') goto yy550; + goto yy544; } -yy556: +yy546: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy554; - if (yych <= '9') goto yy561; - goto yy554; + if (yych <= '/') goto yy544; + if (yych <= '9') goto yy551; + goto yy544; } else { - if (yych <= 'F') goto yy561; - if (yych <= '`') goto yy554; - if (yych <= 'f') goto yy561; - goto yy554; + if (yych <= 'F') goto yy551; + if (yych <= '`') goto yy544; + if (yych <= 'f') goto yy551; + goto yy544; } -yy557: +yy547: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy554; - if (yych <= '9') goto yy562; - goto yy554; + if (yych <= '/') goto yy544; + if (yych <= '9') goto yy552; + goto yy544; } else { - if (yych <= 'F') goto yy562; - if (yych <= '`') goto yy554; - if (yych <= 'f') goto yy562; - goto yy554; + if (yych <= 'F') goto yy552; + if (yych <= '`') goto yy544; + if (yych <= 'f') goto yy552; + goto yy544; } -yy558: +yy548: ++YYCURSOR; -#line 580 "../src/ast/lex.re" +#line 570 "../src/ast/lex.re" { return unesc_oct(tok, cur); } -#line 3319 "src/ast/lex.cc" -yy560: +#line 3250 "src/ast/lex.cc" +yy550: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy554; - if (yych <= '9') goto yy564; - goto yy554; + if (yych <= '/') goto yy544; + if (yych <= '9') goto yy554; + goto yy544; } else { - if (yych <= 'F') goto yy564; - if (yych <= '`') goto yy554; - if (yych <= 'f') goto yy564; - goto yy554; + if (yych <= 'F') goto yy554; + if (yych <= '`') goto yy544; + if (yych <= 'f') goto yy554; + goto yy544; } -yy561: +yy551: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy554; - if (yych <= '9') goto yy557; - goto yy554; + if (yych <= '/') goto yy544; + if (yych <= '9') goto yy547; + goto yy544; } else { - if (yych <= 'F') goto yy557; - if (yych <= '`') goto yy554; - if (yych <= 'f') goto yy557; - goto yy554; + if (yych <= 'F') goto yy547; + if (yych <= '`') goto yy544; + if (yych <= 'f') goto yy547; + goto yy544; } -yy562: +yy552: ++YYCURSOR; -#line 579 "../src/ast/lex.re" +#line 569 "../src/ast/lex.re" { return unesc_hex(tok, cur); } -#line 3348 "src/ast/lex.cc" -yy564: +#line 3279 "src/ast/lex.cc" +yy554: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy554; - if (yych >= ':') goto yy554; + if (yych <= '/') goto yy544; + if (yych >= ':') goto yy544; } else { - if (yych <= 'F') goto yy565; - if (yych <= '`') goto yy554; - if (yych >= 'g') goto yy554; + if (yych <= 'F') goto yy555; + if (yych <= '`') goto yy544; + if (yych >= 'g') goto yy544; } -yy565: +yy555: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { - if (yych <= '/') goto yy554; - if (yych <= '9') goto yy556; - goto yy554; + if (yych <= '/') goto yy544; + if (yych <= '9') goto yy546; + goto yy544; } else { - if (yych <= 'F') goto yy556; - if (yych <= '`') goto yy554; - if (yych <= 'f') goto yy556; - goto yy554; + if (yych <= 'F') goto yy546; + if (yych <= '`') goto yy544; + if (yych <= 'f') goto yy546; + goto yy544; } } -#line 595 "../src/ast/lex.re" +#line 585 "../src/ast/lex.re" } @@ -3388,7 +3319,7 @@ void Scanner::set_sourceline () sourceline: tok = cur; -#line 3392 "src/ast/lex.cc" +#line 3323 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -3429,100 +3360,100 @@ sourceline: yych = (YYCTYPE)*YYCURSOR; if (yych <= '\r') { if (yych <= '\t') { - if (yych >= 0x01) goto yy570; + if (yych >= 0x01) goto yy560; } else { - if (yych <= '\n') goto yy572; - if (yych <= '\f') goto yy570; - goto yy574; + if (yych <= '\n') goto yy562; + if (yych <= '\f') goto yy560; + goto yy564; } } else { if (yych <= '"') { - if (yych <= '!') goto yy570; - goto yy575; + if (yych <= '!') goto yy560; + goto yy565; } else { - if (yych <= '0') goto yy570; - if (yych <= '9') goto yy576; - goto yy570; + if (yych <= '0') goto yy560; + if (yych <= '9') goto yy566; + goto yy560; } } ++YYCURSOR; -#line 632 "../src/ast/lex.re" +#line 622 "../src/ast/lex.re" { --cur; tok = cur; return; } -#line 3456 "src/ast/lex.cc" -yy570: +#line 3387 "src/ast/lex.cc" +yy560: ++YYCURSOR; -yy571: -#line 638 "../src/ast/lex.re" +yy561: +#line 628 "../src/ast/lex.re" { goto sourceline; } -#line 3462 "src/ast/lex.cc" -yy572: +#line 3393 "src/ast/lex.cc" +yy562: ++YYCURSOR; -#line 627 "../src/ast/lex.re" +#line 617 "../src/ast/lex.re" { tok = cur; return; } -#line 3470 "src/ast/lex.cc" -yy574: +#line 3401 "src/ast/lex.cc" +yy564: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy572; - goto yy571; -yy575: + if (yych == '\n') goto yy562; + goto yy561; +yy565: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= 0x00) goto yy571; - if (yych == '\n') goto yy571; - goto yy580; -yy576: + if (yych <= 0x00) goto yy561; + if (yych == '\n') goto yy561; + goto yy570; +yy566: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 64) { - goto yy576; + goto yy566; } -#line 614 "../src/ast/lex.re" +#line 604 "../src/ast/lex.re" { if (!s_to_u32_unsafe (tok, cur, cline)) { fatal_lc(get_cline(), get_column(), "line number overflow"); } goto sourceline; } -#line 3494 "src/ast/lex.cc" -yy579: +#line 3425 "src/ast/lex.cc" +yy569: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy580: +yy570: if (yybm[0+yych] & 128) { - goto yy579; + goto yy569; } - if (yych <= '\n') goto yy581; - if (yych <= '"') goto yy582; - goto yy584; -yy581: + if (yych <= '\n') goto yy571; + if (yych <= '"') goto yy572; + goto yy574; +yy571: YYCURSOR = YYMARKER; - goto yy571; -yy582: + goto yy561; +yy572: ++YYCURSOR; -#line 621 "../src/ast/lex.re" +#line 611 "../src/ast/lex.re" { in.escaped_file_name = std::string (tok + 1, tok_len () - 2); // strip quotes strrreplace (in.escaped_file_name, "\\", "\\\\"); goto sourceline; } -#line 3517 "src/ast/lex.cc" -yy584: +#line 3448 "src/ast/lex.cc" +yy574: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych <= 0x00) goto yy581; - if (yych == '\n') goto yy581; - goto yy579; + if (yych <= 0x00) goto yy571; + if (yych == '\n') goto yy571; + goto yy569; } -#line 639 "../src/ast/lex.re" +#line 629 "../src/ast/lex.re" } diff --git a/re2c/src/ast/lex.re b/re2c/src/ast/lex.re index af6068cf..dbcbd3dc 100644 --- a/re2c/src/ast/lex.re +++ b/re2c/src/ast/lex.re @@ -240,8 +240,11 @@ scan: "{" { lex_code_in_braces(); return TOKEN_CODE; } ":=" { lex_code_indented(); return TOKEN_CODE; } - "=>" { lex_cgoto(); return TOKEN_CNEXT; } - ":=>" { lex_cgoto(); return TOKEN_CJUMP; } + ":"? "=>" space* @p name { + yylval.str = new std::string(p, static_cast(cur - p)); + return tok[0] == ':' ? TOKEN_CJUMP : TOKEN_CNEXT; + } + "<" { return lex_clist(); } "//" { lex_cpp_comment(); goto scan; } @@ -405,19 +408,6 @@ error: fatal_l(get_cline(), "syntax error in condition list"); } -void Scanner::lex_cgoto() -{ -/*!re2c - space* { goto name; } -*/ -name: - tok = cur; -/*!re2c - name { yylval.str = new std::string (tok, tok_len ()); return; } - * { fatal_l(get_cline(), "syntax error in condition goto"); } -*/ -} - void Scanner::lex_code_indented() { const uint32_t line = cline; diff --git a/re2c/src/ast/scanner.h b/re2c/src/ast/scanner.h index 668f4e94..06766ecf 100644 --- a/re2c/src/ast/scanner.h +++ b/re2c/src/ast/scanner.h @@ -39,7 +39,6 @@ class Scanner: private ScannerState bool lex_namedef_context_re2c(); bool lex_namedef_context_flex(); int lex_clist(); - void lex_cgoto(); void lex_string(char delim); void lex_tags(Output &out, bool mtags); void set_sourceline (); -- 2.50.1