From: Ulya Trofimovich Date: Tue, 11 Oct 2016 13:14:26 +0000 (+0100) Subject: Make tags absolute, not relative. X-Git-Tag: 1.0~39^2~254 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5cee3d715fdb84b6179164b413323bd1908f39ac;p=re2c Make tags absolute, not relative. Relative tags have some advantages: - only base marker has to be updated by YYFILL - ever-broken old code with overlapping trailing contexts can be fixed without user's help (provided that re2c autogenerates declarations of tag variables) - fixed-length contexts may be used with generic API (though it becomes less generic with relative tags, as we rely on the concept of relative offset) However, the generated code is less efficient in simple cases (default API, no YYFILL): relativity adds extra arithmetics with base marker (which implies dereference of base marker in most of the cases), so the code is actually worse than hand-written. Even with YYFILL it turns out to be more efficient to keep all tags in a struct together with other pointers and update them once in a while: YYFILL is called very infrequently (if properly implemented by the user), while tag operations happen unconditionally. However, making tags absolute means that re2c will fail with error on old code with overlapping trailing contexts (unless they have fixed length or can be deduplicated). These cases are probably rare. Generic API can't make use of fixed tags, but becomes truly generic: 'YYBACKUPTAG / YYRESTORETAG / YYCOPYTAG' make less assumptions about the input. --- diff --git a/re2c/bootstrap/src/parse/lex.cc b/re2c/bootstrap/src/parse/lex.cc index be92270f..d7b8e0cb 100644 --- a/re2c/bootstrap/src/parse/lex.cc +++ b/re2c/bootstrap/src/parse/lex.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 0.16 on Thu Oct 6 15:19:41 2016 */ +/* Generated by re2c 0.16 on Tue Oct 11 14:06:51 2016 */ #line 1 "../src/parse/lex.re" #include "src/util/c99_stdint.h" #include @@ -715,7 +715,7 @@ yy123: void Scanner::lex_tags() { - ConfTags conf; + std::string fmt, sep; for (;;) { #line 721 "src/parse/lex.cc" { @@ -815,7 +815,7 @@ yy139: { if (opts->target == opt_t::CODE) { out.wdelay_tags(opts->topIndent, - new ConfTags(conf)); + new ConfTags(fmt, sep)); } tok = pos = cur; return; @@ -858,7 +858,7 @@ yy149: yy150: ++YYCURSOR; #line 203 "../src/parse/lex.re" - { conf.format = lex_conf_string(); continue; } + { fmt = lex_conf_string(); continue; } #line 863 "src/parse/lex.cc" yy152: yych = (YYCTYPE)*++YYCURSOR; @@ -869,7 +869,7 @@ yy152: if (yych != 'r') goto yy142; ++YYCURSOR; #line 204 "../src/parse/lex.re" - { conf.separator = lex_conf_string(); continue; } + { sep = lex_conf_string(); continue; } #line 874 "src/parse/lex.cc" } #line 216 "../src/parse/lex.re" diff --git a/re2c/bootstrap/src/parse/lex_conf.cc b/re2c/bootstrap/src/parse/lex_conf.cc index 45c5ed42..d679e833 100644 --- a/re2c/bootstrap/src/parse/lex_conf.cc +++ b/re2c/bootstrap/src/parse/lex_conf.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 0.16 on Wed Oct 5 22:22:36 2016 */ +/* Generated by re2c 0.16 on Thu Oct 6 18:44:38 2016 */ #line 1 "../src/parse/lex_conf.re" #include "src/util/c99_stdint.h" #include @@ -186,35 +186,35 @@ yy14: goto yy188; } } else { - goto yy279; + goto yy278; } } else { if (yyaccept <= 16) { if (yyaccept == 15) { - goto yy355; + goto yy352; } else { - goto yy431; + goto yy425; } } else { - goto yy537; + goto yy532; } } } else { if (yyaccept <= 20) { if (yyaccept <= 19) { if (yyaccept == 18) { - goto yy591; + goto yy590; } else { goto yy630; } } else { - goto yy636; + goto yy637; } } else { if (yyaccept == 21) { - goto yy713; + goto yy719; } else { - goto yy716; + goto yy722; } } } @@ -974,85 +974,84 @@ yy191: case 'P': goto yy245; case 'R': goto yy246; case 'S': goto yy247; - case 'T': goto yy248; default: goto yy14; } yy192: yych = (unsigned char)*++cur; - if (yych == '-') goto yy249; + if (yych == '-') goto yy248; goto yy14; yy193: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy250; + if (yych == 'e') goto yy249; goto yy14; yy194: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy251; + if (yych == 'p') goto yy250; goto yy14; yy195: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy252; + if (yych == 'u') goto yy251; goto yy14; yy196: yych = (unsigned char)*++cur; - if (yych == '-') goto yy253; + if (yych == '-') goto yy252; goto yy14; yy197: yych = (unsigned char)*++cur; goto yy106; yy198: yych = (unsigned char)*++cur; - if (yych == 't') goto yy254; + if (yych == 't') goto yy253; goto yy14; yy199: yych = (unsigned char)*++cur; - if (yych == 't') goto yy255; + if (yych == 't') goto yy254; goto yy14; yy200: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy256; + if (yych == 'o') goto yy255; goto yy14; yy201: yych = (unsigned char)*++cur; - if (yych == 'x') goto yy257; + if (yych == 'x') goto yy256; goto yy14; yy202: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy258; + if (yych == 'u') goto yy257; goto yy14; yy203: yych = (unsigned char)*++cur; - if (yych == 't') goto yy259; + if (yych == 't') goto yy258; goto yy14; yy204: yych = (unsigned char)*++cur; if (yych <= 'f') { - if (yych == 'd') goto yy260; + if (yych == 'd') goto yy259; goto yy14; } else { - if (yych <= 'g') goto yy261; - if (yych == 'v') goto yy262; + if (yych <= 'g') goto yy260; + if (yych == 'v') goto yy261; goto yy14; } yy205: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy263; + if (yych == 'p') goto yy262; goto yy14; yy206: yych = (unsigned char)*++cur; - if (yych == 's') goto yy264; + if (yych == 's') goto yy263; goto yy14; yy207: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy265; + if (yych == 'l') goto yy264; goto yy14; yy208: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy266; + if (yych == 'r') goto yy265; goto yy14; yy209: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy267; + if (yych == 'r') goto yy266; goto yy14; yy210: yych = (unsigned char)*++cur; @@ -1060,259 +1059,254 @@ yy210: goto yy14; yy211: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy268; + if (yych == 'e') goto yy267; goto yy14; yy212: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy269; + if (yych == 'c') goto yy268; goto yy14; yy213: yych = (unsigned char)*++cur; - if (yych == '-') goto yy270; + if (yych == '-') goto yy269; goto yy14; yy214: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy271; + if (yych == 'e') goto yy270; goto yy14; yy215: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy272; + if (yych == 'r') goto yy271; goto yy14; yy216: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy273; + if (yych == 'p') goto yy272; goto yy14; yy217: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy275; + if (yych == 'i') goto yy274; goto yy14; yy218: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy276; + if (yych == 'e') goto yy275; goto yy14; yy219: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy277; + if (yych == 'i') goto yy276; goto yy14; yy220: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy278; + if (yych == 'l') goto yy277; goto yy14; yy221: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy280; + if (yych == 'r') goto yy279; goto yy14; yy222: yych = (unsigned char)*++cur; - if (yych == 't') goto yy281; + if (yych == 't') goto yy280; goto yy14; yy223: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy282; + if (yych == 'e') goto yy281; goto yy14; yy224: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy283; + if (yych == 'i') goto yy282; goto yy14; yy225: yych = (unsigned char)*++cur; - if (yych == 'y') goto yy284; + if (yych == 'y') goto yy283; goto yy14; yy226: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy285; + if (yych == 'e') goto yy284; goto yy14; yy227: ++cur; -#line 150 "../src/parse/lex_conf.re" +#line 151 "../src/parse/lex_conf.re" { opts.set_bEmitYYCh (lex_conf_bool()); return; } -#line 1130 "src/parse/lex_conf.cc" +#line 1129 "src/parse/lex_conf.cc" yy229: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy286; + if (yych == 'e') goto yy285; goto yy14; yy230: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy287; + if (yych == 'a') goto yy286; goto yy14; yy231: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy288; + if (yych == 'r') goto yy287; goto yy14; yy232: yych = (unsigned char)*++cur; - if (yych == 's') goto yy289; + if (yych == 's') goto yy288; goto yy14; yy233: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy290; + if (yych == 'e') goto yy289; goto yy14; yy234: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy291; + if (yych == 'c') goto yy290; goto yy14; yy235: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy292; + if (yych == 'e') goto yy291; goto yy14; yy236: ++cur; #line 82 "../src/parse/lex_conf.re" { opts.set_condPrefix (lex_conf_string ()); return; } -#line 1163 "src/parse/lex_conf.cc" +#line 1162 "src/parse/lex_conf.cc" yy238: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy293; + if (yych == 'A') goto yy292; goto yy14; yy239: yych = (unsigned char)*++cur; if (yych <= 'S') { - if (yych == 'O') goto yy294; + if (yych == 'O') goto yy293; goto yy14; } else { - if (yych <= 'T') goto yy295; - if (yych <= 'U') goto yy296; + if (yych <= 'T') goto yy294; + if (yych <= 'U') goto yy295; goto yy14; } yy240: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy297; - if (yych == 'I') goto yy298; + if (yych == 'E') goto yy296; goto yy14; yy241: yych = (unsigned char)*++cur; - if (yych == 'I') goto yy299; + if (yych == 'I') goto yy297; goto yy14; yy242: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy300; + if (yych == 'E') goto yy298; goto yy14; yy243: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy301; - if (yych == 'I') goto yy302; + if (yych == 'E') goto yy299; + if (yych == 'I') goto yy300; goto yy14; yy244: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy303; + if (yych == 'A') goto yy301; goto yy14; yy245: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy304; + if (yych == 'E') goto yy302; goto yy14; yy246: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy305; + if (yych == 'E') goto yy303; goto yy14; yy247: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy306; - if (yych == 'K') goto yy307; + if (yych == 'E') goto yy304; + if (yych == 'K') goto yy305; goto yy14; yy248: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy308; + if (yych == 'v') goto yy306; goto yy14; yy249: yych = (unsigned char)*++cur; - if (yych == 'v') goto yy309; + if (yych == '-') goto yy307; goto yy14; yy250: yych = (unsigned char)*++cur; - if (yych == '-') goto yy310; + if (yych == 'u') goto yy308; goto yy14; yy251: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy311; + if (yych == 'g') goto yy309; goto yy14; yy252: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy312; + if (yych == 'm') goto yy310; goto yy14; yy253: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy313; + if (yych == '-') goto yy311; goto yy14; yy254: yych = (unsigned char)*++cur; - if (yych == '-') goto yy314; + if (yych == 'y') goto yy312; goto yy14; yy255: yych = (unsigned char)*++cur; - if (yych == 'y') goto yy315; + if (yych == 'd') goto yy313; goto yy14; yy256: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy316; + if (yych == '-') goto yy314; goto yy14; yy257: yych = (unsigned char)*++cur; - if (yych == '-') goto yy317; + if (yych == 't') goto yy315; goto yy14; yy258: yych = (unsigned char)*++cur; - if (yych == 't') goto yy318; + if (yych == 'e') goto yy317; goto yy14; yy259: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy320; + if (yych == 'e') goto yy318; goto yy14; yy260: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy321; + if (yych == 'e') goto yy319; goto yy14; yy261: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy322; + if (yych == 'e') goto yy320; goto yy14; yy262: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy323; + if (yych == 'u') goto yy321; goto yy14; yy263: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy324; + if (yych == 'a') goto yy322; goto yy14; yy264: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy325; + if (yych == 'e') goto yy323; goto yy14; yy265: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy326; + if (yych == 't') goto yy324; goto yy14; yy266: yych = (unsigned char)*++cur; - if (yych == 't') goto yy327; + if (yych == 'a') goto yy325; goto yy14; yy267: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy328; + if (yych == '-') goto yy326; goto yy14; yy268: yych = (unsigned char)*++cur; - if (yych == '-') goto yy329; + if (yych == 'o') goto yy327; goto yy14; yy269: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy330; + if (yych == '1') goto yy328; + if (yych == '8') goto yy89; goto yy14; yy270: yych = (unsigned char)*++cur; - if (yych == '1') goto yy331; - if (yych == '8') goto yy89; + if (yych == '-') goto yy329; goto yy14; yy271: yych = (unsigned char)*++cur; - if (yych == '-') goto yy332; + if (yych == 'i') goto yy330; goto yy14; yy272: - yych = (unsigned char)*++cur; - if (yych == 'i') goto yy333; - goto yy14; -yy273: ++cur; -#line 135 "../src/parse/lex_conf.re" +#line 136 "../src/parse/lex_conf.re" { const int32_t n = lex_conf_number (); if (n < 0) @@ -1322,955 +1316,965 @@ yy273: opts.set_topIndent (static_cast (n)); return; } -#line 1326 "src/parse/lex_conf.cc" +#line 1320 "src/parse/lex_conf.cc" +yy274: + yych = (unsigned char)*++cur; + if (yych == 'l') goto yy331; + goto yy14; yy275: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy334; + if (yych == 'x') goto yy332; goto yy14; yy276: yych = (unsigned char)*++cur; - if (yych == 'x') goto yy335; + if (yych == 'x') goto yy333; goto yy14; yy277: - yych = (unsigned char)*++cur; - if (yych == 'x') goto yy336; - goto yy14; -yy278: yyaccept = 14; yych = (unsigned char)*(ptr = ++cur); if (yych <= 0x1F) { if (yych == '\t') { ctx = cur; - goto yy338; + goto yy335; } } else { if (yych <= ' ') { ctx = cur; - goto yy338; + goto yy335; } if (yych == '=') { ctx = cur; - goto yy340; + goto yy337; } } -yy279: -#line 163 "../src/parse/lex_conf.re" +yy278: +#line 164 "../src/parse/lex_conf.re" { out.block().user_start_label = lex_conf_string(); return; } -#line 1360 "src/parse/lex_conf.cc" +#line 1354 "src/parse/lex_conf.cc" +yy279: + yych = (unsigned char)*++cur; + if (yych == 't') goto yy339; + goto yy14; yy280: yych = (unsigned char)*++cur; - if (yych == 't') goto yy342; + if (yych == 'l') goto yy341; goto yy14; yy281: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy344; + if (yych == 's') goto yy342; goto yy14; yy282: yych = (unsigned char)*++cur; - if (yych == 's') goto yy345; + if (yych == 'x') goto yy343; goto yy14; yy283: yych = (unsigned char)*++cur; - if (yych == 'x') goto yy346; + if (yych == 'y') goto yy345; goto yy14; yy284: yych = (unsigned char)*++cur; - if (yych == 'y') goto yy348; + if (yych == 'r') goto yy346; goto yy14; yy285: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy349; + if (yych == 'c') goto yy347; goto yy14; yy286: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy350; + if (yych == 'b') goto yy348; goto yy14; yy287: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy351; + if (yych == 'a') goto yy349; goto yy14; yy288: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy352; + if (yych == 'h') goto yy350; goto yy14; yy289: yych = (unsigned char)*++cur; - if (yych == 'h') goto yy353; + if (yych == 'r') goto yy351; goto yy14; yy290: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy354; + if (yych == 'o') goto yy353; goto yy14; yy291: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy356; + if (yych == 'f') goto yy354; goto yy14; yy292: yych = (unsigned char)*++cur; - if (yych == 'f') goto yy357; + if (yych == 'C') goto yy355; goto yy14; yy293: yych = (unsigned char)*++cur; - if (yych == 'C') goto yy358; + if (yych == 'N') goto yy356; + if (yych == 'P') goto yy357; goto yy14; yy294: yych = (unsigned char)*++cur; - if (yych == 'N') goto yy359; + if (yych <= 'W') goto yy14; + if (yych <= 'X') goto yy358; + if (yych <= 'Y') goto yy359; goto yy14; yy295: yych = (unsigned char)*++cur; - if (yych <= 'W') goto yy14; - if (yych <= 'X') goto yy360; - if (yych <= 'Y') goto yy361; + if (yych == 'R') goto yy360; goto yy14; yy296: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy362; + if (yych == 'B') goto yy361; goto yy14; yy297: yych = (unsigned char)*++cur; - if (yych == 'B') goto yy363; + if (yych == 'L') goto yy362; goto yy14; yy298: yych = (unsigned char)*++cur; - if (yych == 'S') goto yy364; + if (yych == 'T') goto yy363; goto yy14; yy299: yych = (unsigned char)*++cur; - if (yych == 'L') goto yy365; + if (yych == 'S') goto yy364; goto yy14; yy300: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy366; + if (yych == 'M') goto yy365; goto yy14; yy301: yych = (unsigned char)*++cur; - if (yych == 'S') goto yy367; + if (yych == 'R') goto yy366; goto yy14; yy302: yych = (unsigned char)*++cur; - if (yych == 'M') goto yy368; + if (yych == 'E') goto yy367; goto yy14; yy303: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy369; + if (yych == 'S') goto yy368; goto yy14; yy304: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy370; + if (yych == 'T') goto yy369; goto yy14; yy305: yych = (unsigned char)*++cur; - if (yych == 'S') goto yy371; + if (yych == 'I') goto yy370; goto yy14; yy306: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy372; + if (yych == 'e') goto yy371; goto yy14; yy307: yych = (unsigned char)*++cur; - if (yych == 'I') goto yy373; + if (yych == 'i') goto yy372; goto yy14; yy308: yych = (unsigned char)*++cur; - if (yych == 'G') goto yy374; + if (yych == 't') goto yy373; goto yy14; yy309: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy376; + if (yych == '-') goto yy374; goto yy14; yy310: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy377; + if (yych == 'i') goto yy375; goto yy14; yy311: yych = (unsigned char)*++cur; - if (yych == 't') goto yy378; + if (yych == 'd') goto yy376; goto yy14; yy312: yych = (unsigned char)*++cur; - if (yych == '-') goto yy379; + if (yych == '-') goto yy377; goto yy14; yy313: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy380; + if (yych == 'i') goto yy378; goto yy14; yy314: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy381; + if (yych == 's') goto yy379; goto yy14; yy315: + ++cur; +#line 72 "../src/parse/lex_conf.re" + { lex_conf_input(); return; } +#line 1506 "src/parse/lex_conf.cc" +yy317: yych = (unsigned char)*++cur; - if (yych == '-') goto yy382; + if (yych == 'd') goto yy380; goto yy14; -yy316: +yy318: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy383; + if (yych == 'b') goto yy381; goto yy14; -yy317: +yy319: yych = (unsigned char)*++cur; - if (yych == 's') goto yy384; + if (yych == 'n') goto yy382; goto yy14; -yy318: - ++cur; -#line 72 "../src/parse/lex_conf.re" - { lex_conf_input(); return; } -#line 1519 "src/parse/lex_conf.cc" yy320: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy385; + if (yych == 'r') goto yy383; goto yy14; yy321: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy386; + if (yych == 't') goto yy384; goto yy14; yy322: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy387; + if (yych == 'b') goto yy385; goto yy14; yy323: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy388; + if (yych == 't') goto yy386; goto yy14; yy324: yych = (unsigned char)*++cur; - if (yych == 't') goto yy389; + if (yych == '-') goto yy387; goto yy14; yy325: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy390; + if (yych == 'b') goto yy388; goto yy14; yy326: yych = (unsigned char)*++cur; - if (yych == 't') goto yy391; + if (yych == 'h') goto yy389; goto yy14; yy327: yych = (unsigned char)*++cur; - if (yych == '-') goto yy392; + if (yych == 'd') goto yy390; goto yy14; yy328: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy393; + if (yych == '6') goto yy126; goto yy14; yy329: yych = (unsigned char)*++cur; - if (yych == 'h') goto yy394; + if (yych == 'c') goto yy391; goto yy14; yy330: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy395; + if (yych == 'n') goto yy392; goto yy14; yy331: yych = (unsigned char)*++cur; - if (yych == '6') goto yy126; + if (yych == 'l') goto yy393; goto yy14; yy332: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy396; + if (yych == 't') goto yy394; goto yy14; yy333: - yych = (unsigned char)*++cur; - if (yych == 'n') goto yy397; - goto yy14; -yy334: - yych = (unsigned char)*++cur; - if (yych == 'l') goto yy398; - goto yy14; -yy335: - yych = (unsigned char)*++cur; - if (yych == 't') goto yy399; - goto yy14; -yy336: ++cur; -#line 159 "../src/parse/lex_conf.re" +#line 160 "../src/parse/lex_conf.re" { opts.set_labelPrefix (lex_conf_string ()); return; } -#line 1588 "src/parse/lex_conf.cc" -yy338: +#line 1575 "src/parse/lex_conf.cc" +yy335: ++cur; if (lim <= cur) fill(1); yych = (unsigned char)*cur; if (yybm[0+yych] & 64) { - goto yy338; + goto yy335; } if (yych != '=') goto yy14; -yy340: +yy337: ++cur; if ((lim - cur) < 2) fill(2); yych = (unsigned char)*cur; if (yych <= ',') { if (yych <= '\t') { if (yych <= 0x08) goto yy14; - goto yy340; + goto yy337; } else { - if (yych == ' ') goto yy340; + if (yych == ' ') goto yy337; goto yy14; } } else { if (yych <= '/') { - if (yych <= '-') goto yy401; + if (yych <= '-') goto yy396; goto yy14; } else { - if (yych <= '0') goto yy402; - if (yych <= '9') goto yy404; + if (yych <= '0') goto yy397; + if (yych <= '9') goto yy399; goto yy14; } } -yy342: +yy339: ++cur; #line 97 "../src/parse/lex_conf.re" { opts.set_bUseStateAbort (lex_conf_bool()); return; } -#line 1623 "src/parse/lex_conf.cc" -yy344: +#line 1610 "src/parse/lex_conf.cc" +yy341: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy406; + if (yych == 'a') goto yy401; goto yy14; -yy345: +yy342: yych = (unsigned char)*++cur; - if (yych == 's') goto yy407; + if (yych == 's') goto yy402; goto yy14; -yy346: +yy343: ++cur; -#line 130 "../src/parse/lex_conf.re" +#line 131 "../src/parse/lex_conf.re" { opts.set_tags_prefix (lex_conf_string ()); return; } -#line 1636 "src/parse/lex_conf.cc" -yy348: +#line 1623 "src/parse/lex_conf.cc" +yy345: yych = (unsigned char)*++cur; if (yych <= 'c') { if (yych <= '`') goto yy14; - if (yych <= 'a') goto yy408; - if (yych <= 'b') goto yy409; - goto yy410; + if (yych <= 'a') goto yy403; + if (yych <= 'b') goto yy404; + goto yy405; } else { if (yych <= 'r') goto yy14; - if (yych <= 's') goto yy411; - if (yych <= 't') goto yy412; + if (yych <= 's') goto yy406; + if (yych <= 't') goto yy407; goto yy14; } -yy349: +yy346: yych = (unsigned char)*++cur; - if (yych == 's') goto yy413; + if (yych == 's') goto yy408; goto yy14; -yy350: +yy347: yych = (unsigned char)*++cur; - if (yych == 'k') goto yy414; + if (yych == 'k') goto yy409; goto yy14; -yy351: +yy348: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy416; + if (yych == 'l') goto yy411; goto yy14; -yy352: +yy349: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy417; + if (yych == 'm') goto yy412; goto yy14; -yy353: +yy350: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy418; + if (yych == 'o') goto yy413; goto yy14; -yy354: +yy351: yyaccept = 15; yych = (unsigned char)*(ptr = ++cur); - if (yych == '@') goto yy419; -yy355: + if (yych == '@') goto yy414; +yy352: #line 84 "../src/parse/lex_conf.re" { opts.set_condDivider (lex_conf_string ()); return; } -#line 1677 "src/parse/lex_conf.cc" +#line 1664 "src/parse/lex_conf.cc" +yy353: + yych = (unsigned char)*++cur; + if (yych == 'n') goto yy415; + goto yy14; +yy354: + yych = (unsigned char)*++cur; + if (yych == 'i') goto yy416; + goto yy14; +yy355: + yych = (unsigned char)*++cur; + if (yych == 'K') goto yy417; + goto yy14; yy356: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy420; + if (yych == 'D') goto yy418; goto yy14; yy357: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy421; + if (yych == 'Y') goto yy419; goto yy14; yy358: yych = (unsigned char)*++cur; - if (yych == 'K') goto yy422; + if (yych == 'M') goto yy420; goto yy14; yy359: yych = (unsigned char)*++cur; - if (yych == 'D') goto yy423; + if (yych == 'P') goto yy421; goto yy14; yy360: yych = (unsigned char)*++cur; - if (yych == 'M') goto yy424; + if (yych == 'S') goto yy422; goto yy14; yy361: yych = (unsigned char)*++cur; - if (yych == 'P') goto yy425; + if (yych == 'U') goto yy423; goto yy14; yy362: yych = (unsigned char)*++cur; - if (yych == 'S') goto yy426; + if (yych == 'L') goto yy424; goto yy14; yy363: yych = (unsigned char)*++cur; - if (yych == 'U') goto yy427; + if (yych == 'C') goto yy426; + if (yych == 'S') goto yy427; goto yy14; yy364: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy428; + if (yych == 'S') goto yy428; goto yy14; yy365: yych = (unsigned char)*++cur; - if (yych == 'L') goto yy430; + if (yych == 'I') goto yy429; goto yy14; yy366: yych = (unsigned char)*++cur; - if (yych == 'C') goto yy432; - if (yych == 'S') goto yy433; + if (yych == 'K') goto yy430; goto yy14; yy367: yych = (unsigned char)*++cur; - if (yych == 'S') goto yy434; + if (yych == 'K') goto yy431; goto yy14; yy368: yych = (unsigned char)*++cur; - if (yych == 'I') goto yy435; + if (yych == 'T') goto yy433; goto yy14; yy369: yych = (unsigned char)*++cur; - if (yych == 'K') goto yy436; + if (yych == 'C') goto yy434; + if (yych == 'S') goto yy435; goto yy14; yy370: yych = (unsigned char)*++cur; - if (yych == 'K') goto yy437; + if (yych == 'P') goto yy436; goto yy14; yy371: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy439; + if (yych == 'c') goto yy438; goto yy14; yy372: yych = (unsigned char)*++cur; - if (yych == 'C') goto yy440; - if (yych == 'S') goto yy441; + if (yych == 'n') goto yy439; goto yy14; yy373: yych = (unsigned char)*++cur; - if (yych == 'P') goto yy442; + if (yych == 'e') goto yy440; goto yy14; yy374: - ++cur; -#line 127 "../src/parse/lex_conf.re" - { opts.set_tags_yytag (lex_conf_string ()); return; } -#line 1756 "src/parse/lex_conf.cc" + yych = (unsigned char)*++cur; + if (yych == 'o') goto yy441; + goto yy14; +yy375: + yych = (unsigned char)*++cur; + if (yych == 'n') goto yy442; + goto yy14; yy376: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy444; + if (yych == 'o') goto yy443; goto yy14; yy377: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy445; + if (yych == 'c') goto yy444; goto yy14; yy378: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy446; + if (yych == 'n') goto yy445; goto yy14; yy379: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy447; + if (yych == 'y') goto yy446; goto yy14; yy380: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy448; + if (yych == '-') goto yy447; goto yy14; yy381: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy449; + if (yych == 'u') goto yy448; goto yy14; yy382: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy450; + if (yych == 'e') goto yy449; goto yy14; yy383: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy451; + if (yych == 's') goto yy450; goto yy14; yy384: yych = (unsigned char)*++cur; - if (yych == 'y') goto yy452; - goto yy14; + goto yy115; yy385: yych = (unsigned char)*++cur; - if (yych == '-') goto yy453; + if (yych == 'l') goto yy451; goto yy14; yy386: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy454; + if (yych == 'o') goto yy452; goto yy14; yy387: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy455; + if (yych == 'c') goto yy453; goto yy14; yy388: yych = (unsigned char)*++cur; - if (yych == 's') goto yy456; + if (yych == 'l') goto yy454; goto yy14; yy389: yych = (unsigned char)*++cur; - goto yy115; + if (yych == 'e') goto yy455; + goto yy14; yy390: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy457; + if (yych == 'e') goto yy456; goto yy14; yy391: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy458; + if (yych == 'h') goto yy457; goto yy14; yy392: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy459; + if (yych == 'g') goto yy458; goto yy14; yy393: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy460; + if (yych == 'L') goto yy460; goto yy14; yy394: - yych = (unsigned char)*++cur; - if (yych == 'e') goto yy461; - goto yy14; -yy395: - yych = (unsigned char)*++cur; - if (yych == 'e') goto yy462; - goto yy14; -yy396: - yych = (unsigned char)*++cur; - if (yych == 'h') goto yy463; - goto yy14; -yy397: - yych = (unsigned char)*++cur; - if (yych == 'g') goto yy464; - goto yy14; -yy398: - yych = (unsigned char)*++cur; - if (yych == 'L') goto yy466; - goto yy14; -yy399: ++cur; #line 96 "../src/parse/lex_conf.re" { opts.set_yynext (lex_conf_string ()); return; } -#line 1852 "src/parse/lex_conf.cc" -yy401: +#line 1834 "src/parse/lex_conf.cc" +yy396: yych = (unsigned char)*++cur; if (yych <= '0') goto yy14; - if (yych <= '9') goto yy404; + if (yych <= '9') goto yy399; goto yy14; -yy402: +yy397: ++cur; -yy403: +yy398: cur = ctx; -#line 162 "../src/parse/lex_conf.re" +#line 163 "../src/parse/lex_conf.re" { out.block().force_start_label = lex_conf_bool(); return; } -#line 1864 "src/parse/lex_conf.cc" -yy404: +#line 1846 "src/parse/lex_conf.cc" +yy399: ++cur; if (lim <= cur) fill(1); yych = (unsigned char)*cur; if (yybm[0+yych] & 128) { - goto yy404; + goto yy399; } - goto yy403; -yy406: + goto yy398; +yy401: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy467; + if (yych == 'b') goto yy461; goto yy14; -yy407: +yy402: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy468; + if (yych == 'i') goto yy462; goto yy14; -yy408: +yy403: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy469; + if (yych == 'c') goto yy463; goto yy14; -yy409: +yy404: + yych = (unsigned char)*++cur; + if (yych == 'm') goto yy464; + goto yy14; +yy405: + yych = (unsigned char)*++cur; + if (yych == 'h') goto yy466; + if (yych == 't') goto yy468; + goto yy14; +yy406: + yych = (unsigned char)*++cur; + if (yych == 't') goto yy469; + goto yy14; +yy407: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy470; + if (yych == 'a') goto yy470; goto yy14; -yy410: +yy408: yych = (unsigned char)*++cur; - if (yych == 'h') goto yy472; - if (yych == 't') goto yy474; + if (yych == 'i') goto yy471; goto yy14; +yy409: + ++cur; +#line 158 "../src/parse/lex_conf.re" + { opts.set_fill_check (lex_conf_bool()); return; } +#line 1892 "src/parse/lex_conf.cc" yy411: yych = (unsigned char)*++cur; - if (yych == 't') goto yy475; + if (yych == 'e') goto yy472; goto yy14; yy412: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy476; + if (yych == 'e') goto yy474; goto yy14; yy413: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy477; + if (yych == 'l') goto yy475; goto yy14; yy414: - ++cur; -#line 157 "../src/parse/lex_conf.re" - { opts.set_fill_check (lex_conf_bool()); return; } -#line 1910 "src/parse/lex_conf.cc" + yych = (unsigned char)*++cur; + if (yych == 'c') goto yy476; + goto yy14; +yy415: + yych = (unsigned char)*++cur; + if (yych == 'd') goto yy477; + goto yy14; yy416: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy478; + if (yych == 'x') goto yy479; goto yy14; yy417: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy480; + if (yych == 'U') goto yy481; goto yy14; yy418: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy481; + if (yych == 'T') goto yy482; goto yy14; yy419: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy482; + if (yych == 'T') goto yy483; goto yy14; yy420: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy483; + if (yych == 'A') goto yy484; goto yy14; yy421: yych = (unsigned char)*++cur; - if (yych == 'x') goto yy485; + if (yych == 'E') goto yy485; goto yy14; yy422: yych = (unsigned char)*++cur; - if (yych == 'U') goto yy487; + if (yych == 'O') goto yy487; goto yy14; yy423: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy488; + if (yych == 'G') goto yy488; goto yy14; yy424: - yych = (unsigned char)*++cur; - if (yych == 'A') goto yy489; - goto yy14; + yyaccept = 16; + yych = (unsigned char)*(ptr = ++cur); + if (yych == ':') goto yy490; + if (yych == '@') goto yy491; yy425: - yych = (unsigned char)*++cur; - if (yych == 'E') goto yy490; - goto yy14; +#line 153 "../src/parse/lex_conf.re" + { opts.set_fill (lex_conf_string ()); return; } +#line 1953 "src/parse/lex_conf.cc" yy426: yych = (unsigned char)*++cur; if (yych == 'O') goto yy492; goto yy14; yy427: yych = (unsigned char)*++cur; - if (yych == 'G') goto yy493; + if (yych == 'T') goto yy493; goto yy14; yy428: - ++cur; -#line 128 "../src/parse/lex_conf.re" - { opts.set_tags_yydist (lex_conf_string ()); return; } -#line 1963 "src/parse/lex_conf.cc" + yych = (unsigned char)*++cur; + if (yych == 'T') goto yy494; + goto yy14; +yy429: + yych = (unsigned char)*++cur; + if (yych == 'T') goto yy495; + goto yy14; yy430: - yyaccept = 16; - yych = (unsigned char)*(ptr = ++cur); - if (yych == ':') goto yy495; - if (yych == '@') goto yy496; -yy431: -#line 152 "../src/parse/lex_conf.re" - { opts.set_fill (lex_conf_string ()); return; } -#line 1972 "src/parse/lex_conf.cc" -yy432: yych = (unsigned char)*++cur; - if (yych == 'O') goto yy497; + if (yych == 'E') goto yy497; goto yy14; +yy431: + ++cur; +#line 120 "../src/parse/lex_conf.re" + { opts.set_yypeek (lex_conf_string ()); return; } +#line 1978 "src/parse/lex_conf.cc" yy433: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy498; + if (yych == 'O') goto yy498; goto yy14; yy434: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy499; + if (yych == 'O') goto yy499; goto yy14; yy435: yych = (unsigned char)*++cur; if (yych == 'T') goto yy500; goto yy14; yy436: + ++cur; +#line 121 "../src/parse/lex_conf.re" + { opts.set_yyskip (lex_conf_string ()); return; } +#line 1995 "src/parse/lex_conf.cc" +yy438: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy502; + if (yych == 't') goto yy501; goto yy14; -yy437: - ++cur; -#line 120 "../src/parse/lex_conf.re" - { opts.set_yypeek (lex_conf_string ()); return; } -#line 1997 "src/parse/lex_conf.cc" yy439: yych = (unsigned char)*++cur; - if (yych == 'O') goto yy503; + if (yych == 's') goto yy502; + if (yych == 'v') goto yy503; goto yy14; yy440: yych = (unsigned char)*++cur; - if (yych == 'O') goto yy504; + if (yych == 'd') goto yy504; goto yy14; yy441: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy505; + if (yych == 'u') goto yy505; goto yy14; yy442: - ++cur; -#line 121 "../src/parse/lex_conf.re" - { opts.set_yyskip (lex_conf_string ()); return; } -#line 2014 "src/parse/lex_conf.cc" + yych = (unsigned char)*++cur; + if (yych == 'i') goto yy506; + goto yy14; +yy443: + yych = (unsigned char)*++cur; + if (yych == 't') goto yy91; + goto yy14; yy444: yych = (unsigned char)*++cur; - if (yych == 't') goto yy506; + if (yych == 'l') goto yy507; goto yy14; yy445: yych = (unsigned char)*++cur; - if (yych == 's') goto yy507; - if (yych == 'v') goto yy508; + if (yych == 'g') goto yy508; goto yy14; yy446: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy509; + if (yych == 'n') goto yy509; goto yy14; yy447: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy510; + if (yych == 'i') goto yy510; goto yy14; yy448: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy511; + if (yych == 'g') goto yy511; goto yy14; yy449: yych = (unsigned char)*++cur; - if (yych == 't') goto yy91; + if (yych == 'r') goto yy512; goto yy14; yy450: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy512; + if (yych == 'i') goto yy513; goto yy14; yy451: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy513; + if (yych == 'e') goto yy514; goto yy14; yy452: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy514; + if (yych == 'n') goto yy95; goto yy14; yy453: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy515; + if (yych == 'o') goto yy515; goto yy14; yy454: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy516; + if (yych == 'e') goto yy516; goto yy14; yy455: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy517; + if (yych == 'a') goto yy517; goto yy14; yy456: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy518; - goto yy14; + goto yy123; yy457: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy519; + if (yych == 'a') goto yy518; goto yy14; yy458: - yych = (unsigned char)*++cur; - if (yych == 'n') goto yy95; - goto yy14; -yy459: - yych = (unsigned char)*++cur; - if (yych == 'o') goto yy520; - goto yy14; + ++cur; +#line 134 "../src/parse/lex_conf.re" + { opts.set_indString (lex_conf_string ()); return; } +#line 2080 "src/parse/lex_conf.cc" yy460: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy521; + if (yych == 'a') goto yy519; goto yy14; yy461: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy522; + if (yych == 'e') goto yy520; goto yy14; yy462: yych = (unsigned char)*++cur; - goto yy123; + if (yych == 'o') goto yy521; + goto yy14; yy463: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy523; + if (yych == 'c') goto yy522; goto yy14; yy464: ++cur; -#line 133 "../src/parse/lex_conf.re" - { opts.set_indString (lex_conf_string ()); return; } -#line 2099 "src/parse/lex_conf.cc" +#line 101 "../src/parse/lex_conf.re" + { opts.set_yybm (lex_conf_string ()); return; } +#line 2101 "src/parse/lex_conf.cc" yy466: + ++cur; +#line 149 "../src/parse/lex_conf.re" + { opts.set_yych (lex_conf_string ()); return; } +#line 2106 "src/parse/lex_conf.cc" +yy468: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy524; + if (yych == 'a') goto yy523; goto yy14; -yy467: +yy469: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy525; + if (yych == 'a') goto yy524; goto yy14; -yy468: +yy470: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy526; + if (yych == 'r') goto yy525; goto yy14; -yy469: +yy471: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy527; + if (yych == 'o') goto yy526; goto yy14; -yy470: - ++cur; -#line 101 "../src/parse/lex_conf.re" - { opts.set_yybm (lex_conf_string ()); return; } -#line 2120 "src/parse/lex_conf.cc" yy472: ++cur; -#line 148 "../src/parse/lex_conf.re" - { opts.set_yych (lex_conf_string ()); return; } -#line 2125 "src/parse/lex_conf.cc" +#line 154 "../src/parse/lex_conf.re" + { opts.set_fill_use (lex_conf_bool()); return; } +#line 2127 "src/parse/lex_conf.cc" yy474: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy528; + if (yych == 't') goto yy527; goto yy14; yy475: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy529; + if (yych == 'd') goto yy528; goto yy14; yy476: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy530; + if (yych == 'o') goto yy530; goto yy14; yy477: - yych = (unsigned char)*++cur; - if (yych == 'o') goto yy531; - goto yy14; -yy478: ++cur; -#line 153 "../src/parse/lex_conf.re" - { opts.set_fill_use (lex_conf_bool()); return; } -#line 2146 "src/parse/lex_conf.cc" -yy480: - yych = (unsigned char)*++cur; - if (yych == 't') goto yy532; - goto yy14; +#line 87 "../src/parse/lex_conf.re" + { opts.set_condGotoParam (lex_conf_string ()); return; } +#line 2144 "src/parse/lex_conf.cc" +yy479: + ++cur; +#line 83 "../src/parse/lex_conf.re" + { opts.set_condEnumPrefix (lex_conf_string ()); return; } +#line 2149 "src/parse/lex_conf.cc" yy481: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy533; + if (yych == 'P') goto yy531; goto yy14; yy482: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy535; + if (yych == 'Y') goto yy533; goto yy14; yy483: - ++cur; -#line 87 "../src/parse/lex_conf.re" - { opts.set_condGotoParam (lex_conf_string ()); return; } -#line 2163 "src/parse/lex_conf.cc" + yych = (unsigned char)*++cur; + if (yych == 'A') goto yy534; + goto yy14; +yy484: + yych = (unsigned char)*++cur; + if (yych == 'R') goto yy535; + goto yy14; yy485: ++cur; -#line 83 "../src/parse/lex_conf.re" - { opts.set_condEnumPrefix (lex_conf_string ()); return; } -#line 2168 "src/parse/lex_conf.cc" +#line 148 "../src/parse/lex_conf.re" + { opts.set_yyctype (lex_conf_string ()); return; } +#line 2170 "src/parse/lex_conf.cc" yy487: yych = (unsigned char)*++cur; - if (yych == 'P') goto yy536; + if (yych == 'R') goto yy536; goto yy14; yy488: + ++cur; +#line 146 "../src/parse/lex_conf.re" + { opts.set_yydebug (lex_conf_string ()); return; } +#line 2179 "src/parse/lex_conf.cc" +yy490: yych = (unsigned char)*++cur; - if (yych == 'Y') goto yy538; + if (yych == 'n') goto yy538; goto yy14; -yy489: +yy491: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy539; + if (yych == 'l') goto yy539; goto yy14; -yy490: - ++cur; -#line 147 "../src/parse/lex_conf.re" - { opts.set_yyctype (lex_conf_string ()); return; } -#line 2185 "src/parse/lex_conf.cc" yy492: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy540; + if (yych == 'N') goto yy540; goto yy14; yy493: - ++cur; -#line 145 "../src/parse/lex_conf.re" - { opts.set_yydebug (lex_conf_string ()); return; } -#line 2194 "src/parse/lex_conf.cc" -yy495: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy542; + if (yych == 'A') goto yy541; goto yy14; -yy496: +yy494: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy543; + if (yych == 'H') goto yy542; goto yy14; +yy495: + ++cur; +#line 118 "../src/parse/lex_conf.re" + { opts.set_yylimit (lex_conf_string ()); return; } +#line 2204 "src/parse/lex_conf.cc" yy497: yych = (unsigned char)*++cur; - if (yych == 'N') goto yy544; + if (yych == 'R') goto yy543; goto yy14; yy498: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy545; + if (yych == 'R') goto yy545; goto yy14; yy499: yych = (unsigned char)*++cur; - if (yych == 'H') goto yy546; + if (yych == 'N') goto yy546; goto yy14; yy500: - ++cur; -#line 118 "../src/parse/lex_conf.re" - { opts.set_yylimit (lex_conf_string ()); return; } -#line 2219 "src/parse/lex_conf.cc" + yych = (unsigned char)*++cur; + if (yych == 'A') goto yy547; + goto yy14; +yy501: + yych = (unsigned char)*++cur; + if (yych == 'o') goto yy548; + goto yy14; yy502: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy547; + if (yych == 'e') goto yy549; goto yy14; yy503: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy549; + if (yych == 'e') goto yy550; goto yy14; yy504: yych = (unsigned char)*++cur; - if (yych == 'N') goto yy550; + if (yych == '-') goto yy551; goto yy14; yy505: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy551; + if (yych == 't') goto yy552; goto yy14; yy506: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy552; + if (yych == 'm') goto yy553; goto yy14; yy507: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy553; + if (yych == 'a') goto yy554; goto yy14; yy508: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy554; + if (yych == '-') goto yy555; goto yy14; yy509: yych = (unsigned char)*++cur; - if (yych == '-') goto yy555; + if (yych == 't') goto yy556; goto yy14; yy510: yych = (unsigned char)*++cur; - if (yych == 't') goto yy556; + if (yych == 'f') goto yy557; goto yy14; yy511: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy557; + if (yych == '-') goto yy558; goto yy14; yy512: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy558; + if (yych == 'a') goto yy559; goto yy14; yy513: yych = (unsigned char)*++cur; - if (yych == '-') goto yy559; + if (yych == 'o') goto yy560; goto yy14; yy514: yych = (unsigned char)*++cur; - if (yych == 't') goto yy560; - goto yy14; + goto yy117; yy515: yych = (unsigned char)*++cur; - if (yych == 'f') goto yy561; + if (yych == 'n') goto yy561; goto yy14; yy516: yych = (unsigned char)*++cur; @@ -2278,68 +2282,49 @@ yy516: goto yy14; yy517: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy563; + if (yych == 'd') goto yy563; goto yy14; yy518: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy564; + if (yych == 'r') goto yy564; goto yy14; yy519: yych = (unsigned char)*++cur; - goto yy117; + if (yych == 'b') goto yy565; + goto yy14; yy520: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy565; + if (yych == 'l') goto yy566; goto yy14; yy521: yych = (unsigned char)*++cur; - if (yych == '-') goto yy566; + if (yych == 'n') goto yy568; goto yy14; yy522: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy567; + if (yych == 'e') goto yy570; goto yy14; yy523: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy568; + if (yych == 'b') goto yy571; goto yy14; yy524: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy569; + if (yych == 'b') goto yy572; goto yy14; yy525: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy570; + if (yych == 'g') goto yy573; goto yy14; yy526: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy572; + if (yych == 'n') goto yy574; goto yy14; yy527: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy574; + if (yych == 'e') goto yy576; goto yy14; yy528: - yych = (unsigned char)*++cur; - if (yych == 'b') goto yy575; - goto yy14; -yy529: - yych = (unsigned char)*++cur; - if (yych == 'b') goto yy576; - goto yy14; -yy530: - yych = (unsigned char)*++cur; - if (yych == 'g') goto yy577; - goto yy14; -yy531: - yych = (unsigned char)*++cur; - if (yych == 'n') goto yy578; - goto yy14; -yy532: - yych = (unsigned char)*++cur; - if (yych == 'e') goto yy580; - goto yy14; -yy533: ++cur; #line 104 "../src/parse/lex_conf.re" { @@ -2351,482 +2336,498 @@ yy533: opts.set_cGotoThreshold (static_cast (n)); return; } -#line 2355 "src/parse/lex_conf.cc" -yy535: +#line 2340 "src/parse/lex_conf.cc" +yy530: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy581; + if (yych == 'n') goto yy577; goto yy14; -yy536: +yy531: yyaccept = 17; yych = (unsigned char)*(ptr = ++cur); - if (yych == 'C') goto yy582; -yy537: + if (yych == 'C') goto yy578; + if (yych == 'T') goto yy579; +yy532: #line 122 "../src/parse/lex_conf.re" { opts.set_yybackup (lex_conf_string ()); return; } -#line 2367 "src/parse/lex_conf.cc" -yy538: +#line 2353 "src/parse/lex_conf.cc" +yy533: yych = (unsigned char)*++cur; - if (yych == 'P') goto yy583; + if (yych == 'P') goto yy580; goto yy14; -yy539: +yy534: yych = (unsigned char)*++cur; - if (yych == 'K') goto yy584; + if (yych == 'G') goto yy581; goto yy14; -yy540: +yy535: + yych = (unsigned char)*++cur; + if (yych == 'K') goto yy583; + goto yy14; +yy536: ++cur; #line 115 "../src/parse/lex_conf.re" { opts.set_yycursor (lex_conf_string ()); return; } -#line 2380 "src/parse/lex_conf.cc" -yy542: +#line 2370 "src/parse/lex_conf.cc" +yy538: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy585; + if (yych == 'a') goto yy584; goto yy14; -yy543: +yy539: + yych = (unsigned char)*++cur; + if (yych == 'e') goto yy585; + goto yy14; +yy540: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy586; + if (yych == 'D') goto yy586; goto yy14; -yy544: +yy541: yych = (unsigned char)*++cur; - if (yych == 'D') goto yy587; + if (yych == 'T') goto yy587; goto yy14; +yy542: + yych = (unsigned char)*++cur; + if (yych == 'A') goto yy588; + goto yy14; +yy543: + ++cur; +#line 116 "../src/parse/lex_conf.re" + { opts.set_yymarker (lex_conf_string ()); return; } +#line 2395 "src/parse/lex_conf.cc" yy545: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy588; + if (yych == 'E') goto yy589; goto yy14; yy546: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy589; + if (yych == 'D') goto yy591; goto yy14; yy547: - ++cur; -#line 116 "../src/parse/lex_conf.re" - { opts.set_yymarker (lex_conf_string ()); return; } -#line 2405 "src/parse/lex_conf.cc" + yych = (unsigned char)*++cur; + if (yych == 'T') goto yy592; + goto yy14; +yy548: + yych = (unsigned char)*++cur; + if (yych == 'r') goto yy593; + goto yy14; yy549: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy590; + if (yych == 'n') goto yy594; goto yy14; yy550: yych = (unsigned char)*++cur; - if (yych == 'D') goto yy592; + if (yych == 'r') goto yy595; goto yy14; yy551: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy593; + if (yych == 'g') goto yy596; goto yy14; yy552: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy594; + if (yych == 'p') goto yy597; goto yy14; yy553: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy595; + if (yych == 'i') goto yy598; goto yy14; yy554: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy596; + if (yych == 's') goto yy599; goto yy14; yy555: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy597; + if (yych == 'p') goto yy600; goto yy14; yy556: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy598; + if (yych == 'a') goto yy601; goto yy14; yy557: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy599; + if (yych == 's') goto yy602; goto yy14; yy558: yych = (unsigned char)*++cur; - if (yych == 's') goto yy600; + if (yych == 'i') goto yy603; goto yy14; yy559: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy601; + if (yych == 't') goto yy604; goto yy14; yy560: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy602; + if (yych == 'n') goto yy605; goto yy14; yy561: yych = (unsigned char)*++cur; - if (yych == 's') goto yy603; + if (yych == 'd') goto yy607; goto yy14; yy562: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy604; + if (yych == 's') goto yy608; goto yy14; yy563: yych = (unsigned char)*++cur; - if (yych == 't') goto yy605; + if (yych == 'e') goto yy609; goto yy14; yy564: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy606; + if (yych == 's') goto yy610; goto yy14; yy565: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy608; + if (yych == 'e') goto yy611; goto yy14; yy566: - yych = (unsigned char)*++cur; - if (yych == 's') goto yy609; - goto yy14; -yy567: - yych = (unsigned char)*++cur; - if (yych == 'e') goto yy610; - goto yy14; -yy568: - yych = (unsigned char)*++cur; - if (yych == 's') goto yy611; - goto yy14; -yy569: - yych = (unsigned char)*++cur; - if (yych == 'e') goto yy612; - goto yy14; -yy570: ++cur; #line 98 "../src/parse/lex_conf.re" { opts.set_bUseStateNext (lex_conf_bool()); return; } -#line 2494 "src/parse/lex_conf.cc" -yy572: +#line 2484 "src/parse/lex_conf.cc" +yy568: ++cur; -#line 131 "../src/parse/lex_conf.re" +#line 132 "../src/parse/lex_conf.re" { opts.set_tags_expression(lex_conf_string ()); return; } -#line 2499 "src/parse/lex_conf.cc" -yy574: +#line 2489 "src/parse/lex_conf.cc" +yy570: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy613; + if (yych == 'p') goto yy612; goto yy14; -yy575: +yy571: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy614; + if (yych == 'l') goto yy613; goto yy14; -yy576: +yy572: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy615; + if (yych == 'l') goto yy614; goto yy14; -yy577: +yy573: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy616; + if (yych == 'e') goto yy615; goto yy14; -yy578: +yy574: ++cur; -#line 149 "../src/parse/lex_conf.re" +#line 150 "../src/parse/lex_conf.re" { opts.set_yychConversion (lex_conf_bool()); return; } -#line 2520 "src/parse/lex_conf.cc" -yy580: +#line 2510 "src/parse/lex_conf.cc" +yy576: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy617; + if (yych == 'r') goto yy616; goto yy14; -yy581: +yy577: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy619; + if (yych == 'd') goto yy618; goto yy14; -yy582: +yy578: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy621; + if (yych == 'T') goto yy620; goto yy14; -yy583: +yy579: + yych = (unsigned char)*++cur; + if (yych == 'A') goto yy621; + goto yy14; +yy580: yych = (unsigned char)*++cur; if (yych == 'E') goto yy622; goto yy14; -yy584: +yy581: + ++cur; +#line 128 "../src/parse/lex_conf.re" + { opts.set_yycopytag (lex_conf_string ()); return; } +#line 2535 "src/parse/lex_conf.cc" +yy583: yych = (unsigned char)*++cur; if (yych == 'E') goto yy624; goto yy14; -yy585: +yy584: yych = (unsigned char)*++cur; if (yych == 'k') goto yy625; goto yy14; -yy586: +yy585: yych = (unsigned char)*++cur; if (yych == 'n') goto yy626; goto yy14; -yy587: +yy586: yych = (unsigned char)*++cur; if (yych == 'I') goto yy628; goto yy14; -yy588: +yy587: yych = (unsigned char)*++cur; if (yych == 'E') goto yy629; goto yy14; -yy589: +yy588: yych = (unsigned char)*++cur; if (yych == 'N') goto yy631; goto yy14; -yy590: +yy589: yyaccept = 18; yych = (unsigned char)*(ptr = ++cur); if (yych == 'C') goto yy633; -yy591: -#line 124 "../src/parse/lex_conf.re" + if (yych == 'T') goto yy634; +yy590: +#line 125 "../src/parse/lex_conf.re" { opts.set_yyrestore (lex_conf_string ()); return; } #line 2568 "src/parse/lex_conf.cc" +yy591: + yych = (unsigned char)*++cur; + if (yych == 'I') goto yy635; + goto yy14; yy592: yych = (unsigned char)*++cur; - if (yych == 'I') goto yy634; + if (yych == 'E') goto yy636; goto yy14; yy593: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy635; + if (yych == 's') goto yy638; goto yy14; yy594: yych = (unsigned char)*++cur; - if (yych == 's') goto yy637; + if (yych == 's') goto yy639; goto yy14; yy595: yych = (unsigned char)*++cur; - if (yych == 's') goto yy638; + if (yych == 't') goto yy640; goto yy14; yy596: yych = (unsigned char)*++cur; - if (yych == 't') goto yy639; + if (yych == 'o') goto yy641; goto yy14; yy597: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy640; + if (yych == 'u') goto yy642; goto yy14; yy598: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy641; + if (yych == 'z') goto yy643; goto yy14; yy599: yych = (unsigned char)*++cur; - if (yych == 'z') goto yy642; + if (yych == 's') goto yy644; goto yy14; yy600: yych = (unsigned char)*++cur; - if (yych == 's') goto yy643; + if (yych == 'o') goto yy646; goto yy14; yy601: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy645; + if (yych == 'x') goto yy93; goto yy14; yy602: yych = (unsigned char)*++cur; - if (yych == 'x') goto yy93; - goto yy14; + goto yy119; yy603: yych = (unsigned char)*++cur; - goto yy119; + if (yych == 'n') goto yy647; + goto yy14; yy604: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy646; + if (yych == 'i') goto yy648; goto yy14; yy605: - yych = (unsigned char)*++cur; - if (yych == 'i') goto yy647; - goto yy14; -yy606: ++cur; #line 58 "../src/parse/lex_conf.re" { opts.set_version(!lex_conf_bool()); return; } #line 2628 "src/parse/lex_conf.cc" +yy607: + yych = (unsigned char)*++cur; + if (yych == 'i') goto yy649; + goto yy14; yy608: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy648; + if (yych == 't') goto yy650; goto yy14; yy609: yych = (unsigned char)*++cur; - if (yych == 't') goto yy649; + if (yych == 'r') goto yy651; goto yy14; yy610: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy650; - goto yy14; + goto yy125; yy611: yych = (unsigned char)*++cur; - goto yy125; + if (yych == 'l') goto yy652; + goto yy14; yy612: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy651; + if (yych == 't') goto yy654; goto yy14; yy613: yych = (unsigned char)*++cur; - if (yych == 't') goto yy653; + if (yych == 'e') goto yy656; goto yy14; yy614: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy655; + if (yych == 'e') goto yy658; goto yy14; yy615: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy657; + if (yych == 't') goto yy660; goto yy14; yy616: - yych = (unsigned char)*++cur; - if (yych == 't') goto yy659; - goto yy14; -yy617: ++cur; -#line 155 "../src/parse/lex_conf.re" +#line 156 "../src/parse/lex_conf.re" { opts.set_fill_arg_use (lex_conf_bool()); return; } #line 2668 "src/parse/lex_conf.cc" -yy619: +yy618: ++cur; #line 85 "../src/parse/lex_conf.re" { opts.set_condDividerParam (lex_conf_string ()); return; } #line 2673 "src/parse/lex_conf.cc" +yy620: + yych = (unsigned char)*++cur; + if (yych == 'X') goto yy662; + goto yy14; yy621: yych = (unsigned char)*++cur; - if (yych == 'X') goto yy661; + if (yych == 'G') goto yy664; goto yy14; yy622: ++cur; #line 76 "../src/parse/lex_conf.re" { opts.set_yycondtype (lex_conf_string ()); return; } -#line 2682 "src/parse/lex_conf.cc" +#line 2686 "src/parse/lex_conf.cc" yy624: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy663; + if (yych == 'R') goto yy666; goto yy14; yy625: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy665; + if (yych == 'e') goto yy668; goto yy14; yy626: ++cur; -#line 154 "../src/parse/lex_conf.re" +#line 155 "../src/parse/lex_conf.re" { opts.set_fill_arg (lex_conf_string ()); return; } -#line 2695 "src/parse/lex_conf.cc" +#line 2699 "src/parse/lex_conf.cc" yy628: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy666; + if (yych == 'T') goto yy669; goto yy14; yy629: yyaccept = 19; yych = (unsigned char)*(ptr = ++cur); - if (yych == ':') goto yy667; + if (yych == ':') goto yy670; yy630: #line 90 "../src/parse/lex_conf.re" { opts.set_state_get (lex_conf_string ()); return; } -#line 2707 "src/parse/lex_conf.cc" +#line 2711 "src/parse/lex_conf.cc" yy631: ++cur; -#line 126 "../src/parse/lex_conf.re" +#line 129 "../src/parse/lex_conf.re" { opts.set_yylessthan (lex_conf_string ()); return; } -#line 2712 "src/parse/lex_conf.cc" +#line 2716 "src/parse/lex_conf.cc" yy633: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy668; + if (yych == 'T') goto yy671; goto yy14; yy634: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy669; + if (yych == 'A') goto yy672; goto yy14; yy635: + yych = (unsigned char)*++cur; + if (yych == 'T') goto yy673; + goto yy14; +yy636: yyaccept = 20; yych = (unsigned char)*(ptr = ++cur); - if (yych == ':') goto yy670; - if (yych == '@') goto yy671; -yy636: + if (yych == ':') goto yy674; + if (yych == '@') goto yy675; +yy637: #line 92 "../src/parse/lex_conf.re" { opts.set_state_set (lex_conf_string ()); return; } -#line 2729 "src/parse/lex_conf.cc" -yy637: - yych = (unsigned char)*++cur; - goto yy100; +#line 2737 "src/parse/lex_conf.cc" yy638: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy672; - goto yy14; + goto yy100; yy639: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy673; + if (yych == 'i') goto yy676; goto yy14; yy640: yych = (unsigned char)*++cur; - if (yych == 't') goto yy674; + if (yych == 'e') goto yy677; goto yy14; yy641: yych = (unsigned char)*++cur; - if (yych == 't') goto yy675; + if (yych == 't') goto yy678; goto yy14; yy642: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy676; + if (yych == 't') goto yy679; goto yy14; yy643: + yych = (unsigned char)*++cur; + if (yych == 'a') goto yy680; + goto yy14; +yy644: ++cur; #line 73 "../src/parse/lex_conf.re" { lex_conf_empty_class(); return; } -#line 2757 "src/parse/lex_conf.cc" -yy645: - yych = (unsigned char)*++cur; - if (yych == 'l') goto yy677; - goto yy14; +#line 2765 "src/parse/lex_conf.cc" yy646: yych = (unsigned char)*++cur; - if (yych == 'f') goto yy678; + if (yych == 'l') goto yy681; goto yy14; yy647: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy679; + if (yych == 'f') goto yy682; goto yy14; yy648: yych = (unsigned char)*++cur; - if (yych == 't') goto yy680; + if (yych == 'o') goto yy683; goto yy14; yy649: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy681; + if (yych == 't') goto yy684; goto yy14; yy650: yych = (unsigned char)*++cur; - goto yy121; + if (yych == 'a') goto yy685; + goto yy14; yy651: + yych = (unsigned char)*++cur; + goto yy121; +yy652: ++cur; #line 95 "../src/parse/lex_conf.re" { opts.set_yyfilllabel (lex_conf_string ()); return; } -#line 2785 "src/parse/lex_conf.cc" -yy653: +#line 2793 "src/parse/lex_conf.cc" +yy654: ++cur; #line 99 "../src/parse/lex_conf.re" { opts.set_yyaccept (lex_conf_string ()); return; } -#line 2790 "src/parse/lex_conf.cc" -yy655: +#line 2798 "src/parse/lex_conf.cc" +yy656: ++cur; #line 88 "../src/parse/lex_conf.re" { opts.set_yyctable (lex_conf_string ()); return; } -#line 2795 "src/parse/lex_conf.cc" -yy657: +#line 2803 "src/parse/lex_conf.cc" +yy658: ++cur; -#line 166 "../src/parse/lex_conf.re" +#line 167 "../src/parse/lex_conf.re" { lex_conf_string (); return; } -#line 2800 "src/parse/lex_conf.cc" -yy659: +#line 2808 "src/parse/lex_conf.cc" +yy660: ++cur; #line 113 "../src/parse/lex_conf.re" { opts.set_yytarget (lex_conf_string ()); return; } -#line 2805 "src/parse/lex_conf.cc" -yy661: +#line 2813 "src/parse/lex_conf.cc" +yy662: ++cur; #line 123 "../src/parse/lex_conf.re" { opts.set_yybackupctx (lex_conf_string ()); return; } -#line 2810 "src/parse/lex_conf.cc" -yy663: +#line 2818 "src/parse/lex_conf.cc" +yy664: + ++cur; +#line 124 "../src/parse/lex_conf.re" + { opts.set_yybackuptag (lex_conf_string ()); return; } +#line 2823 "src/parse/lex_conf.cc" +yy666: ++cur; #line 117 "../src/parse/lex_conf.re" { opts.set_yyctxmarker (lex_conf_string ()); return; } -#line 2815 "src/parse/lex_conf.cc" -yy665: - yych = (unsigned char)*++cur; - if (yych == 'd') goto yy682; - goto yy14; -yy666: - yych = (unsigned char)*++cur; - if (yych == 'I') goto yy684; - goto yy14; -yy667: - yych = (unsigned char)*++cur; - if (yych == 'n') goto yy685; - goto yy14; +#line 2828 "src/parse/lex_conf.cc" yy668: yych = (unsigned char)*++cur; - if (yych == 'X') goto yy686; + if (yych == 'd') goto yy686; goto yy14; yy669: yych = (unsigned char)*++cur; @@ -2838,332 +2839,353 @@ yy670: goto yy14; yy671: yych = (unsigned char)*++cur; - if (yych == 's') goto yy690; + if (yych == 'X') goto yy690; goto yy14; yy672: yych = (unsigned char)*++cur; - if (yych == 't') goto yy691; + if (yych == 'G') goto yy692; goto yy14; yy673: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy692; + if (yych == 'I') goto yy694; goto yy14; yy674: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy694; + if (yych == 'n') goto yy695; goto yy14; yy675: yych = (unsigned char)*++cur; - goto yy104; + if (yych == 's') goto yy696; + goto yy14; yy676: yych = (unsigned char)*++cur; - if (yych == 't') goto yy695; + if (yych == 't') goto yy697; goto yy14; yy677: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy696; + if (yych == 'd') goto yy698; goto yy14; yy678: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy697; + if (yych == 'o') goto yy700; goto yy14; yy679: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy698; - goto yy14; + goto yy104; yy680: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy699; + if (yych == 't') goto yy701; goto yy14; yy681: yych = (unsigned char)*++cur; - if (yych == 't') goto yy700; + if (yych == 'i') goto yy702; goto yy14; yy682: - ++cur; -#line 156 "../src/parse/lex_conf.re" - { opts.set_fill_naked (lex_conf_bool()); return; } -#line 2887 "src/parse/lex_conf.cc" + yych = (unsigned char)*++cur; + if (yych == 'o') goto yy703; + goto yy14; +yy683: + yych = (unsigned char)*++cur; + if (yych == 'n') goto yy704; + goto yy14; yy684: yych = (unsigned char)*++cur; - if (yych == 'O') goto yy701; + if (yych == 'i') goto yy705; goto yy14; yy685: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy702; + if (yych == 't') goto yy706; goto yy14; yy686: ++cur; -#line 125 "../src/parse/lex_conf.re" - { opts.set_yyrestorectx (lex_conf_string ()); return; } -#line 2900 "src/parse/lex_conf.cc" +#line 157 "../src/parse/lex_conf.re" + { opts.set_fill_naked (lex_conf_bool()); return; } +#line 2904 "src/parse/lex_conf.cc" yy688: yych = (unsigned char)*++cur; - if (yych == 'O') goto yy703; + if (yych == 'O') goto yy707; goto yy14; yy689: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy704; + if (yych == 'a') goto yy708; goto yy14; yy690: - yych = (unsigned char)*++cur; - if (yych == 't') goto yy705; - goto yy14; -yy691: - yych = (unsigned char)*++cur; - if (yych == 'i') goto yy706; - goto yy14; + ++cur; +#line 126 "../src/parse/lex_conf.re" + { opts.set_yyrestorectx (lex_conf_string ()); return; } +#line 2917 "src/parse/lex_conf.cc" yy692: ++cur; -#line 60 "../src/parse/lex_conf.re" - { opts.set_bCaseInverted(lex_conf_bool()); return; } -#line 2921 "src/parse/lex_conf.cc" +#line 127 "../src/parse/lex_conf.re" + { opts.set_yyrestoretag (lex_conf_string ()); return; } +#line 2922 "src/parse/lex_conf.cc" yy694: yych = (unsigned char)*++cur; - if (yych == 's') goto yy109; + if (yych == 'O') goto yy709; goto yy14; yy695: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy707; + if (yych == 'a') goto yy710; goto yy14; yy696: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy708; + if (yych == 't') goto yy711; goto yy14; yy697: yych = (unsigned char)*++cur; - goto yy112; -yy698: - yych = (unsigned char)*++cur; - if (yych == '-') goto yy709; - goto yy14; -yy699: - yych = (unsigned char)*++cur; - if (yych == 'o') goto yy710; + if (yych == 'i') goto yy712; goto yy14; +yy698: + ++cur; +#line 60 "../src/parse/lex_conf.re" + { opts.set_bCaseInverted(lex_conf_bool()); return; } +#line 2943 "src/parse/lex_conf.cc" yy700: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy711; + if (yych == 's') goto yy109; goto yy14; yy701: yych = (unsigned char)*++cur; - if (yych == 'N') goto yy712; + if (yych == 'i') goto yy713; goto yy14; yy702: yych = (unsigned char)*++cur; - if (yych == 'k') goto yy714; + if (yych == 'c') goto yy714; goto yy14; yy703: yych = (unsigned char)*++cur; - if (yych == 'N') goto yy715; - goto yy14; + goto yy112; yy704: yych = (unsigned char)*++cur; - if (yych == 'k') goto yy717; + if (yych == '-') goto yy715; goto yy14; yy705: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy718; + if (yych == 'o') goto yy716; goto yy14; yy706: yych = (unsigned char)*++cur; - if (yych == 'v') goto yy719; + if (yych == 'e') goto yy717; goto yy14; yy707: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy720; + if (yych == 'N') goto yy718; goto yy14; yy708: yych = (unsigned char)*++cur; - if (yych == 'y') goto yy721; + if (yych == 'k') goto yy720; goto yy14; yy709: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy723; + if (yych == 'N') goto yy721; goto yy14; yy710: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy724; + if (yych == 'k') goto yy723; goto yy14; yy711: yych = (unsigned char)*++cur; - goto yy108; + if (yych == 'a') goto yy724; + goto yy14; yy712: + yych = (unsigned char)*++cur; + if (yych == 'v') goto yy725; + goto yy14; +yy713: + yych = (unsigned char)*++cur; + if (yych == 'o') goto yy726; + goto yy14; +yy714: + yych = (unsigned char)*++cur; + if (yych == 'y') goto yy727; + goto yy14; +yy715: + yych = (unsigned char)*++cur; + if (yych == 'd') goto yy729; + goto yy14; +yy716: + yych = (unsigned char)*++cur; + if (yych == 'n') goto yy730; + goto yy14; +yy717: + yych = (unsigned char)*++cur; + goto yy108; +yy718: yyaccept = 21; yych = (unsigned char)*(ptr = ++cur); - if (yych == ':') goto yy725; -yy713: + if (yych == ':') goto yy731; +yy719: #line 77 "../src/parse/lex_conf.re" { opts.set_cond_get (lex_conf_string ()); return; } -#line 2999 "src/parse/lex_conf.cc" -yy714: +#line 3021 "src/parse/lex_conf.cc" +yy720: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy726; + if (yych == 'e') goto yy732; goto yy14; -yy715: +yy721: yyaccept = 22; yych = (unsigned char)*(ptr = ++cur); - if (yych == ':') goto yy727; - if (yych == '@') goto yy728; -yy716: + if (yych == ':') goto yy733; + if (yych == '@') goto yy734; +yy722: #line 79 "../src/parse/lex_conf.re" { opts.set_cond_set (lex_conf_string ()); return; } -#line 3012 "src/parse/lex_conf.cc" -yy717: +#line 3034 "src/parse/lex_conf.cc" +yy723: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy729; + if (yych == 'e') goto yy735; goto yy14; -yy718: +yy724: yych = (unsigned char)*++cur; - if (yych == 't') goto yy730; + if (yych == 't') goto yy736; goto yy14; -yy719: +yy725: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy731; + if (yych == 'e') goto yy737; goto yy14; -yy720: +yy726: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy733; + if (yych == 'n') goto yy739; goto yy14; -yy721: +yy727: ++cur; #line 71 "../src/parse/lex_conf.re" { lex_conf_encoding_policy(); return; } -#line 3033 "src/parse/lex_conf.cc" -yy723: +#line 3055 "src/parse/lex_conf.cc" +yy729: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy735; + if (yych == 'a') goto yy741; goto yy14; -yy724: +yy730: yych = (unsigned char)*++cur; - if (yych == 's') goto yy736; + if (yych == 's') goto yy742; goto yy14; -yy725: +yy731: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy737; + if (yych == 'n') goto yy743; goto yy14; -yy726: +yy732: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy738; + if (yych == 'd') goto yy744; goto yy14; -yy727: +yy733: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy740; + if (yych == 'n') goto yy746; goto yy14; -yy728: +yy734: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy741; + if (yych == 'c') goto yy747; goto yy14; -yy729: +yy735: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy742; + if (yych == 'd') goto yy748; goto yy14; -yy730: +yy736: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy744; + if (yych == 'e') goto yy750; goto yy14; -yy731: +yy737: ++cur; #line 59 "../src/parse/lex_conf.re" { opts.set_bCaseInsensitive(lex_conf_bool()); return; } -#line 3070 "src/parse/lex_conf.cc" -yy733: +#line 3092 "src/parse/lex_conf.cc" +yy739: ++cur; #line 74 "../src/parse/lex_conf.re" { lex_conf_dfa_minimization(); return; } -#line 3075 "src/parse/lex_conf.cc" -yy735: +#line 3097 "src/parse/lex_conf.cc" +yy741: yych = (unsigned char)*++cur; - if (yych == 't') goto yy746; + if (yych == 't') goto yy752; goto yy14; -yy736: +yy742: yych = (unsigned char)*++cur; goto yy102; -yy737: +yy743: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy747; + if (yych == 'a') goto yy753; goto yy14; -yy738: +yy744: ++cur; #line 91 "../src/parse/lex_conf.re" { opts.set_state_get_naked (lex_conf_bool()); return; } -#line 3091 "src/parse/lex_conf.cc" -yy740: +#line 3113 "src/parse/lex_conf.cc" +yy746: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy748; + if (yych == 'a') goto yy754; goto yy14; -yy741: +yy747: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy749; + if (yych == 'o') goto yy755; goto yy14; -yy742: +yy748: ++cur; #line 93 "../src/parse/lex_conf.re" { opts.set_state_set_naked (lex_conf_bool()); return; } -#line 3104 "src/parse/lex_conf.cc" -yy744: +#line 3126 "src/parse/lex_conf.cc" +yy750: ++cur; #line 94 "../src/parse/lex_conf.re" { opts.set_state_set_arg (lex_conf_string ()); return; } -#line 3109 "src/parse/lex_conf.cc" -yy746: +#line 3131 "src/parse/lex_conf.cc" +yy752: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy750; + if (yych == 'e') goto yy756; goto yy14; -yy747: +yy753: yych = (unsigned char)*++cur; - if (yych == 'k') goto yy752; + if (yych == 'k') goto yy758; goto yy14; -yy748: +yy754: yych = (unsigned char)*++cur; - if (yych == 'k') goto yy753; + if (yych == 'k') goto yy759; goto yy14; -yy749: +yy755: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy754; + if (yych == 'n') goto yy760; goto yy14; -yy750: +yy756: ++cur; #line 57 "../src/parse/lex_conf.re" { opts.set_bNoGenerationDate(lex_conf_bool()); return; } -#line 3130 "src/parse/lex_conf.cc" -yy752: +#line 3152 "src/parse/lex_conf.cc" +yy758: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy755; + if (yych == 'e') goto yy761; goto yy14; -yy753: +yy759: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy756; + if (yych == 'e') goto yy762; goto yy14; -yy754: +yy760: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy757; + if (yych == 'd') goto yy763; goto yy14; -yy755: +yy761: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy759; + if (yych == 'd') goto yy765; goto yy14; -yy756: +yy762: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy761; + if (yych == 'd') goto yy767; goto yy14; -yy757: +yy763: ++cur; #line 80 "../src/parse/lex_conf.re" { opts.set_cond_set_arg (lex_conf_string ()); return; } -#line 3155 "src/parse/lex_conf.cc" -yy759: +#line 3177 "src/parse/lex_conf.cc" +yy765: ++cur; #line 78 "../src/parse/lex_conf.re" { opts.set_cond_get_naked (lex_conf_bool()); return; } -#line 3160 "src/parse/lex_conf.cc" -yy761: +#line 3182 "src/parse/lex_conf.cc" +yy767: ++cur; #line 81 "../src/parse/lex_conf.re" { opts.set_cond_set_naked (lex_conf_bool()); return; } -#line 3165 "src/parse/lex_conf.cc" +#line 3187 "src/parse/lex_conf.cc" } -#line 167 "../src/parse/lex_conf.re" +#line 168 "../src/parse/lex_conf.re" } @@ -3171,102 +3193,102 @@ void Scanner::lex_conf_encoding_policy() { lex_conf_assign (); -#line 3175 "src/parse/lex_conf.cc" +#line 3197 "src/parse/lex_conf.cc" { unsigned char yych; if ((lim - cur) < 10) fill(10); yych = (unsigned char)*cur; if (yych <= 'h') { - if (yych == 'f') goto yy767; + if (yych == 'f') goto yy773; } else { - if (yych <= 'i') goto yy768; - if (yych == 's') goto yy769; + if (yych <= 'i') goto yy774; + if (yych == 's') goto yy775; } ++cur; -yy766: -#line 174 "../src/parse/lex_conf.re" +yy772: +#line 175 "../src/parse/lex_conf.re" { fatal("bad configuration value" " (expected: 'ignore', 'substitute', 'fail')"); } -#line 3191 "src/parse/lex_conf.cc" -yy767: - yych = (unsigned char)*(ptr = ++cur); - if (yych == 'a') goto yy770; - goto yy766; -yy768: - yych = (unsigned char)*(ptr = ++cur); - if (yych == 'g') goto yy772; - goto yy766; -yy769: - yych = (unsigned char)*(ptr = ++cur); - if (yych == 'u') goto yy773; - goto yy766; -yy770: - yych = (unsigned char)*++cur; - if (yych == 'i') goto yy774; -yy771: - cur = ptr; - goto yy766; -yy772: - yych = (unsigned char)*++cur; - if (yych == 'n') goto yy775; - goto yy771; +#line 3213 "src/parse/lex_conf.cc" yy773: - yych = (unsigned char)*++cur; - if (yych == 'b') goto yy776; - goto yy771; + yych = (unsigned char)*(ptr = ++cur); + if (yych == 'a') goto yy776; + goto yy772; yy774: - yych = (unsigned char)*++cur; - if (yych == 'l') goto yy777; - goto yy771; + yych = (unsigned char)*(ptr = ++cur); + if (yych == 'g') goto yy778; + goto yy772; yy775: - yych = (unsigned char)*++cur; - if (yych == 'o') goto yy779; - goto yy771; + yych = (unsigned char)*(ptr = ++cur); + if (yych == 'u') goto yy779; + goto yy772; yy776: yych = (unsigned char)*++cur; - if (yych == 's') goto yy780; - goto yy771; + if (yych == 'i') goto yy780; yy777: - ++cur; -#line 178 "../src/parse/lex_conf.re" - { opts.set_encoding_policy(Enc::POLICY_FAIL); goto end; } -#line 3234 "src/parse/lex_conf.cc" + cur = ptr; + goto yy772; +yy778: + yych = (unsigned char)*++cur; + if (yych == 'n') goto yy781; + goto yy777; yy779: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy781; - goto yy771; + if (yych == 'b') goto yy782; + goto yy777; yy780: yych = (unsigned char)*++cur; - if (yych == 't') goto yy782; - goto yy771; + if (yych == 'l') goto yy783; + goto yy777; yy781: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy783; - goto yy771; + if (yych == 'o') goto yy785; + goto yy777; yy782: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy785; - goto yy771; + if (yych == 's') goto yy786; + goto yy777; yy783: ++cur; -#line 176 "../src/parse/lex_conf.re" - { opts.set_encoding_policy(Enc::POLICY_IGNORE); goto end; } -#line 3255 "src/parse/lex_conf.cc" +#line 179 "../src/parse/lex_conf.re" + { opts.set_encoding_policy(Enc::POLICY_FAIL); goto end; } +#line 3256 "src/parse/lex_conf.cc" yy785: yych = (unsigned char)*++cur; - if (yych != 't') goto yy771; + if (yych == 'r') goto yy787; + goto yy777; +yy786: yych = (unsigned char)*++cur; - if (yych != 'u') goto yy771; + if (yych == 't') goto yy788; + goto yy777; +yy787: yych = (unsigned char)*++cur; - if (yych != 't') goto yy771; + if (yych == 'e') goto yy789; + goto yy777; +yy788: yych = (unsigned char)*++cur; - if (yych != 'e') goto yy771; + if (yych == 'i') goto yy791; + goto yy777; +yy789: ++cur; #line 177 "../src/parse/lex_conf.re" + { opts.set_encoding_policy(Enc::POLICY_IGNORE); goto end; } +#line 3277 "src/parse/lex_conf.cc" +yy791: + yych = (unsigned char)*++cur; + if (yych != 't') goto yy777; + yych = (unsigned char)*++cur; + if (yych != 'u') goto yy777; + yych = (unsigned char)*++cur; + if (yych != 't') goto yy777; + yych = (unsigned char)*++cur; + if (yych != 'e') goto yy777; + ++cur; +#line 178 "../src/parse/lex_conf.re" { opts.set_encoding_policy(Enc::POLICY_SUBSTITUTE); goto end; } -#line 3268 "src/parse/lex_conf.cc" +#line 3290 "src/parse/lex_conf.cc" } -#line 179 "../src/parse/lex_conf.re" +#line 180 "../src/parse/lex_conf.re" end: lex_conf_semicolon(); @@ -3276,77 +3298,77 @@ void Scanner::lex_conf_input() { lex_conf_assign (); -#line 3280 "src/parse/lex_conf.cc" +#line 3302 "src/parse/lex_conf.cc" { unsigned char yych; if ((lim - cur) < 7) fill(7); yych = (unsigned char)*cur; - if (yych <= 'b') goto yy793; - if (yych <= 'c') goto yy795; - if (yych <= 'd') goto yy796; -yy793: + if (yych <= 'b') goto yy799; + if (yych <= 'c') goto yy801; + if (yych <= 'd') goto yy802; +yy799: ++cur; -yy794: -#line 188 "../src/parse/lex_conf.re" +yy800: +#line 189 "../src/parse/lex_conf.re" { fatal("bad configuration value" " (expected: 'default', 'custom')"); } -#line 3294 "src/parse/lex_conf.cc" -yy795: +#line 3316 "src/parse/lex_conf.cc" +yy801: yych = (unsigned char)*(ptr = ++cur); - if (yych == 'u') goto yy797; - goto yy794; -yy796: + if (yych == 'u') goto yy803; + goto yy800; +yy802: yych = (unsigned char)*(ptr = ++cur); - if (yych == 'e') goto yy799; - goto yy794; -yy797: + if (yych == 'e') goto yy805; + goto yy800; +yy803: yych = (unsigned char)*++cur; - if (yych == 's') goto yy800; -yy798: + if (yych == 's') goto yy806; +yy804: cur = ptr; - goto yy794; -yy799: + goto yy800; +yy805: yych = (unsigned char)*++cur; - if (yych == 'f') goto yy801; - goto yy798; -yy800: + if (yych == 'f') goto yy807; + goto yy804; +yy806: yych = (unsigned char)*++cur; - if (yych == 't') goto yy802; - goto yy798; -yy801: + if (yych == 't') goto yy808; + goto yy804; +yy807: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy803; - goto yy798; -yy802: + if (yych == 'a') goto yy809; + goto yy804; +yy808: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy804; - goto yy798; -yy803: + if (yych == 'o') goto yy810; + goto yy804; +yy809: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy805; - goto yy798; -yy804: + if (yych == 'u') goto yy811; + goto yy804; +yy810: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy806; - goto yy798; -yy805: + if (yych == 'm') goto yy812; + goto yy804; +yy811: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy808; - goto yy798; -yy806: + if (yych == 'l') goto yy814; + goto yy804; +yy812: ++cur; -#line 191 "../src/parse/lex_conf.re" +#line 192 "../src/parse/lex_conf.re" { opts.set_input_api(InputAPI::CUSTOM); goto end; } -#line 3341 "src/parse/lex_conf.cc" -yy808: +#line 3363 "src/parse/lex_conf.cc" +yy814: yych = (unsigned char)*++cur; - if (yych != 't') goto yy798; + if (yych != 't') goto yy804; ++cur; -#line 190 "../src/parse/lex_conf.re" +#line 191 "../src/parse/lex_conf.re" { opts.set_input_api(InputAPI::DEFAULT); goto end; } -#line 3348 "src/parse/lex_conf.cc" +#line 3370 "src/parse/lex_conf.cc" } -#line 192 "../src/parse/lex_conf.re" +#line 193 "../src/parse/lex_conf.re" end: lex_conf_semicolon(); @@ -3356,105 +3378,105 @@ void Scanner::lex_conf_empty_class() { lex_conf_assign (); -#line 3360 "src/parse/lex_conf.cc" +#line 3382 "src/parse/lex_conf.cc" { unsigned char yych; if ((lim - cur) < 11) fill(11); yych = (unsigned char)*cur; - if (yych == 'e') goto yy815; - if (yych == 'm') goto yy816; + if (yych == 'e') goto yy821; + if (yych == 'm') goto yy822; ++cur; -yy814: -#line 201 "../src/parse/lex_conf.re" +yy820: +#line 202 "../src/parse/lex_conf.re" { fatal("bad configuration value" " (expected: 'match-empty', 'match-none', 'error')"); } -#line 3372 "src/parse/lex_conf.cc" -yy815: +#line 3394 "src/parse/lex_conf.cc" +yy821: yych = (unsigned char)*(ptr = ++cur); - if (yych == 'r') goto yy817; - goto yy814; -yy816: + if (yych == 'r') goto yy823; + goto yy820; +yy822: yych = (unsigned char)*(ptr = ++cur); - if (yych == 'a') goto yy819; - goto yy814; -yy817: + if (yych == 'a') goto yy825; + goto yy820; +yy823: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy820; -yy818: + if (yych == 'r') goto yy826; +yy824: cur = ptr; - goto yy814; -yy819: + goto yy820; +yy825: yych = (unsigned char)*++cur; - if (yych == 't') goto yy821; - goto yy818; -yy820: + if (yych == 't') goto yy827; + goto yy824; +yy826: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy822; - goto yy818; -yy821: + if (yych == 'o') goto yy828; + goto yy824; +yy827: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy823; - goto yy818; -yy822: + if (yych == 'c') goto yy829; + goto yy824; +yy828: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy824; - goto yy818; -yy823: + if (yych == 'r') goto yy830; + goto yy824; +yy829: yych = (unsigned char)*++cur; - if (yych == 'h') goto yy826; - goto yy818; -yy824: + if (yych == 'h') goto yy832; + goto yy824; +yy830: ++cur; -#line 205 "../src/parse/lex_conf.re" +#line 206 "../src/parse/lex_conf.re" { opts.set_empty_class_policy(EMPTY_CLASS_ERROR); goto end; } -#line 3411 "src/parse/lex_conf.cc" -yy826: +#line 3433 "src/parse/lex_conf.cc" +yy832: yych = (unsigned char)*++cur; - if (yych != '-') goto yy818; + if (yych != '-') goto yy824; yych = (unsigned char)*++cur; - if (yych == 'e') goto yy828; - if (yych == 'n') goto yy829; - goto yy818; -yy828: + if (yych == 'e') goto yy834; + if (yych == 'n') goto yy835; + goto yy824; +yy834: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy830; - goto yy818; -yy829: + if (yych == 'm') goto yy836; + goto yy824; +yy835: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy831; - goto yy818; -yy830: + if (yych == 'o') goto yy837; + goto yy824; +yy836: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy832; - goto yy818; -yy831: + if (yych == 'p') goto yy838; + goto yy824; +yy837: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy833; - goto yy818; -yy832: + if (yych == 'n') goto yy839; + goto yy824; +yy838: yych = (unsigned char)*++cur; - if (yych == 't') goto yy834; - goto yy818; -yy833: + if (yych == 't') goto yy840; + goto yy824; +yy839: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy835; - goto yy818; -yy834: + if (yych == 'e') goto yy841; + goto yy824; +yy840: yych = (unsigned char)*++cur; - if (yych == 'y') goto yy837; - goto yy818; -yy835: + if (yych == 'y') goto yy843; + goto yy824; +yy841: ++cur; -#line 204 "../src/parse/lex_conf.re" +#line 205 "../src/parse/lex_conf.re" { opts.set_empty_class_policy(EMPTY_CLASS_MATCH_NONE); goto end; } -#line 3451 "src/parse/lex_conf.cc" -yy837: +#line 3473 "src/parse/lex_conf.cc" +yy843: ++cur; -#line 203 "../src/parse/lex_conf.re" +#line 204 "../src/parse/lex_conf.re" { opts.set_empty_class_policy(EMPTY_CLASS_MATCH_EMPTY); goto end; } -#line 3456 "src/parse/lex_conf.cc" +#line 3478 "src/parse/lex_conf.cc" } -#line 206 "../src/parse/lex_conf.re" +#line 207 "../src/parse/lex_conf.re" end: lex_conf_semicolon(); @@ -3464,65 +3486,65 @@ void Scanner::lex_conf_dfa_minimization() { lex_conf_assign (); -#line 3468 "src/parse/lex_conf.cc" +#line 3490 "src/parse/lex_conf.cc" { unsigned char yych; if ((lim - cur) < 5) fill(5); yych = (unsigned char)*cur; - if (yych == 'm') goto yy843; - if (yych == 't') goto yy844; + if (yych == 'm') goto yy849; + if (yych == 't') goto yy850; ++cur; -yy842: -#line 215 "../src/parse/lex_conf.re" +yy848: +#line 216 "../src/parse/lex_conf.re" { fatal("bad configuration value" " (expected: 'table', 'moore')"); } -#line 3480 "src/parse/lex_conf.cc" -yy843: +#line 3502 "src/parse/lex_conf.cc" +yy849: yych = (unsigned char)*(ptr = ++cur); - if (yych == 'o') goto yy845; - goto yy842; -yy844: + if (yych == 'o') goto yy851; + goto yy848; +yy850: yych = (unsigned char)*(ptr = ++cur); - if (yych == 'a') goto yy847; - goto yy842; -yy845: + if (yych == 'a') goto yy853; + goto yy848; +yy851: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy848; -yy846: + if (yych == 'o') goto yy854; +yy852: cur = ptr; - goto yy842; -yy847: + goto yy848; +yy853: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy849; - goto yy846; -yy848: + if (yych == 'b') goto yy855; + goto yy852; +yy854: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy850; - goto yy846; -yy849: + if (yych == 'r') goto yy856; + goto yy852; +yy855: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy851; - goto yy846; -yy850: + if (yych == 'l') goto yy857; + goto yy852; +yy856: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy852; - goto yy846; -yy851: + if (yych == 'e') goto yy858; + goto yy852; +yy857: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy854; - goto yy846; -yy852: + if (yych == 'e') goto yy860; + goto yy852; +yy858: ++cur; -#line 218 "../src/parse/lex_conf.re" +#line 219 "../src/parse/lex_conf.re" { opts.set_dfa_minimization(DFA_MINIMIZATION_MOORE); goto end; } -#line 3519 "src/parse/lex_conf.cc" -yy854: +#line 3541 "src/parse/lex_conf.cc" +yy860: ++cur; -#line 217 "../src/parse/lex_conf.re" +#line 218 "../src/parse/lex_conf.re" { opts.set_dfa_minimization(DFA_MINIMIZATION_TABLE); goto end; } -#line 3524 "src/parse/lex_conf.cc" +#line 3546 "src/parse/lex_conf.cc" } -#line 219 "../src/parse/lex_conf.re" +#line 220 "../src/parse/lex_conf.re" end: lex_conf_semicolon(); @@ -3543,7 +3565,7 @@ void Scanner::lex_conf_enc(Enc::type_t enc) void Scanner::lex_conf_assign () { -#line 3547 "src/parse/lex_conf.cc" +#line 3569 "src/parse/lex_conf.cc" { unsigned char yych; static const unsigned char yybm[] = { @@ -3583,56 +3605,56 @@ void Scanner::lex_conf_assign () if ((lim - cur) < 2) fill(2); yych = (unsigned char)*cur; if (yych <= 0x1F) { - if (yych == '\t') goto yy860; + if (yych == '\t') goto yy866; } else { - if (yych <= ' ') goto yy860; - if (yych == '=') goto yy861; + if (yych <= ' ') goto yy866; + if (yych == '=') goto yy867; } ++cur; -yy859: -#line 239 "../src/parse/lex_conf.re" +yy865: +#line 240 "../src/parse/lex_conf.re" { fatal ("missing '=' in configuration"); } -#line 3596 "src/parse/lex_conf.cc" -yy860: +#line 3618 "src/parse/lex_conf.cc" +yy866: yych = (unsigned char)*(ptr = ++cur); if (yych <= 0x1F) { - if (yych == '\t') goto yy864; - goto yy859; + if (yych == '\t') goto yy870; + goto yy865; } else { - if (yych <= ' ') goto yy864; - if (yych != '=') goto yy859; + if (yych <= ' ') goto yy870; + if (yych != '=') goto yy865; } -yy861: +yy867: ++cur; if (lim <= cur) fill(1); yych = (unsigned char)*cur; if (yybm[0+yych] & 128) { - goto yy861; + goto yy867; } -#line 240 "../src/parse/lex_conf.re" +#line 241 "../src/parse/lex_conf.re" { return; } -#line 3615 "src/parse/lex_conf.cc" -yy864: +#line 3637 "src/parse/lex_conf.cc" +yy870: ++cur; if (lim <= cur) fill(1); yych = (unsigned char)*cur; if (yych <= 0x1F) { - if (yych == '\t') goto yy864; + if (yych == '\t') goto yy870; } else { - if (yych <= ' ') goto yy864; - if (yych == '=') goto yy861; + if (yych <= ' ') goto yy870; + if (yych == '=') goto yy867; } cur = ptr; - goto yy859; + goto yy865; } -#line 241 "../src/parse/lex_conf.re" +#line 242 "../src/parse/lex_conf.re" } void Scanner::lex_conf_semicolon () { -#line 3636 "src/parse/lex_conf.cc" +#line 3658 "src/parse/lex_conf.cc" { unsigned char yych; static const unsigned char yybm[] = { @@ -3672,39 +3694,39 @@ void Scanner::lex_conf_semicolon () if ((lim - cur) < 2) fill(2); yych = (unsigned char)*cur; if (yych <= 0x1F) { - if (yych == '\t') goto yy871; + if (yych == '\t') goto yy877; } else { - if (yych <= ' ') goto yy871; - if (yych == ';') goto yy872; + if (yych <= ' ') goto yy877; + if (yych == ';') goto yy878; } ++cur; -yy870: -#line 247 "../src/parse/lex_conf.re" +yy876: +#line 248 "../src/parse/lex_conf.re" { fatal ("missing ending ';' in configuration"); } -#line 3685 "src/parse/lex_conf.cc" -yy871: +#line 3707 "src/parse/lex_conf.cc" +yy877: yych = (unsigned char)*(ptr = ++cur); if (yybm[0+yych] & 128) { - goto yy874; + goto yy880; } - if (yych != ';') goto yy870; -yy872: + if (yych != ';') goto yy876; +yy878: ++cur; -#line 248 "../src/parse/lex_conf.re" +#line 249 "../src/parse/lex_conf.re" { return; } -#line 3696 "src/parse/lex_conf.cc" -yy874: +#line 3718 "src/parse/lex_conf.cc" +yy880: ++cur; if (lim <= cur) fill(1); yych = (unsigned char)*cur; if (yybm[0+yych] & 128) { - goto yy874; + goto yy880; } - if (yych == ';') goto yy872; + if (yych == ';') goto yy878; cur = ptr; - goto yy870; + goto yy876; } -#line 249 "../src/parse/lex_conf.re" +#line 250 "../src/parse/lex_conf.re" } @@ -3718,7 +3740,7 @@ int32_t Scanner::lex_conf_number () lex_conf_assign (); tok = cur; -#line 3722 "src/parse/lex_conf.cc" +#line 3744 "src/parse/lex_conf.cc" { unsigned char yych; static const unsigned char yybm[] = { @@ -3758,21 +3780,21 @@ int32_t Scanner::lex_conf_number () if ((lim - cur) < 2) fill(2); yych = (unsigned char)*cur; if (yych <= '/') { - if (yych == '-') goto yy880; + if (yych == '-') goto yy886; } else { - if (yych <= '0') goto yy881; - if (yych <= '9') goto yy883; + if (yych <= '0') goto yy887; + if (yych <= '9') goto yy889; } -yy879: -yy880: +yy885: +yy886: yych = (unsigned char)*++cur; - if (yych <= '0') goto yy879; - if (yych <= '9') goto yy883; - goto yy879; -yy881: + if (yych <= '0') goto yy885; + if (yych <= '9') goto yy889; + goto yy885; +yy887: ++cur; -yy882: -#line 263 "../src/parse/lex_conf.re" +yy888: +#line 264 "../src/parse/lex_conf.re" { int32_t n = 0; if (!s_to_i32_unsafe (tok, cur, n)) @@ -3782,17 +3804,17 @@ yy882: lex_conf_semicolon (); return n; } -#line 3786 "src/parse/lex_conf.cc" -yy883: +#line 3808 "src/parse/lex_conf.cc" +yy889: ++cur; if (lim <= cur) fill(1); yych = (unsigned char)*cur; if (yybm[0+yych] & 128) { - goto yy883; + goto yy889; } - goto yy882; + goto yy888; } -#line 272 "../src/parse/lex_conf.re" +#line 273 "../src/parse/lex_conf.re" } @@ -3802,7 +3824,7 @@ std::string Scanner::lex_conf_string () std::string s; tok = cur; -#line 3806 "src/parse/lex_conf.cc" +#line 3828 "src/parse/lex_conf.cc" { unsigned char yych; static const unsigned char yybm[] = { @@ -3843,38 +3865,38 @@ std::string Scanner::lex_conf_string () yych = (unsigned char)*cur; if (yych <= '!') { if (yych <= '\n') { - if (yych <= 0x08) goto yy888; + if (yych <= 0x08) goto yy894; } else { - if (yych != ' ') goto yy888; + if (yych != ' ') goto yy894; } } else { if (yych <= '\'') { - if (yych <= '"') goto yy891; - if (yych <= '&') goto yy888; - goto yy891; + if (yych <= '"') goto yy897; + if (yych <= '&') goto yy894; + goto yy897; } else { - if (yych != ';') goto yy888; + if (yych != ';') goto yy894; } } -#line 299 "../src/parse/lex_conf.re" +#line 300 "../src/parse/lex_conf.re" { goto end; } -#line 3862 "src/parse/lex_conf.cc" -yy888: +#line 3884 "src/parse/lex_conf.cc" +yy894: ++cur; if (lim <= cur) fill(1); yych = (unsigned char)*cur; if (yybm[0+yych] & 128) { - goto yy888; + goto yy894; } -#line 295 "../src/parse/lex_conf.re" +#line 296 "../src/parse/lex_conf.re" { s = std::string(tok, tok_len()); goto end; } -#line 3875 "src/parse/lex_conf.cc" -yy891: +#line 3897 "src/parse/lex_conf.cc" +yy897: ++cur; -#line 281 "../src/parse/lex_conf.re" +#line 282 "../src/parse/lex_conf.re" { const char quote = tok[0]; for (bool end;;) { @@ -3889,9 +3911,9 @@ yy891: } } } -#line 3893 "src/parse/lex_conf.cc" +#line 3915 "src/parse/lex_conf.cc" } -#line 300 "../src/parse/lex_conf.re" +#line 301 "../src/parse/lex_conf.re" end: lex_conf_semicolon (); diff --git a/re2c/src/codegen/emit_action.cc b/re2c/src/codegen/emit_action.cc index bc5dc4be..f25ba1c3 100644 --- a/re2c/src/codegen/emit_action.cc +++ b/re2c/src/codegen/emit_action.cc @@ -32,6 +32,7 @@ static void genYYFill(OutputFile &o, size_t need); static void genSetCondition(OutputFile &o, uint32_t ind, const std::string &cond); static void genSetState(OutputFile &o, uint32_t ind, uint32_t fillIndex); static void gen_goto(code_lines_t &code, bool &readCh, const State *to, const DFA &dfa, const tagcmd_t &tags, bool restore_fallback); +static void gen_fintags(OutputFile &o, uint32_t ind, const DFA &dfa, const Rule &rule); void emit_action(OutputFile &o, uint32_t ind, bool &readCh, const DFA &dfa, const State *s, const std::set &used_labels) @@ -214,14 +215,8 @@ void emit_rule(OutputFile &o, uint32_t ind, const DFA &dfa, size_t rule_idx) { const Rule &rule = dfa.rules[rule_idx]; const RuleInfo *info = rule.info; - const std::valarray &tags = dfa.tags; - if (rule.trail != Tag::NONE) { - o.wstring(opts->input_api.stmt_restorectx(ind, tags, tags[rule.trail], dfa.basetag)); - } - for (size_t t = rule.ltag; t < rule.htag; ++t) { - o.wstring(opts->input_api.stmt_tag_finalizer(ind, tags, tags[t])); - } + gen_fintags(o, ind, dfa, rule); if (opts->target == opt_t::SKELETON) { emit_action(*dfa.skeleton, o, ind, rule_idx); @@ -390,30 +385,124 @@ void gen_goto(code_lines_t &code, bool &readCh, const State *to, void gen_settags(code_lines_t &code, const DFA &dfa, const tagcmd_t &cmd, bool restore_fallback) { - if (cmd.empty()) return; + const bool generic = opts->input_api.type() == InputAPI::CUSTOM; + const bool + *set = dfa.tagpool[cmd.set], + *copy = dfa.tagpool[cmd.copy]; + const std::valarray &tags = dfa.tags; + const size_t ntags = tags.size(); + std::string line; - if (!dfa.basetag) { + // single tag YYCTXMARKER, backwards compatibility + if (cmd.set != ZERO_TAGS && dfa.oldstyle_ctxmarker) { assert(cmd.copy == ZERO_TAGS); - code.push_back(opts->input_api.stmt_backupctx(0)); + line = generic + ? opts->yybackupctx + " ();\n" + : opts->yyctxmarker + " = " + opts->yycursor + ";\n"; + code.push_back(line); return; } - const std::valarray &tags = dfa.tags; - const size_t ntags = tags.size(); - const bool *copy = dfa.tagpool[cmd.copy]; - for (size_t t = 0; t < ntags; ++t) { - if (copy[t]) { - const Tag &tag = tags[t]; + // copy + for (size_t i = 0; i < ntags; ++i) { + if (copy[i]) { + const Tag &tag = tags[i]; std::string x = vartag_expr(tag.name, tag.rule), y = vartag_expr_fallback(tag); if (restore_fallback) std::swap(x, y); - code.push_back(y + " = " + x + ";\n"); + line = generic + ? opts->yycopytag + " (" + y + ", " + x + ");\n" + : y + " = " + x + ";\n"; + code.push_back(line); } } - if (cmd.set != ZERO_TAGS) { - code.push_back(opts->input_api.stmt_dist(0, - dfa.tagpool[cmd.set], tags)); + + // set + if (generic) { + for (size_t i = 0; i < ntags; ++i) { + if (set[i]) { + const Tag &tag = tags[i]; + line = opts->yybackuptag + " (" + + vartag_expr(tag.name, tag.rule) + ");\n"; + code.push_back(line); + } + } + } else if (cmd.set != ZERO_TAGS) { + line = ""; + for (size_t i = 0; i < ntags; ++i) { + if (set[i]) { + const Tag &tag = tags[i]; + line += vartag_expr(tag.name, tag.rule) + " = "; + } + } + line += opts->yycursor + ";\n"; + code.push_back(line); + } +} + +void gen_fintags(OutputFile &o, uint32_t ind, const DFA &dfa, const Rule &rule) +{ + const bool generic = opts->input_api.type() == InputAPI::CUSTOM; + const std::valarray &tags = dfa.tags; + + // trailing context + if (rule.trail != Tag::NONE) { + const Tag &tag = tags[rule.trail]; + o.wind(ind); + if (tag.type == Tag::FIX) { + assert(!generic); + o.wstring(opts->yycursor).ws(" -= ").wu64(tag.fix.dist); + } else if (dfa.oldstyle_ctxmarker) { + if (generic) { + o.wstring(opts->yyrestorectx).ws(" ()"); + } else { + o.wstring(opts->yycursor).ws(" = ").wstring(opts->yyctxmarker); + } + } else { + const Tag &orig = tags[tag.var.orig]; + const std::string expr = vartag_expr(orig.name, orig.rule); + if (generic) { + o.wstring(opts->yyrestoretag).ws(" (").wstring(expr).ws(")"); + } else { + o.wstring(opts->yycursor).ws(" = ").wstring(expr); + } + } + o.ws(";\n"); + } + + // named tags + for (size_t t = rule.ltag; t < rule.htag; ++t) { + const Tag &tag = tags[t]; + + // fixed + if (tag.type == Tag::FIX) { + assert(!generic); + o.wind(ind).wstring(*tag.name).ws(" = "); + if (tag.fix.base == Tag::NONE) { + // optimize '(YYCTXMARKER + ((YYCURSOR - YCTXMARKER) - tag))' + // to '(YYCURSOR - tag)' + o.wstring(opts->yycursor).ws(" - ").wu64(tag.fix.dist); + } else { + const Tag &orig = tags[tags[tag.fix.base].var.orig]; + o.wstring(vartag_expr(orig.name, orig.rule)) + .ws(" - ").wu64(tag.fix.dist); + } + o.ws(";\n"); + continue; + } + + // variable + const Tag &orig = tags[tag.var.orig]; + const std::string expr = vartag_expr(orig.name, orig.rule); + o.wind(ind); + if (generic) { + o.wstring(opts->yycopytag).ws(" (").wstring(*tag.name) + .ws(", ").wstring(expr).ws(")"); + } else { + o.wstring(*tag.name).ws(" = ").wstring(expr); + } + o.ws(";\n"); } } diff --git a/re2c/src/codegen/emit_dfa.cc b/re2c/src/codegen/emit_dfa.cc index 4c9656cd..811b9733 100644 --- a/re2c/src/codegen/emit_dfa.cc +++ b/re2c/src/codegen/emit_dfa.cc @@ -144,7 +144,7 @@ void DFA::emit(Output & output, uint32_t& ind, bool isLastCond, bool& bPrologBra OutputBlock &ob = o.block(); std::set tagnames, tagvars; - if (basetag) { + if (!oldstyle_ctxmarker) { const size_t ntags = tags.size(); for (size_t i = 0; i < ntags; ++i) { const Tag &t = tags[i]; @@ -190,11 +190,11 @@ void DFA::emit(Output & output, uint32_t& ind, bool isLastCond, bool& bPrologBra if (output.skeletons.insert (name).second) { emit_data(*skeleton); - emit_start(*skeleton, o, max_fill, need_backup, need_backupctx, - need_accept, basetag, tagnames, tagvars); + emit_start(*skeleton, o, max_fill, need_backup, + need_accept, oldstyle_ctxmarker, tagnames, tagvars); uint32_t i = 2; emit_body (o, i, used_labels, initial_label); - emit_end(*skeleton, o, need_backup, need_backupctx); + emit_end(*skeleton, o, need_backup, oldstyle_ctxmarker); } } else if (opts->target == opt_t::DOT) { emit_dot(o, isLastCond, ob.types); @@ -264,9 +264,6 @@ void DFA::emit(Output & output, uint32_t& ind, bool isLastCond, bool& bPrologBra } o.wstring(opts->condPrefix).wstring(cond).ws(":\n"); } - if (basetag) { - o.wstring(opts->input_api.stmt_backupctx(ind)); - } if (opts->cFlag && opts->bFlag && BitMap::first) { o.wind(ind++).ws("{\n"); diff --git a/re2c/src/codegen/input_api.cc b/re2c/src/codegen/input_api.cc index 0135efd1..8e5ec681 100644 --- a/re2c/src/codegen/input_api.cc +++ b/re2c/src/codegen/input_api.cc @@ -80,79 +80,6 @@ std::string InputAPI::stmt_backup (uint32_t ind) const return indent (ind) + s + ";\n"; } -std::string InputAPI::stmt_backupctx (uint32_t ind) const -{ - std::string s; - switch (type_) - { - case DEFAULT: - s = opts->yyctxmarker + " = " + opts->yycursor; - break; - case CUSTOM: - s = opts->yybackupctx + " ()"; - break; - } - return indent(ind) + s + ";\n"; -} - -std::string InputAPI::expr_dist () const -{ - std::string s; - switch (type_) { - case DEFAULT: - s = "(" + opts->yycursor + " - " + opts->yyctxmarker + ")"; - break; - case CUSTOM: - s = opts->tags_yydist + "()"; - break; - } - return s; -} - -std::string InputAPI::stmt_dist (uint32_t ind, const bool *mask, - const std::valarray &tags) const -{ - std::string s = indent(ind); - for (size_t i = 0; i < tags.size(); ++i) { - if (mask[i]) { - const Tag &t = tags[tags[i].var.orig]; - s += vartag_expr(t.name, t.rule) + " = "; - } - } - return s + expr_dist() + ";\n"; -} - -std::string InputAPI::stmt_tag_finalizer(uint32_t ind, - const std::valarray &tags, const Tag &tag) const -{ - // fixed tags - if (tag.type == Tag::FIX) { - assert(type_ == DEFAULT); - const std::string dist = to_string(tag.fix.dist); - std::string expr; - if (tag.fix.base == Tag::NONE) { - // optimize '(YYCTXMARKER + ((YYCURSOR - YCTXMARKER) - tag))' - // to '(YYCURSOR - tag)' - expr = opts->yycursor + " - " + dist; - } else { - const Tag &orig = tags[tags[tag.fix.base].var.orig]; - expr = opts->yyctxmarker + " + (" - + vartag_expr(orig.name, orig.rule) - + " - " + dist + ")"; - } - return indent(ind) + *tag.name + " = " + expr + ";\n"; - } - - // variable tags - const Tag &orig = tags[tag.var.orig]; - const std::string - expr = vartag_expr(orig.name, orig.rule), - stmt = type_ == DEFAULT - ? *tag.name + " = " + opts->yyctxmarker + " + " + expr - : opts->tags_yytag + "(" + *tag.name + ", " + expr + ")"; - return indent(ind) + stmt + ";\n"; -} - std::string InputAPI::stmt_restore (uint32_t ind) const { std::string s; @@ -168,29 +95,6 @@ std::string InputAPI::stmt_restore (uint32_t ind) const return indent (ind) + s + ";\n"; } -std::string InputAPI::stmt_restorectx(uint32_t ind, - const std::valarray &tags, const Tag &tag, bool basetag) const -{ - std::string s; - - if (tag.type == Tag::FIX) { - assert(type_ == DEFAULT); - s = opts->yycursor + " -= " + to_string(tag.fix.dist); - } else if (basetag) { - const Tag &orig = tags[tag.var.orig]; - const std::string expr = vartag_expr(orig.name, orig.rule); - s = (type_ == DEFAULT) - ? opts->yycursor + " = " + opts->yyctxmarker + " + " + expr - : opts->yyrestorectx + " (" + expr + ")"; - } else { - s = (type_ == DEFAULT) - ? opts->yycursor + " = " + opts->yyctxmarker - : opts->yyrestorectx + " ()"; - } - - return indent(ind) + s + ";\n"; -} - std::string InputAPI::stmt_skip_peek (uint32_t ind) const { return type_ == DEFAULT diff --git a/re2c/src/codegen/input_api.h b/re2c/src/codegen/input_api.h index 2fdadbf6..adce72d2 100644 --- a/re2c/src/codegen/input_api.h +++ b/re2c/src/codegen/input_api.h @@ -31,15 +31,7 @@ public: std::string stmt_peek (uint32_t ind) const; std::string stmt_skip (uint32_t ind) const; std::string stmt_backup (uint32_t ind) const; - std::string stmt_backupctx (uint32_t ind) const; - std::string expr_dist () const; - std::string stmt_dist (uint32_t ind, const bool *tagmask, - const std::valarray &tags) const; - std::string stmt_tag_finalizer(uint32_t ind, - const std::valarray &tags, const Tag &tag) const; std::string stmt_restore (uint32_t ind) const; - std::string stmt_restorectx(uint32_t ind, - const std::valarray &tags, const Tag &tag, bool basetag) const; std::string stmt_skip_peek (uint32_t ind) const; std::string stmt_skip_backup (uint32_t ind) const; std::string stmt_backup_peek (uint32_t ind) const; diff --git a/re2c/src/codegen/output.h b/re2c/src/codegen/output.h index 914ef327..70e301ad 100644 --- a/re2c/src/codegen/output.h +++ b/re2c/src/codegen/output.h @@ -22,7 +22,9 @@ struct ConfTags { std::string format; std::string separator; - ConfTags(): format("long @@;"), separator("") {} + + ConfTags(const std::string &f, const std::string &s) + : format(f), separator(s) {} }; struct OutputFragment diff --git a/re2c/src/conf/opt.cc b/re2c/src/conf/opt.cc index e05008eb..758031bf 100644 --- a/re2c/src/conf/opt.cc +++ b/re2c/src/conf/opt.cc @@ -76,8 +76,6 @@ void opt_t::fix () state_set = Opt::baseopt.state_set; state_set_arg = Opt::baseopt.state_set_arg; state_set_naked = Opt::baseopt.state_set_naked; - tags_yytag = Opt::baseopt.tags_yytag; - tags_yydist = Opt::baseopt.tags_yydist; tags_prefix = Opt::baseopt.tags_prefix; tags_expression = Opt::baseopt.tags_expression; yyfilllabel = Opt::baseopt.yyfilllabel; @@ -96,8 +94,11 @@ void opt_t::fix () yyskip = Opt::baseopt.yyskip; yybackup = Opt::baseopt.yybackup; yybackupctx = Opt::baseopt.yybackupctx; + yybackuptag = Opt::baseopt.yybackuptag; yyrestore = Opt::baseopt.yyrestore; yyrestorectx = Opt::baseopt.yyrestorectx; + yyrestoretag = Opt::baseopt.yyrestoretag; + yycopytag = Opt::baseopt.yycopytag; yylessthan = Opt::baseopt.yylessthan; dFlag = Opt::baseopt.dFlag; yydebug = Opt::baseopt.yydebug; @@ -156,8 +157,6 @@ void opt_t::fix () } if (!tags) { - tags_yytag = Opt::baseopt.tags_yytag; - tags_yydist = Opt::baseopt.tags_yydist; tags_prefix = Opt::baseopt.tags_prefix; tags_expression = Opt::baseopt.tags_expression; } @@ -184,8 +183,11 @@ void opt_t::fix () yyskip = Opt::baseopt.yyskip; yybackup = Opt::baseopt.yybackup; yybackupctx = Opt::baseopt.yybackupctx; + yybackuptag = Opt::baseopt.yybackuptag; yyrestore = Opt::baseopt.yyrestore; yyrestorectx = Opt::baseopt.yyrestorectx; + yyrestoretag = Opt::baseopt.yyrestoretag; + yycopytag = Opt::baseopt.yycopytag; yylessthan = Opt::baseopt.yylessthan; } if (!dFlag) @@ -305,6 +307,7 @@ void Opt::reset_mapCodeName () useropt->state_set = Opt::baseopt.state_set; useropt->yybackup = Opt::baseopt.yybackup; useropt->yybackupctx = Opt::baseopt.yybackupctx; + useropt->yybackuptag = Opt::baseopt.yybackuptag; useropt->yycondtype = Opt::baseopt.yycondtype; useropt->yyctxmarker = Opt::baseopt.yyctxmarker; useropt->yyctype = Opt::baseopt.yyctype; @@ -316,9 +319,9 @@ void Opt::reset_mapCodeName () useropt->yypeek = Opt::baseopt.yypeek; useropt->yyrestore = Opt::baseopt.yyrestore; useropt->yyrestorectx = Opt::baseopt.yyrestorectx; + useropt->yyrestoretag = Opt::baseopt.yyrestoretag; + useropt->yycopytag = Opt::baseopt.yycopytag; useropt->yyskip = Opt::baseopt.yyskip; - useropt->tags_yytag = Opt::baseopt.tags_yytag; - useropt->tags_yydist = Opt::baseopt.tags_yydist; useropt->yyfilllabel = Opt::baseopt.yyfilllabel; useropt->yynext = Opt::baseopt.yynext; useropt->yyaccept = Opt::baseopt.yyaccept; diff --git a/re2c/src/conf/opt.h b/re2c/src/conf/opt.h index ceeaebf7..ccaee292 100644 --- a/re2c/src/conf/opt.h +++ b/re2c/src/conf/opt.h @@ -58,8 +58,6 @@ namespace re2c OPT (bool, bUseStateNext, false) \ /* tags */ \ OPT (bool, tags, false) \ - OPT (std::string, tags_yytag, "YYTAG") \ - OPT (std::string, tags_yydist, "YYDIST") \ OPT (std::string, tags_prefix, "yyt") \ OPT (std::string, tags_expression, "@@") \ /* reuse */ \ @@ -87,8 +85,11 @@ namespace re2c OPT (std::string, yyskip, "YYSKIP") \ OPT (std::string, yybackup, "YYBACKUP") \ OPT (std::string, yybackupctx, "YYBACKUPCTX") \ + OPT (std::string, yybackuptag, "YYBACKUPTAG") \ OPT (std::string, yyrestore, "YYRESTORE") \ OPT (std::string, yyrestorectx, "YYRESTORECTX") \ + OPT (std::string, yyrestoretag, "YYRESTORETAG") \ + OPT (std::string, yycopytag, "YYCOPYTAG") \ OPT (std::string, yylessthan, "YYLESSTHAN") \ /* #line directives */ \ OPT (bool, iFlag, false) \ diff --git a/re2c/src/ir/adfa/adfa.cc b/re2c/src/ir/adfa/adfa.cc index ce31cb5e..aac23a96 100644 --- a/re2c/src/ir/adfa/adfa.cc +++ b/re2c/src/ir/adfa/adfa.cc @@ -23,7 +23,6 @@ DFA::DFA , const std::string &n , const std::string &c , uint32_t l - , size_t used_tags ) : accepts () , skeleton (skel) @@ -38,29 +37,10 @@ DFA::DFA , tags(dfa.tags) , tagpool(dfa.tagpool) , copy_tags(dfa.copy_tags) - - // statistics , max_fill (0) , need_backup (false) - - // determine if 'YYCTXMARKER' or 'YYBACKUPCTX'/'YYRESTORECTX' pair is used - , need_backupctx (used_tags > 0 || opts->tags) , need_accept (false) - - // Tags (except trailing contexts) imply the existence of base marker - // that points at the beginning of lexeme. First, it is a feature - // of re2c API. Second, it simplifies implementation (otherwise - // it would be hard to mix generic API and fixed-length contexts). - // - // The only case without base marker is when: - // - tags are disabled, only trailing contexts are allowed - // - trailing contexts don't overlap (one marker is enough - // for all of them) - // If generic API is used, fixed-length contexts are forbidden, - // which may cause additional overlaps. - , basetag (used_tags > 1 - || dfa.copy_tags != ZERO_TAGS - || opts->tags) + , oldstyle_ctxmarker (false) { const size_t nstates = dfa.states.size(); const size_t nchars = dfa.nchars; diff --git a/re2c/src/ir/adfa/adfa.h b/re2c/src/ir/adfa/adfa.h index 45247fda..3a0f18ca 100644 --- a/re2c/src/ir/adfa/adfa.h +++ b/re2c/src/ir/adfa/adfa.h @@ -72,9 +72,8 @@ struct DFA size_t copy_tags; size_t max_fill; bool need_backup; - bool need_backupctx; bool need_accept; - bool basetag; + bool oldstyle_ctxmarker; DFA ( const dfa_t &dfa , const std::vector &fill @@ -83,12 +82,11 @@ struct DFA , const std::string &n , const std::string &c , uint32_t l - , size_t used_tags ); ~DFA (); void reorder(); void prepare(); - void calc_stats(); + void calc_stats(uint32_t line, size_t used_tags); void emit (Output &, uint32_t &, bool, bool &); private: diff --git a/re2c/src/ir/adfa/prepare.cc b/re2c/src/ir/adfa/prepare.cc index 9b8a29fd..61eb5872 100644 --- a/re2c/src/ir/adfa/prepare.cc +++ b/re2c/src/ir/adfa/prepare.cc @@ -4,6 +4,7 @@ #include "src/codegen/bitmap.h" #include "src/codegen/go.h" +#include "src/conf/msg.h" #include "src/globals.h" #include "src/ir/adfa/action.h" #include "src/ir/adfa/adfa.h" @@ -189,7 +190,7 @@ void DFA::prepare () } } -void DFA::calc_stats () +void DFA::calc_stats(uint32_t line, size_t used_tags) { // calculate 'YYMAXFILL' max_fill = 0; @@ -206,6 +207,26 @@ void DFA::calc_stats () // determine if 'yyaccept' variable is used need_accept = accepts.size () > 1; + + // determine if 'YYCTXMARKER' or 'YYBACKUPCTX'/'YYRESTORECTX' pair is used + // If tags are not enabled explicitely and trailing contexts + // don't overlap (single variable is enough for all of them), then + // re2c should use old-style YYCTXMARKER for backwards compatibility. + // Note that with generic API fixed-length contexts are forbidden, + // which may cause additional overlaps. + oldstyle_ctxmarker = used_tags == 1 + && copy_tags == ZERO_TAGS + && !opts->tags; + + // error if tags are not enabled, but we need them + if (!opts->tags + && (used_tags > 1 || copy_tags != ZERO_TAGS)) { + error("line %u: overlapping trailing contexts need " + "multiple context markers, use '-t, --tags' " + "option and '/*!tags:re2c ... */' directive", + line); + exit(1); + } } void DFA::hoist_tags() diff --git a/re2c/src/ir/compile.cc b/re2c/src/ir/compile.cc index 0879fcc7..6d17b1d3 100644 --- a/re2c/src/ir/compile.cc +++ b/re2c/src/ir/compile.cc @@ -78,8 +78,7 @@ static smart_ptr compile_rules( fillpoints(dfa, fill); // ADFA stands for 'DFA with actions' - DFA *adfa = new DFA(dfa, fill, skeleton, cs, - name, cond, line, used_tags); + DFA *adfa = new DFA(dfa, fill, skeleton, cs, name, cond, line); // see note [reordering DFA states] adfa->reorder(); @@ -88,7 +87,7 @@ static smart_ptr compile_rules( adfa->prepare(); // finally gather overall DFA statistics - adfa->calc_stats(); + adfa->calc_stats(line, used_tags); // accumulate global statistics from this particular DFA output.max_fill = std::max (output.max_fill, adfa->max_fill); diff --git a/re2c/src/ir/skeleton/generate_code.cc b/re2c/src/ir/skeleton/generate_code.cc index 71e42bb1..87482722 100644 --- a/re2c/src/ir/skeleton/generate_code.cc +++ b/re2c/src/ir/skeleton/generate_code.cc @@ -5,6 +5,7 @@ #include #include "src/codegen/bitmap.h" +#include "src/codegen/indent.h" #include "src/codegen/output.h" #include "src/conf/opt.h" #include "src/globals.h" @@ -93,7 +94,7 @@ void emit_prolog(OutputFile &o) } void emit_start(const Skeleton &skel, OutputFile &o, size_t maxfill, - bool backup, bool backupctx, bool accept, bool basetag, + bool backup, bool accept, bool oldstyle_ctxmarker, const std::set &tagnames, const std::set &tagvars) { @@ -117,15 +118,14 @@ void emit_start(const Skeleton &skel, OutputFile &o, size_t maxfill, o.ws("\n#define YYBACKUP() marker = cursor"); o.ws("\n#define YYRESTORE() cursor = marker"); } - if (backupctx) { + if (oldstyle_ctxmarker) { o.ws("\n#define YYBACKUPCTX() ctxmarker = cursor"); - if(basetag) { - o.ws("\n#define YYRESTORECTX(dist) cursor = ctxmarker + dist"); - o.ws("\n#define YYDIST() (cursor - ctxmarker)"); - o.ws("\n#define YYTAG(tag, dist) tag = ctxmarker + dist"); - } else { - o.ws("\n#define YYRESTORECTX() cursor = ctxmarker"); - } + o.ws("\n#define YYRESTORECTX() cursor = ctxmarker"); + } + if (opts->tags) { + o.ws("\n#define YYBACKUPTAG(tag) tag = cursor"); + o.ws("\n#define YYRESTORETAG(tag) cursor = tag"); + o.ws("\n#define YYCOPYTAG(tag1, tag2) tag1 = tag2"); } o.ws("\n#define YYLESSTHAN(n) (limit - cursor) < n"); o.ws("\n#define YYFILL(n) { break; }"); @@ -230,19 +230,19 @@ void emit_start(const Skeleton &skel, OutputFile &o, size_t maxfill, if (backup) { o.ws("\n").wind(2).ws("const YYCTYPE *marker = NULL;"); } - if (backupctx) { + if (oldstyle_ctxmarker) { o.ws("\n").wind(2).ws("const YYCTYPE *ctxmarker = NULL;"); } o.ws("\n").wind(2).ws("YYCTYPE yych;"); if (accept) { o.ws("\n").wind(2).ws("unsigned int yyaccept = 0;"); } - if (!tagnames.empty()) { - o.ws("\n"); - output_tags(o.stream(), ConfTags(), tagnames); - o.ws("\n").wstring(opts->input_api.stmt_backupctx(2)); - } + // autogenerated tag variables + ConfTags conf("\n" + indent(2) + "const YYCTYPE *@@;", ""); + output_tags(o.stream(), conf, tagnames); + + // user-defined tag variables std::set::const_iterator var1 = tagvars.begin(), var2 = tagvars.end(); @@ -261,7 +261,7 @@ void emit_start(const Skeleton &skel, OutputFile &o, size_t maxfill, o.ws("\n"); } -void emit_end(const Skeleton &skel, OutputFile &o, bool backup, bool backupctx) +void emit_end(const Skeleton &skel, OutputFile &o, bool backup, bool oldstyle_ctxmarker) { const std::string &name = skel.name; @@ -293,10 +293,15 @@ void emit_end(const Skeleton &skel, OutputFile &o, bool backup, bool backupctx) o.ws("\n#undef YYBACKUP"); o.ws("\n#undef YYRESTORE"); } - if (backupctx) { + if (oldstyle_ctxmarker) { o.ws("\n#undef YYBACKUPCTX"); o.ws("\n#undef YYRESTORECTX"); } + if (opts->tags) { + o.ws("\n#undef YYBACKUPTAG"); + o.ws("\n#undef YYRESTORETAG"); + o.ws("\n#undef YYCOPYTAG"); + } o.ws("\n#undef YYLESSTHAN"); o.ws("\n#undef YYFILL"); o.ws("\n"); diff --git a/re2c/src/ir/skeleton/skeleton.h b/re2c/src/ir/skeleton/skeleton.h index df5f3c56..1ac6da18 100644 --- a/re2c/src/ir/skeleton/skeleton.h +++ b/re2c/src/ir/skeleton/skeleton.h @@ -88,10 +88,10 @@ void fprint_default_path(FILE *f, const Skeleton &skel, const path_t &p); void emit_data(const Skeleton &skel); void emit_prolog(OutputFile & o); void emit_start(const Skeleton &skel, OutputFile &o, size_t maxfill, - bool backup, bool backupctx, bool accept, bool basetag, + bool backup, bool accept, bool oldstyle_ctxmarker, const std::set &tagnames, const std::set &tagvars); -void emit_end(const Skeleton &skel, OutputFile &o, bool backup, bool backupctx); +void emit_end(const Skeleton &skel, OutputFile &o, bool backup, bool oldstyle_ctxmarker); void emit_epilog(OutputFile &o, const std::set &names); void emit_action(const Skeleton &skel, OutputFile &o, uint32_t ind, size_t rule); diff --git a/re2c/src/parse/lex.re b/re2c/src/parse/lex.re index c9dbf400..58e29e1e 100644 --- a/re2c/src/parse/lex.re +++ b/re2c/src/parse/lex.re @@ -196,19 +196,19 @@ void Scanner::lex_end_of_comment() void Scanner::lex_tags() { - ConfTags conf; + std::string fmt, sep; for (;;) {/*!re2c * { fatal("unrecognized configuration"); } - "format" { conf.format = lex_conf_string(); continue; } - "separator" { conf.separator = lex_conf_string(); continue; } + "format" { fmt = lex_conf_string(); continue; } + "separator" { sep = lex_conf_string(); continue; } space+ { continue; } eol { ++cline; continue; } eoc { if (opts->target == opt_t::CODE) { out.wdelay_tags(opts->topIndent, - new ConfTags(conf)); + new ConfTags(fmt, sep)); } tok = pos = cur; return; diff --git a/re2c/src/parse/lex_conf.re b/re2c/src/parse/lex_conf.re index a66ab469..20182227 100644 --- a/re2c/src/parse/lex_conf.re +++ b/re2c/src/parse/lex_conf.re @@ -121,11 +121,12 @@ void Scanner::lex_conf () "define:YYSKIP" { opts.set_yyskip (lex_conf_string ()); return; } "define:YYBACKUP" { opts.set_yybackup (lex_conf_string ()); return; } "define:YYBACKUPCTX" { opts.set_yybackupctx (lex_conf_string ()); return; } + "define:YYBACKUPTAG" { opts.set_yybackuptag (lex_conf_string ()); return; } "define:YYRESTORE" { opts.set_yyrestore (lex_conf_string ()); return; } "define:YYRESTORECTX" { opts.set_yyrestorectx (lex_conf_string ()); return; } + "define:YYRESTORETAG" { opts.set_yyrestoretag (lex_conf_string ()); return; } + "define:YYCOPYTAG" { opts.set_yycopytag (lex_conf_string ()); return; } "define:YYLESSTHAN" { opts.set_yylessthan (lex_conf_string ()); return; } - "define:YYTAG" { opts.set_tags_yytag (lex_conf_string ()); return; } - "define:YYDIST" { opts.set_tags_yydist (lex_conf_string ()); return; } "tags:prefix" { opts.set_tags_prefix (lex_conf_string ()); return; } "tags:expression" { opts.set_tags_expression(lex_conf_string ()); return; } diff --git a/re2c/test/tags/bug121_fix_multiple.i--input(custom).c b/re2c/test/tags/bug121_fix_multiple.i--input(custom).c new file mode 100644 index 00000000..2d0ddf8e --- /dev/null +++ b/re2c/test/tags/bug121_fix_multiple.i--input(custom).c @@ -0,0 +1 @@ +re2c: error: line 10: overlapping trailing contexts need multiple context markers, use '-t, --tags' option and '/*!tags:re2c ... */' directive diff --git a/re2c/test/tags/bug121_fix_multiple.i--input(custom).re b/re2c/test/tags/bug121_fix_multiple.i--input(custom).re new file mode 100644 index 00000000..cc0a50be --- /dev/null +++ b/re2c/test/tags/bug121_fix_multiple.i--input(custom).re @@ -0,0 +1,10 @@ +// overlapping trailing contexts of fixed length: +// because of generic API we cannot take advantage of +// fixed length and have to use multiple tags +// (deduplication doesn't help) + +/*!re2c + "aba" / "ba" { 0 } + "a" / "ba" { 1 } + * { d } +*/ diff --git a/re2c/test/tags/bug121_fix_multiple.i--tags--input(custom).c b/re2c/test/tags/bug121_fix_multiple.i--tags--input(custom).c new file mode 100644 index 00000000..6f2d86c9 --- /dev/null +++ b/re2c/test/tags/bug121_fix_multiple.i--tags--input(custom).c @@ -0,0 +1,72 @@ +/* Generated by re2c */ +// overlapping trailing contexts of fixed length: +// because of generic API we cannot take advantage of +// fixed length and have to use multiple tags +// (deduplication doesn't help) + + +{ + YYCTYPE yych; + unsigned int yyaccept = 0; + if (YYLESSTHAN (5)) YYFILL(5); + yych = YYPEEK (); + switch (yych) { + case 'a': goto yy4; + default: goto yy2; + } +yy2: + YYSKIP (); +yy3: + { d } +yy4: + yyaccept = 0; + YYSKIP (); + YYBACKUP (); + yych = YYPEEK (); + switch (yych) { + case 'b': + YYBACKUPTAG (yyt1); + goto yy5; + default: goto yy3; + } +yy5: + YYSKIP (); + yych = YYPEEK (); + switch (yych) { + case 'a': goto yy7; + default: goto yy6; + } +yy6: + YYRESTORE (); + if (yyaccept == 0) { + goto yy3; + } else { + goto yy8; + } +yy7: + yyaccept = 1; + YYSKIP (); + YYBACKUP (); + yych = YYPEEK (); + switch (yych) { + case 'b': + YYBACKUPTAG (yyt0); + goto yy9; + default: goto yy8; + } +yy8: + YYRESTORETAG (yyt1); + { 1 } +yy9: + YYSKIP (); + yych = YYPEEK (); + switch (yych) { + case 'a': goto yy10; + default: goto yy6; + } +yy10: + YYSKIP (); + YYRESTORETAG (yyt0); + { 0 } +} + diff --git a/re2c/test/tags/bug121_fix_multiple.i--tags--input(custom).re b/re2c/test/tags/bug121_fix_multiple.i--tags--input(custom).re new file mode 100644 index 00000000..cc0a50be --- /dev/null +++ b/re2c/test/tags/bug121_fix_multiple.i--tags--input(custom).re @@ -0,0 +1,10 @@ +// overlapping trailing contexts of fixed length: +// because of generic API we cannot take advantage of +// fixed length and have to use multiple tags +// (deduplication doesn't help) + +/*!re2c + "aba" / "ba" { 0 } + "a" / "ba" { 1 } + * { d } +*/ diff --git a/re2c/test/tags/bug121_fix.i.c b/re2c/test/tags/bug121_fix_none.i.c similarity index 100% rename from re2c/test/tags/bug121_fix.i.c rename to re2c/test/tags/bug121_fix_none.i.c diff --git a/re2c/test/tags/bug121_fix.i.re b/re2c/test/tags/bug121_fix_none.i.re similarity index 100% rename from re2c/test/tags/bug121_fix.i.re rename to re2c/test/tags/bug121_fix_none.i.re diff --git a/re2c/test/tags/bug121_fix.i--input(custom).c b/re2c/test/tags/bug121_fix_single.i--input(custom).c similarity index 100% rename from re2c/test/tags/bug121_fix.i--input(custom).c rename to re2c/test/tags/bug121_fix_single.i--input(custom).c diff --git a/re2c/test/tags/bug121_fix.i--input(custom).re b/re2c/test/tags/bug121_fix_single.i--input(custom).re similarity index 100% rename from re2c/test/tags/bug121_fix.i--input(custom).re rename to re2c/test/tags/bug121_fix_single.i--input(custom).re diff --git a/re2c/test/tags/bug121_var_multiple.i--input(custom).c b/re2c/test/tags/bug121_var_multiple.i--input(custom).c index 58ae1af8..555e5584 100644 --- a/re2c/test/tags/bug121_var_multiple.i--input(custom).c +++ b/re2c/test/tags/bug121_var_multiple.i--input(custom).c @@ -1,69 +1 @@ -/* Generated by re2c */ -// overlapping trailing contexts of variable length: -// we need multiple tags and we cannot deduplicate them - - -{ - YYCTYPE yych; - YYBACKUPCTX (); - if (YYLESSTHAN (4)) YYFILL(4); - yych = YYPEEK (); - switch (yych) { - case 'a': goto yy4; - default: goto yy2; - } -yy2: - YYSKIP (); - { d } -yy4: - YYSKIP (); - yyt1 = YYDIST(); - switch ((yych = YYPEEK ())) { - case 'b': goto yy6; - default: goto yy5; - } -yy5: - YYRESTORECTX (yyt1); - { 1 } -yy6: - YYSKIP (); - YYBACKUP (); - yych = YYPEEK (); - switch (yych) { - case 'c': - yyt0 = YYDIST(); - goto yy9; - default: goto yy8; - } -yy7: - YYSKIP (); - if (YYLESSTHAN (1)) YYFILL(1); - yych = YYPEEK (); -yy8: - switch (yych) { - case 'b': goto yy7; - default: goto yy5; - } -yy9: - YYSKIP (); - yych = YYPEEK (); - switch (yych) { - case 'c': goto yy11; - default: goto yy10; - } -yy10: - YYRESTORE (); - goto yy5; -yy11: - YYSKIP (); - if (YYLESSTHAN (1)) YYFILL(1); - yych = YYPEEK (); - switch (yych) { - case 'c': goto yy11; - default: goto yy13; - } -yy13: - YYRESTORECTX (yyt0); - { 0 } -} - +re2c: error: line 8: overlapping trailing contexts need multiple context markers, use '-t, --tags' option and '/*!tags:re2c ... */' directive diff --git a/re2c/test/tags/bug121_var_multiple.i--tags--input(custom).c b/re2c/test/tags/bug121_var_multiple.i--tags--input(custom).c new file mode 100644 index 00000000..8a0d2335 --- /dev/null +++ b/re2c/test/tags/bug121_var_multiple.i--tags--input(custom).c @@ -0,0 +1,68 @@ +/* Generated by re2c */ +// overlapping trailing contexts of variable length: +// we need multiple tags and we cannot deduplicate them + + +{ + YYCTYPE yych; + if (YYLESSTHAN (4)) YYFILL(4); + yych = YYPEEK (); + switch (yych) { + case 'a': goto yy4; + default: goto yy2; + } +yy2: + YYSKIP (); + { d } +yy4: + YYSKIP (); + YYBACKUPTAG (yyt1); + switch ((yych = YYPEEK ())) { + case 'b': goto yy6; + default: goto yy5; + } +yy5: + YYRESTORETAG (yyt1); + { 1 } +yy6: + YYSKIP (); + YYBACKUP (); + yych = YYPEEK (); + switch (yych) { + case 'c': + YYBACKUPTAG (yyt0); + goto yy9; + default: goto yy8; + } +yy7: + YYSKIP (); + if (YYLESSTHAN (1)) YYFILL(1); + yych = YYPEEK (); +yy8: + switch (yych) { + case 'b': goto yy7; + default: goto yy5; + } +yy9: + YYSKIP (); + yych = YYPEEK (); + switch (yych) { + case 'c': goto yy11; + default: goto yy10; + } +yy10: + YYRESTORE (); + goto yy5; +yy11: + YYSKIP (); + if (YYLESSTHAN (1)) YYFILL(1); + yych = YYPEEK (); + switch (yych) { + case 'c': goto yy11; + default: goto yy13; + } +yy13: + YYRESTORETAG (yyt0); + { 0 } +} + diff --git a/re2c/test/tags/bug121_var_multiple.i--tags--input(custom).re b/re2c/test/tags/bug121_var_multiple.i--tags--input(custom).re new file mode 100644 index 00000000..b661c89e --- /dev/null +++ b/re2c/test/tags/bug121_var_multiple.i--tags--input(custom).re @@ -0,0 +1,8 @@ +// overlapping trailing contexts of variable length: +// we need multiple tags and we cannot deduplicate them + +/*!re2c + "ab" / "c"{2,} { 0 } + "a" / "b"* { 1 } + * { d } +*/ diff --git a/re2c/test/tags/bug121_var_multiple.i--tags.c b/re2c/test/tags/bug121_var_multiple.i--tags.c new file mode 100644 index 00000000..5309365a --- /dev/null +++ b/re2c/test/tags/bug121_var_multiple.i--tags.c @@ -0,0 +1,65 @@ +/* Generated by re2c */ +// overlapping trailing contexts of variable length: +// we need multiple tags and we cannot deduplicate them + + +{ + YYCTYPE yych; + if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy4; + default: goto yy2; + } +yy2: + ++YYCURSOR; + { d } +yy4: + ++YYCURSOR; + yyt1 = YYCURSOR; + switch ((yych = *YYCURSOR)) { + case 'b': goto yy6; + default: goto yy5; + } +yy5: + YYCURSOR = yyt1; + { 1 } +yy6: + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 'c': + yyt0 = YYCURSOR; + goto yy9; + default: goto yy8; + } +yy7: + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; +yy8: + switch (yych) { + case 'b': goto yy7; + default: goto yy5; + } +yy9: + yych = *++YYCURSOR; + switch (yych) { + case 'c': goto yy11; + default: goto yy10; + } +yy10: + YYCURSOR = YYMARKER; + goto yy5; +yy11: + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch (yych) { + case 'c': goto yy11; + default: goto yy13; + } +yy13: + YYCURSOR = yyt0; + { 0 } +} + diff --git a/re2c/test/tags/bug121_var_multiple.i--tags.re b/re2c/test/tags/bug121_var_multiple.i--tags.re new file mode 100644 index 00000000..b661c89e --- /dev/null +++ b/re2c/test/tags/bug121_var_multiple.i--tags.re @@ -0,0 +1,8 @@ +// overlapping trailing contexts of variable length: +// we need multiple tags and we cannot deduplicate them + +/*!re2c + "ab" / "c"{2,} { 0 } + "a" / "b"* { 1 } + * { d } +*/ diff --git a/re2c/test/tags/bug121_var_multiple.i.c b/re2c/test/tags/bug121_var_multiple.i.c index 1307dfa1..555e5584 100644 --- a/re2c/test/tags/bug121_var_multiple.i.c +++ b/re2c/test/tags/bug121_var_multiple.i.c @@ -1,66 +1 @@ -/* Generated by re2c */ -// overlapping trailing contexts of variable length: -// we need multiple tags and we cannot deduplicate them - - -{ - YYCTYPE yych; - YYCTXMARKER = YYCURSOR; - if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); - yych = *YYCURSOR; - switch (yych) { - case 'a': goto yy4; - default: goto yy2; - } -yy2: - ++YYCURSOR; - { d } -yy4: - ++YYCURSOR; - yyt1 = (YYCURSOR - YYCTXMARKER); - switch ((yych = *YYCURSOR)) { - case 'b': goto yy6; - default: goto yy5; - } -yy5: - YYCURSOR = YYCTXMARKER + yyt1; - { 1 } -yy6: - yych = *(YYMARKER = ++YYCURSOR); - switch (yych) { - case 'c': - yyt0 = (YYCURSOR - YYCTXMARKER); - goto yy9; - default: goto yy8; - } -yy7: - ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy8: - switch (yych) { - case 'b': goto yy7; - default: goto yy5; - } -yy9: - yych = *++YYCURSOR; - switch (yych) { - case 'c': goto yy11; - default: goto yy10; - } -yy10: - YYCURSOR = YYMARKER; - goto yy5; -yy11: - ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - switch (yych) { - case 'c': goto yy11; - default: goto yy13; - } -yy13: - YYCURSOR = YYCTXMARKER + yyt0; - { 0 } -} - +re2c: error: line 8: overlapping trailing contexts need multiple context markers, use '-t, --tags' option and '/*!tags:re2c ... */' directive diff --git a/re2c/test/tags/conf1.i--tags--input(custom).c b/re2c/test/tags/conf1.i--tags--input(custom).c index 2a53d913..933e7cc5 100644 --- a/re2c/test/tags/conf1.i--tags--input(custom).c +++ b/re2c/test/tags/conf1.i--tags--input(custom).c @@ -13,20 +13,18 @@ static inline unsigned parse_oct(const char *s, const char *e) static void lex(const char *s) { -#define YYPEEK() *s -#define YYSKIP() ++s -#define YYBACKUP() marker = s -#define YYRESTORE() s = marker -#define YYBACKUPCTX() basectx = s -#define YYRESTORECTX(dist) s = basectx + dist -#define ZZ_CTX(tag, dist) tag = basectx + dist -#define ZZ_DIST() (s - basectx) - const char *marker, *basectx, *p1, *p2, *p3; - long zz_0p1;long zz_0p2;long zz_0p3; +#define YYPEEK() *s +#define YYSKIP() ++s +#define YYBACKUP() marker = s +#define YYRESTORE() s = marker +#define ZZBT(t) t = s +#define ZZRT(t) s = t +#define ZZCT(t1, t2) t1 = t2 + const char *marker, *p0, *p1, *p2, *p3; + const char *zz_0p0;const char *zz_0p1;const char *zz_0p2;const char *zz_0p3; { char yych; - YYBACKUPCTX (); yych = YYPEEK (); switch (yych) { case '0': @@ -38,7 +36,9 @@ static void lex(const char *s) case '6': case '7': case '8': - case '9': goto yy4; + case '9': + ZZBT (zz_0p0); + goto yy4; default: goto yy2; } yy2: @@ -51,7 +51,7 @@ yy4: yych = YYPEEK (); switch (yych) { case '.': - zz_0p1 = ZZ_DIST(); + ZZBT (zz_0p1); goto yy5; case '0': case '1': @@ -89,7 +89,7 @@ yy7: yych = YYPEEK (); switch (yych) { case '.': - zz_0p1 = ZZ_DIST(); + ZZBT (zz_0p1); goto yy5; case '0': case '1': @@ -108,7 +108,7 @@ yy8: yych = YYPEEK (); switch (yych) { case '.': - zz_0p2 = ZZ_DIST(); + ZZBT (zz_0p2); goto yy10; case '0': case '1': @@ -127,7 +127,7 @@ yy9: yych = YYPEEK (); switch (yych) { case '.': - zz_0p1 = ZZ_DIST(); + ZZBT (zz_0p1); goto yy5; default: goto yy6; } @@ -152,7 +152,7 @@ yy11: yych = YYPEEK (); switch (yych) { case '.': - zz_0p2 = ZZ_DIST(); + ZZBT (zz_0p2); goto yy10; case '0': case '1': @@ -171,7 +171,7 @@ yy12: yych = YYPEEK (); switch (yych) { case '.': - zz_0p3 = ZZ_DIST(); + ZZBT (zz_0p3); goto yy14; case '0': case '1': @@ -190,7 +190,7 @@ yy13: yych = YYPEEK (); switch (yych) { case '.': - zz_0p2 = ZZ_DIST(); + ZZBT (zz_0p2); goto yy10; default: goto yy6; } @@ -215,7 +215,7 @@ yy15: yych = YYPEEK (); switch (yych) { case '.': - zz_0p3 = ZZ_DIST(); + ZZBT (zz_0p3); goto yy14; case '0': case '1': @@ -245,12 +245,13 @@ yy16: default: goto yy17; } yy17: - ZZ_CTX(p3, zz_0p3); - ZZ_CTX(p2, zz_0p2); - ZZ_CTX(p1, zz_0p1); + ZZCT (p3, zz_0p3); + ZZCT (p2, zz_0p2); + ZZCT (p1, zz_0p1); + ZZCT (p0, zz_0p0); { printf("%u.%u.%u.%u\n", - parse_oct(basectx, p1), + parse_oct(p0, p1), parse_oct(p1 + 1, p2), parse_oct(p2 + 1, p3), parse_oct(p3 + 1, s)); @@ -261,7 +262,7 @@ yy18: yych = YYPEEK (); switch (yych) { case '.': - zz_0p3 = ZZ_DIST(); + ZZBT (zz_0p3); goto yy14; default: goto yy6; } diff --git a/re2c/test/tags/conf1.i--tags--input(custom).re b/re2c/test/tags/conf1.i--tags--input(custom).re index 4f58a3c8..a12a7f75 100644 --- a/re2c/test/tags/conf1.i--tags--input(custom).re +++ b/re2c/test/tags/conf1.i--tags--input(custom).re @@ -12,16 +12,15 @@ static inline unsigned parse_oct(const char *s, const char *e) static void lex(const char *s) { -#define YYPEEK() *s -#define YYSKIP() ++s -#define YYBACKUP() marker = s -#define YYRESTORE() s = marker -#define YYBACKUPCTX() basectx = s -#define YYRESTORECTX(dist) s = basectx + dist -#define ZZ_CTX(tag, dist) tag = basectx + dist -#define ZZ_DIST() (s - basectx) - const char *marker, *basectx, *p1, *p2, *p3; - /*!tags:re2c*/ +#define YYPEEK() *s +#define YYSKIP() ++s +#define YYBACKUP() marker = s +#define YYRESTORE() s = marker +#define ZZBT(t) t = s +#define ZZRT(t) s = t +#define ZZCT(t1, t2) t1 = t2 + const char *marker, *p0, *p1, *p2, *p3; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; @@ -31,20 +30,22 @@ static void lex(const char *s) * { printf("error\n"); return; } + @p0 oct @p1 d oct @p2 d oct @p3 d oct { printf("%u.%u.%u.%u\n", - parse_oct(basectx, p1), + parse_oct(p0, p1), parse_oct(p1 + 1, p2), parse_oct(p2 + 1, p3), parse_oct(p3 + 1, s)); return; } - re2c:define:YYTAG = "ZZ_CTX"; - re2c:define:YYDIST = "ZZ_DIST"; + re2c:define:YYBACKUPTAG = "ZZBT"; + re2c:define:YYRESTORETAG = "ZZRT"; + re2c:define:YYCOPYTAG = "ZZCT"; re2c:tags:prefix = "zz_"; */ } diff --git a/re2c/test/tags/conf1.i--tags.c b/re2c/test/tags/conf1.i--tags.c index 3c7eb852..48df0941 100644 --- a/re2c/test/tags/conf1.i--tags.c +++ b/re2c/test/tags/conf1.i--tags.c @@ -13,12 +13,11 @@ static inline unsigned parse_oct(const char *s, const char *e) static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3; - long zz_0p1;long zz_0p2;long zz_0p3; + const char *YYMARKER, *p0, *p1, *p2, *p3; + const char *zz_0p0;const char *zz_0p1;const char *zz_0p2;const char *zz_0p3; { char yych; - YYCTXMARKER = YYCURSOR; yych = *YYCURSOR; switch (yych) { case '0': @@ -30,7 +29,9 @@ static void lex(const char *YYCURSOR) case '6': case '7': case '8': - case '9': goto yy4; + case '9': + zz_0p0 = YYCURSOR; + goto yy4; default: goto yy2; } yy2: @@ -41,7 +42,7 @@ yy4: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '.': - zz_0p1 = (YYCURSOR - YYCTXMARKER); + zz_0p1 = YYCURSOR; goto yy5; case '0': case '1': @@ -77,7 +78,7 @@ yy7: yych = *++YYCURSOR; switch (yych) { case '.': - zz_0p1 = (YYCURSOR - YYCTXMARKER); + zz_0p1 = YYCURSOR; goto yy5; case '0': case '1': @@ -95,7 +96,7 @@ yy8: yych = *++YYCURSOR; switch (yych) { case '.': - zz_0p2 = (YYCURSOR - YYCTXMARKER); + zz_0p2 = YYCURSOR; goto yy10; case '0': case '1': @@ -113,7 +114,7 @@ yy9: yych = *++YYCURSOR; switch (yych) { case '.': - zz_0p1 = (YYCURSOR - YYCTXMARKER); + zz_0p1 = YYCURSOR; goto yy5; default: goto yy6; } @@ -136,7 +137,7 @@ yy11: yych = *++YYCURSOR; switch (yych) { case '.': - zz_0p2 = (YYCURSOR - YYCTXMARKER); + zz_0p2 = YYCURSOR; goto yy10; case '0': case '1': @@ -154,7 +155,7 @@ yy12: yych = *++YYCURSOR; switch (yych) { case '.': - zz_0p3 = (YYCURSOR - YYCTXMARKER); + zz_0p3 = YYCURSOR; goto yy14; case '0': case '1': @@ -172,7 +173,7 @@ yy13: yych = *++YYCURSOR; switch (yych) { case '.': - zz_0p2 = (YYCURSOR - YYCTXMARKER); + zz_0p2 = YYCURSOR; goto yy10; default: goto yy6; } @@ -195,7 +196,7 @@ yy15: yych = *++YYCURSOR; switch (yych) { case '.': - zz_0p3 = (YYCURSOR - YYCTXMARKER); + zz_0p3 = YYCURSOR; goto yy14; case '0': case '1': @@ -225,12 +226,13 @@ yy16: default: goto yy17; } yy17: - p3 = YYCTXMARKER + zz_0p3; - p2 = YYCTXMARKER + zz_0p2; - p1 = YYCTXMARKER + zz_0p1; + p3 = zz_0p3; + p2 = zz_0p2; + p1 = zz_0p1; + p0 = zz_0p0; { printf("%u.%u.%u.%u\n", - parse_oct(YYCTXMARKER, p1), + parse_oct(p0, p1), parse_oct(p1 + 1, p2), parse_oct(p2 + 1, p3), parse_oct(p3 + 1, YYCURSOR)); @@ -240,7 +242,7 @@ yy18: yych = *++YYCURSOR; switch (yych) { case '.': - zz_0p3 = (YYCURSOR - YYCTXMARKER); + zz_0p3 = YYCURSOR; goto yy14; default: goto yy6; } diff --git a/re2c/test/tags/conf1.i--tags.re b/re2c/test/tags/conf1.i--tags.re index a33553a8..dbe44f3c 100644 --- a/re2c/test/tags/conf1.i--tags.re +++ b/re2c/test/tags/conf1.i--tags.re @@ -12,8 +12,8 @@ static inline unsigned parse_oct(const char *s, const char *e) static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3; - /*!tags:re2c*/ + const char *YYMARKER, *p0, *p1, *p2, *p3; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; @@ -23,12 +23,13 @@ static void lex(const char *YYCURSOR) * { printf("error\n"); return; } + @p0 oct @p1 d oct @p2 d oct @p3 d oct { printf("%u.%u.%u.%u\n", - parse_oct(YYCTXMARKER, p1), + parse_oct(p0, p1), parse_oct(p1 + 1, p2), parse_oct(p2 + 1, p3), parse_oct(p3 + 1, YYCURSOR)); diff --git a/re2c/test/tags/conf2.i--tags--input(custom).c b/re2c/test/tags/conf2.i--tags--input(custom).c index 0725e30b..dd33a2f2 100644 --- a/re2c/test/tags/conf2.i--tags--input(custom).c +++ b/re2c/test/tags/conf2.i--tags--input(custom).c @@ -23,7 +23,7 @@ struct input_t { char *cur; char *mar; char *tok; - long yyt1p1;long yyt1p2;long yyt1p3; + char *yyt1p1;char *yyt1p2;char *yyt1p3; bool eof; input_t() @@ -51,6 +51,7 @@ struct input_t { cur -= free; mar -= free; tok -= free; + yyt1p1 -= free;yyt1p2 -= free;yyt1p3 -= free; lim += fread(lim, 1, free, stdin); if (lim < buf + SIZE) { eof = true; @@ -67,10 +68,9 @@ static bool lex(input_t & in) #define YYSKIP() ++in.cur #define YYBACKUP() in.mar = in.cur #define YYRESTORE() in.cur = in.mar -#define YYBACKUPCTX() in.tok = in.cur -#define YYRESTORECTX(dist) in.cur = in.tok + dist -#define YYTAG(tag, dist) tag = in.tok + dist -#define YYDIST() in.cur - in.tok +#define YYBACKUPTAG(t) t = in.cur +#define YYRESTORETAG(t) in.cur = t +#define YYCOPYTAG(t1, t2) t1 = t2 #define YYLESSTHAN(n) in.lim - in.cur < n loop: in.tok = in.cur; @@ -78,7 +78,6 @@ loop: { char yych; - YYBACKUPCTX (); if (YYLESSTHAN (16)) if (!in.fill(16)) return false; yych = YYPEEK (); switch (yych) { @@ -108,7 +107,7 @@ yy6: yych = YYPEEK (); switch (yych) { case '.': - in.yyt1p1 = YYDIST(); + YYBACKUPTAG (in.yyt1p1); goto yy7; case '0': case '1': @@ -146,7 +145,7 @@ yy9: yych = YYPEEK (); switch (yych) { case '.': - in.yyt1p1 = YYDIST(); + YYBACKUPTAG (in.yyt1p1); goto yy7; case '0': case '1': @@ -165,7 +164,7 @@ yy10: yych = YYPEEK (); switch (yych) { case '.': - in.yyt1p2 = YYDIST(); + YYBACKUPTAG (in.yyt1p2); goto yy12; case '0': case '1': @@ -184,7 +183,7 @@ yy11: yych = YYPEEK (); switch (yych) { case '.': - in.yyt1p1 = YYDIST(); + YYBACKUPTAG (in.yyt1p1); goto yy7; default: goto yy8; } @@ -209,7 +208,7 @@ yy13: yych = YYPEEK (); switch (yych) { case '.': - in.yyt1p2 = YYDIST(); + YYBACKUPTAG (in.yyt1p2); goto yy12; case '0': case '1': @@ -228,7 +227,7 @@ yy14: yych = YYPEEK (); switch (yych) { case '.': - in.yyt1p3 = YYDIST(); + YYBACKUPTAG (in.yyt1p3); goto yy16; case '0': case '1': @@ -247,7 +246,7 @@ yy15: yych = YYPEEK (); switch (yych) { case '.': - in.yyt1p2 = YYDIST(); + YYBACKUPTAG (in.yyt1p2); goto yy12; default: goto yy8; } @@ -272,7 +271,7 @@ yy17: yych = YYPEEK (); switch (yych) { case '.': - in.yyt1p3 = YYDIST(); + YYBACKUPTAG (in.yyt1p3); goto yy16; case '0': case '1': @@ -308,15 +307,15 @@ yy19: yych = YYPEEK (); switch (yych) { case '.': - in.yyt1p3 = YYDIST(); + YYBACKUPTAG (in.yyt1p3); goto yy16; default: goto yy8; } yy20: YYSKIP (); - YYTAG(p3, in.yyt1p3); - YYTAG(p2, in.yyt1p2); - YYTAG(p1, in.yyt1p1); + YYCOPYTAG (p3, in.yyt1p3); + YYCOPYTAG (p2, in.yyt1p2); + YYCOPYTAG (p1, in.yyt1p1); { printf("> %u.%u.%u.%u\n", parse_oct(in.tok, p1), diff --git a/re2c/test/tags/conf2.i--tags--input(custom).re b/re2c/test/tags/conf2.i--tags--input(custom).re index 17dcc3c2..759610b2 100644 --- a/re2c/test/tags/conf2.i--tags--input(custom).re +++ b/re2c/test/tags/conf2.i--tags--input(custom).re @@ -21,7 +21,7 @@ struct input_t { char *cur; char *mar; char *tok; - /*!tags:re2c*/ + /*!tags:re2c format = "char *@@;"; */ bool eof; input_t() @@ -49,6 +49,7 @@ struct input_t { cur -= free; mar -= free; tok -= free; + /*!tags:re2c format = "@@ -= free;"; */ lim += fread(lim, 1, free, stdin); if (lim < buf + SIZE) { eof = true; @@ -65,10 +66,9 @@ static bool lex(input_t & in) #define YYSKIP() ++in.cur #define YYBACKUP() in.mar = in.cur #define YYRESTORE() in.cur = in.mar -#define YYBACKUPCTX() in.tok = in.cur -#define YYRESTORECTX(dist) in.cur = in.tok + dist -#define YYTAG(tag, dist) tag = in.tok + dist -#define YYDIST() in.cur - in.tok +#define YYBACKUPTAG(t) t = in.cur +#define YYRESTORETAG(t) in.cur = t +#define YYCOPYTAG(t1, t2) t1 = t2 #define YYLESSTHAN(n) in.lim - in.cur < n loop: in.tok = in.cur; diff --git a/re2c/test/tags/conf2.i--tags.c b/re2c/test/tags/conf2.i--tags.c index 6f64700e..4f8d199b 100644 --- a/re2c/test/tags/conf2.i--tags.c +++ b/re2c/test/tags/conf2.i--tags.c @@ -23,7 +23,7 @@ struct input_t { char *cur; char *mar; char *tok; - long yyt1p1;long yyt1p2;long yyt1p3; + char *yyt1p1;char *yyt1p2;char *yyt1p3; bool eof; input_t() @@ -51,6 +51,7 @@ struct input_t { cur -= free; mar -= free; tok -= free; + yyt1p1 -= free;yyt1p2 -= free;yyt1p3 -= free; lim += fread(lim, 1, free, stdin); if (lim < buf + SIZE) { eof = true; @@ -69,7 +70,6 @@ loop: { char yych; - in.tok = in.cur; if ((in.lim - in.cur) < 16) if (!in.fill(16)) return false; yych = *in.cur; switch (yych) { @@ -97,7 +97,7 @@ yy6: yych = *(in.mar = ++in.cur); switch (yych) { case '.': - in.yyt1p1 = (in.cur - in.tok); + in.yyt1p1 = in.cur; goto yy7; case '0': case '1': @@ -133,7 +133,7 @@ yy9: yych = *++in.cur; switch (yych) { case '.': - in.yyt1p1 = (in.cur - in.tok); + in.yyt1p1 = in.cur; goto yy7; case '0': case '1': @@ -151,7 +151,7 @@ yy10: yych = *++in.cur; switch (yych) { case '.': - in.yyt1p2 = (in.cur - in.tok); + in.yyt1p2 = in.cur; goto yy12; case '0': case '1': @@ -169,7 +169,7 @@ yy11: yych = *++in.cur; switch (yych) { case '.': - in.yyt1p1 = (in.cur - in.tok); + in.yyt1p1 = in.cur; goto yy7; default: goto yy8; } @@ -192,7 +192,7 @@ yy13: yych = *++in.cur; switch (yych) { case '.': - in.yyt1p2 = (in.cur - in.tok); + in.yyt1p2 = in.cur; goto yy12; case '0': case '1': @@ -210,7 +210,7 @@ yy14: yych = *++in.cur; switch (yych) { case '.': - in.yyt1p3 = (in.cur - in.tok); + in.yyt1p3 = in.cur; goto yy16; case '0': case '1': @@ -228,7 +228,7 @@ yy15: yych = *++in.cur; switch (yych) { case '.': - in.yyt1p2 = (in.cur - in.tok); + in.yyt1p2 = in.cur; goto yy12; default: goto yy8; } @@ -251,7 +251,7 @@ yy17: yych = *++in.cur; switch (yych) { case '.': - in.yyt1p3 = (in.cur - in.tok); + in.yyt1p3 = in.cur; goto yy16; case '0': case '1': @@ -285,15 +285,15 @@ yy19: yych = *++in.cur; switch (yych) { case '.': - in.yyt1p3 = (in.cur - in.tok); + in.yyt1p3 = in.cur; goto yy16; default: goto yy8; } yy20: ++in.cur; - p3 = in.tok + in.yyt1p3; - p2 = in.tok + in.yyt1p2; - p1 = in.tok + in.yyt1p1; + p3 = in.yyt1p3; + p2 = in.yyt1p2; + p1 = in.yyt1p1; { printf("> %u.%u.%u.%u\n", parse_oct(in.tok, p1), diff --git a/re2c/test/tags/conf2.i--tags.re b/re2c/test/tags/conf2.i--tags.re index 5ae2ecac..78cd325b 100644 --- a/re2c/test/tags/conf2.i--tags.re +++ b/re2c/test/tags/conf2.i--tags.re @@ -21,7 +21,7 @@ struct input_t { char *cur; char *mar; char *tok; - /*!tags:re2c*/ + /*!tags:re2c format = "char *@@;"; */ bool eof; input_t() @@ -49,6 +49,7 @@ struct input_t { cur -= free; mar -= free; tok -= free; + /*!tags:re2c format = "@@ -= free;"; */ lim += fread(lim, 1, free, stdin); if (lim < buf + SIZE) { eof = true; @@ -69,7 +70,6 @@ loop: re2c:define:YYCURSOR = in.cur; re2c:define:YYLIMIT = in.lim; re2c:define:YYMARKER = in.mar; - re2c:define:YYCTXMARKER = in.tok; re2c:define:YYFILL = "if (!in.fill(@@)) return false;"; re2c:define:YYFILL:naked = 1; re2c:tags:expression = "in.@@"; diff --git a/re2c/test/tags/conf3.i--tags--input(custom).c b/re2c/test/tags/conf3.i--tags--input(custom).c index bc4c4f4f..f017f3bf 100644 --- a/re2c/test/tags/conf3.i--tags--input(custom).c +++ b/re2c/test/tags/conf3.i--tags--input(custom).c @@ -11,13 +11,13 @@ static inline unsigned parse_oct(const char *s, const char *e) return oct; } -struct contexts_t +struct tags_t { - long zz_0p1;long zz_0p2;long zz_0p3; + const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3; - contexts_t(); - void push(long arg_zz_0p1,long arg_zz_0p2,long arg_zz_0p3); - void pop(long &arg_zz_0p1,long &arg_zz_0p2,long &arg_zz_0p3); + tags_t(); + void push(const char *arg_yyt0p0,const char *arg_yyt0p1,const char *arg_yyt0p2,const char *arg_yyt0p3); + void pop(const char *&arg_yyt0p0,const char *&arg_yyt0p1,const char *&arg_yyt0p2,const char *&arg_yyt0p3); }; static void lex(const char *s) @@ -26,16 +26,14 @@ static void lex(const char *s) #define YYSKIP() ++s #define YYBACKUP() marker = s #define YYRESTORE() s = marker -#define YYBACKUPCTX() basectx = s -#define YYRESTORECTX(dist) s = basectx + dist -#define ZZ_CTX(tag, dist) tag = basectx + dist -#define ZZ_DIST() (s - basectx) - const char *marker, *basectx, *p1, *p2, *p3; - contexts_t ctxs; +#define YYBACKUPTAG(t) t = s +#define YYRESTORETAG(t) s = t +#define YYCOPYTAG(t1, t2) t1 = t2 + const char *marker, *p0, *p1, *p2, *p3; + tags_t tags; { char yych; - YYBACKUPCTX (); yych = YYPEEK (); switch (yych) { case '0': @@ -47,7 +45,9 @@ static void lex(const char *s) case '6': case '7': case '8': - case '9': goto yy4; + case '9': + YYBACKUPTAG (tags.yyt0p0); + goto yy4; default: goto yy2; } yy2: @@ -60,7 +60,7 @@ yy4: yych = YYPEEK (); switch (yych) { case '.': - ctxs.zz_0p1 = ZZ_DIST(); + YYBACKUPTAG (tags.yyt0p1); goto yy5; case '0': case '1': @@ -98,7 +98,7 @@ yy7: yych = YYPEEK (); switch (yych) { case '.': - ctxs.zz_0p1 = ZZ_DIST(); + YYBACKUPTAG (tags.yyt0p1); goto yy5; case '0': case '1': @@ -117,7 +117,7 @@ yy8: yych = YYPEEK (); switch (yych) { case '.': - ctxs.zz_0p2 = ZZ_DIST(); + YYBACKUPTAG (tags.yyt0p2); goto yy10; case '0': case '1': @@ -136,7 +136,7 @@ yy9: yych = YYPEEK (); switch (yych) { case '.': - ctxs.zz_0p1 = ZZ_DIST(); + YYBACKUPTAG (tags.yyt0p1); goto yy5; default: goto yy6; } @@ -161,7 +161,7 @@ yy11: yych = YYPEEK (); switch (yych) { case '.': - ctxs.zz_0p2 = ZZ_DIST(); + YYBACKUPTAG (tags.yyt0p2); goto yy10; case '0': case '1': @@ -180,7 +180,7 @@ yy12: yych = YYPEEK (); switch (yych) { case '.': - ctxs.zz_0p3 = ZZ_DIST(); + YYBACKUPTAG (tags.yyt0p3); goto yy14; case '0': case '1': @@ -199,7 +199,7 @@ yy13: yych = YYPEEK (); switch (yych) { case '.': - ctxs.zz_0p2 = ZZ_DIST(); + YYBACKUPTAG (tags.yyt0p2); goto yy10; default: goto yy6; } @@ -224,7 +224,7 @@ yy15: yych = YYPEEK (); switch (yych) { case '.': - ctxs.zz_0p3 = ZZ_DIST(); + YYBACKUPTAG (tags.yyt0p3); goto yy14; case '0': case '1': @@ -254,12 +254,13 @@ yy16: default: goto yy17; } yy17: - ZZ_CTX(p3, ctxs.zz_0p3); - ZZ_CTX(p2, ctxs.zz_0p2); - ZZ_CTX(p1, ctxs.zz_0p1); + YYCOPYTAG (p3, tags.yyt0p3); + YYCOPYTAG (p2, tags.yyt0p2); + YYCOPYTAG (p1, tags.yyt0p1); + YYCOPYTAG (p0, tags.yyt0p0); { printf("%u.%u.%u.%u\n", - parse_oct(basectx, p1), + parse_oct(p0, p1), parse_oct(p1 + 1, p2), parse_oct(p2 + 1, p3), parse_oct(p3 + 1, s)); @@ -270,7 +271,7 @@ yy18: yych = YYPEEK (); switch (yych) { case '.': - ctxs.zz_0p3 = ZZ_DIST(); + YYBACKUPTAG (tags.yyt0p3); goto yy14; default: goto yy6; } @@ -298,16 +299,16 @@ yy20: } -contexts_t::contexts_t(): zz_0p1(0),zz_0p2(0),zz_0p3(0) {} +tags_t::tags_t(): yyt0p0(0),yyt0p1(0),yyt0p2(0),yyt0p3(0) {} -void contexts_t::push(long arg_zz_0p1,long arg_zz_0p2,long arg_zz_0p3) +void tags_t::push(const char *arg_yyt0p0,const char *arg_yyt0p1,const char *arg_yyt0p2,const char *arg_yyt0p3) { - zz_0p1 = arg_zz_0p1;zz_0p2 = arg_zz_0p2;zz_0p3 = arg_zz_0p3; + yyt0p0 = arg_yyt0p0;yyt0p1 = arg_yyt0p1;yyt0p2 = arg_yyt0p2;yyt0p3 = arg_yyt0p3; } -void contexts_t::pop(long &arg_zz_0p1,long &arg_zz_0p2,long &arg_zz_0p3) +void tags_t::pop(const char *&arg_yyt0p0,const char *&arg_yyt0p1,const char *&arg_yyt0p2,const char *&arg_yyt0p3) { - arg_zz_0p1 = zz_0p1;arg_zz_0p2 = zz_0p2;arg_zz_0p3 = zz_0p3; + arg_yyt0p0 = yyt0p0;arg_yyt0p1 = yyt0p1;arg_yyt0p2 = yyt0p2;arg_yyt0p3 = yyt0p3; } int main(int argc, char **argv) diff --git a/re2c/test/tags/conf3.i--tags--input(custom).re b/re2c/test/tags/conf3.i--tags--input(custom).re index 564f2dfb..41c8efe3 100644 --- a/re2c/test/tags/conf3.i--tags--input(custom).re +++ b/re2c/test/tags/conf3.i--tags--input(custom).re @@ -10,16 +10,16 @@ static inline unsigned parse_oct(const char *s, const char *e) return oct; } -struct contexts_t +struct tags_t { - /*!tags:re2c format = "long @@;"; */ + /*!tags:re2c format = "const char *@@;"; */ - contexts_t(); + tags_t(); void push(/*!tags:re2c - format = "long arg_@@"; + format = "const char *arg_@@"; separator = ","; */); void pop(/*!tags:re2c - format = "long &arg_@@"; + format = "const char *&arg_@@"; separator = ","; */); }; @@ -29,32 +29,28 @@ static void lex(const char *s) #define YYSKIP() ++s #define YYBACKUP() marker = s #define YYRESTORE() s = marker -#define YYBACKUPCTX() basectx = s -#define YYRESTORECTX(dist) s = basectx + dist -#define ZZ_CTX(tag, dist) tag = basectx + dist -#define ZZ_DIST() (s - basectx) - const char *marker, *basectx, *p1, *p2, *p3; - contexts_t ctxs; +#define YYBACKUPTAG(t) t = s +#define YYRESTORETAG(t) s = t +#define YYCOPYTAG(t1, t2) t1 = t2 + const char *marker, *p0, *p1, *p2, *p3; + tags_t tags; /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; - - re2c:define:YYTAG = "ZZ_CTX"; - re2c:define:YYDIST = "ZZ_DIST"; - re2c:tags:prefix = "zz_"; - re2c:tags:expression = "ctxs.@@"; + re2c:tags:expression = "tags.@@"; oct = [0-9]{1,3}; d = "."; * { printf("error\n"); return; } + @p0 oct @p1 d oct @p2 d oct @p3 d oct { printf("%u.%u.%u.%u\n", - parse_oct(basectx, p1), + parse_oct(p0, p1), parse_oct(p1 + 1, p2), parse_oct(p2 + 1, p3), parse_oct(p3 + 1, s)); @@ -63,20 +59,20 @@ static void lex(const char *s) */ } -contexts_t::contexts_t(): /*!tags:re2c +tags_t::tags_t(): /*!tags:re2c format = "@@(0)"; separator = ","; */ {} -void contexts_t::push(/*!tags:re2c - format = "long arg_@@"; +void tags_t::push(/*!tags:re2c + format = "const char *arg_@@"; separator = ","; */) { /*!tags:re2c format = "@@ = arg_@@;"; */ } -void contexts_t::pop(/*!tags:re2c - format = "long &arg_@@"; +void tags_t::pop(/*!tags:re2c + format = "const char *&arg_@@"; separator = ","; */) { /*!tags:re2c format = "arg_@@ = @@;"; */ diff --git a/re2c/test/tags/conf3.i--tags.c b/re2c/test/tags/conf3.i--tags.c index 093de8ea..46a5d645 100644 --- a/re2c/test/tags/conf3.i--tags.c +++ b/re2c/test/tags/conf3.i--tags.c @@ -11,23 +11,22 @@ static inline unsigned parse_oct(const char *s, const char *e) return oct; } -struct contexts_t +struct tags_t { - long zz_0p1;long zz_0p2;long zz_0p3; + const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3; - contexts_t(); - void push(long arg_zz_0p1,long arg_zz_0p2,long arg_zz_0p3); - void pop(long &arg_zz_0p1,long &arg_zz_0p2,long &arg_zz_0p3); + tags_t(); + void push(const char *arg_yyt0p0,const char *arg_yyt0p1,const char *arg_yyt0p2,const char *arg_yyt0p3); + void pop(const char *&arg_yyt0p0,const char *&arg_yyt0p1,const char *&arg_yyt0p2,const char *&arg_yyt0p3); }; static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3; - contexts_t ctxs; + const char *YYMARKER, *p0, *p1, *p2, *p3; + tags_t tags; { char yych; - YYCTXMARKER = YYCURSOR; yych = *YYCURSOR; switch (yych) { case '0': @@ -39,7 +38,9 @@ static void lex(const char *YYCURSOR) case '6': case '7': case '8': - case '9': goto yy4; + case '9': + tags.yyt0p0 = YYCURSOR; + goto yy4; default: goto yy2; } yy2: @@ -50,7 +51,7 @@ yy4: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '.': - ctxs.zz_0p1 = (YYCURSOR - YYCTXMARKER); + tags.yyt0p1 = YYCURSOR; goto yy5; case '0': case '1': @@ -86,7 +87,7 @@ yy7: yych = *++YYCURSOR; switch (yych) { case '.': - ctxs.zz_0p1 = (YYCURSOR - YYCTXMARKER); + tags.yyt0p1 = YYCURSOR; goto yy5; case '0': case '1': @@ -104,7 +105,7 @@ yy8: yych = *++YYCURSOR; switch (yych) { case '.': - ctxs.zz_0p2 = (YYCURSOR - YYCTXMARKER); + tags.yyt0p2 = YYCURSOR; goto yy10; case '0': case '1': @@ -122,7 +123,7 @@ yy9: yych = *++YYCURSOR; switch (yych) { case '.': - ctxs.zz_0p1 = (YYCURSOR - YYCTXMARKER); + tags.yyt0p1 = YYCURSOR; goto yy5; default: goto yy6; } @@ -145,7 +146,7 @@ yy11: yych = *++YYCURSOR; switch (yych) { case '.': - ctxs.zz_0p2 = (YYCURSOR - YYCTXMARKER); + tags.yyt0p2 = YYCURSOR; goto yy10; case '0': case '1': @@ -163,7 +164,7 @@ yy12: yych = *++YYCURSOR; switch (yych) { case '.': - ctxs.zz_0p3 = (YYCURSOR - YYCTXMARKER); + tags.yyt0p3 = YYCURSOR; goto yy14; case '0': case '1': @@ -181,7 +182,7 @@ yy13: yych = *++YYCURSOR; switch (yych) { case '.': - ctxs.zz_0p2 = (YYCURSOR - YYCTXMARKER); + tags.yyt0p2 = YYCURSOR; goto yy10; default: goto yy6; } @@ -204,7 +205,7 @@ yy15: yych = *++YYCURSOR; switch (yych) { case '.': - ctxs.zz_0p3 = (YYCURSOR - YYCTXMARKER); + tags.yyt0p3 = YYCURSOR; goto yy14; case '0': case '1': @@ -234,12 +235,13 @@ yy16: default: goto yy17; } yy17: - p3 = YYCTXMARKER + ctxs.zz_0p3; - p2 = YYCTXMARKER + ctxs.zz_0p2; - p1 = YYCTXMARKER + ctxs.zz_0p1; + p3 = tags.yyt0p3; + p2 = tags.yyt0p2; + p1 = tags.yyt0p1; + p0 = tags.yyt0p0; { printf("%u.%u.%u.%u\n", - parse_oct(YYCTXMARKER, p1), + parse_oct(p0, p1), parse_oct(p1 + 1, p2), parse_oct(p2 + 1, p3), parse_oct(p3 + 1, YYCURSOR)); @@ -249,7 +251,7 @@ yy18: yych = *++YYCURSOR; switch (yych) { case '.': - ctxs.zz_0p3 = (YYCURSOR - YYCTXMARKER); + tags.yyt0p3 = YYCURSOR; goto yy14; default: goto yy6; } @@ -276,16 +278,16 @@ yy20: } -contexts_t::contexts_t(): zz_0p1(0),zz_0p2(0),zz_0p3(0) {} +tags_t::tags_t(): yyt0p0(0),yyt0p1(0),yyt0p2(0),yyt0p3(0) {} -void contexts_t::push(long arg_zz_0p1,long arg_zz_0p2,long arg_zz_0p3) +void tags_t::push(const char *arg_yyt0p0,const char *arg_yyt0p1,const char *arg_yyt0p2,const char *arg_yyt0p3) { - zz_0p1 = arg_zz_0p1;zz_0p2 = arg_zz_0p2;zz_0p3 = arg_zz_0p3; + yyt0p0 = arg_yyt0p0;yyt0p1 = arg_yyt0p1;yyt0p2 = arg_yyt0p2;yyt0p3 = arg_yyt0p3; } -void contexts_t::pop(long &arg_zz_0p1,long &arg_zz_0p2,long &arg_zz_0p3) +void tags_t::pop(const char *&arg_yyt0p0,const char *&arg_yyt0p1,const char *&arg_yyt0p2,const char *&arg_yyt0p3) { - arg_zz_0p1 = zz_0p1;arg_zz_0p2 = zz_0p2;arg_zz_0p3 = zz_0p3; + arg_yyt0p0 = yyt0p0;arg_yyt0p1 = yyt0p1;arg_yyt0p2 = yyt0p2;arg_yyt0p3 = yyt0p3; } int main(int argc, char **argv) diff --git a/re2c/test/tags/conf3.i--tags.re b/re2c/test/tags/conf3.i--tags.re index 40f28864..2b95261d 100644 --- a/re2c/test/tags/conf3.i--tags.re +++ b/re2c/test/tags/conf3.i--tags.re @@ -10,41 +10,40 @@ static inline unsigned parse_oct(const char *s, const char *e) return oct; } -struct contexts_t +struct tags_t { - /*!tags:re2c format = "long @@;"; */ + /*!tags:re2c format = "const char *@@;"; */ - contexts_t(); + tags_t(); void push(/*!tags:re2c - format = "long arg_@@"; + format = "const char *arg_@@"; separator = ","; */); void pop(/*!tags:re2c - format = "long &arg_@@"; + format = "const char *&arg_@@"; separator = ","; */); }; static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3; - contexts_t ctxs; + const char *YYMARKER, *p0, *p1, *p2, *p3; + tags_t tags; /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; - - re2c:tags:prefix = "zz_"; - re2c:tags:expression = "ctxs.@@"; + re2c:tags:expression = "tags.@@"; oct = [0-9]{1,3}; d = "."; * { printf("error\n"); return; } + @p0 oct @p1 d oct @p2 d oct @p3 d oct { printf("%u.%u.%u.%u\n", - parse_oct(YYCTXMARKER, p1), + parse_oct(p0, p1), parse_oct(p1 + 1, p2), parse_oct(p2 + 1, p3), parse_oct(p3 + 1, YYCURSOR)); @@ -53,20 +52,20 @@ static void lex(const char *YYCURSOR) */ } -contexts_t::contexts_t(): /*!tags:re2c +tags_t::tags_t(): /*!tags:re2c format = "@@(0)"; separator = ","; */ {} -void contexts_t::push(/*!tags:re2c - format = "long arg_@@"; +void tags_t::push(/*!tags:re2c + format = "const char *arg_@@"; separator = ","; */) { /*!tags:re2c format = "@@ = arg_@@;"; */ } -void contexts_t::pop(/*!tags:re2c - format = "long &arg_@@"; +void tags_t::pop(/*!tags:re2c + format = "const char *&arg_@@"; separator = ","; */) { /*!tags:re2c format = "arg_@@ = @@;"; */ diff --git a/re2c/test/tags/dedup4.i--tags.c b/re2c/test/tags/dedup4.i--tags.c index 96f0c531..f48d2e4a 100644 --- a/re2c/test/tags/dedup4.i--tags.c +++ b/re2c/test/tags/dedup4.i--tags.c @@ -2,7 +2,6 @@ { YYCTYPE yych; - YYCTXMARKER = YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch (yych) { @@ -16,21 +15,21 @@ yy4: ++YYCURSOR; switch ((yych = *YYCURSOR)) { case 'b': - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy6; case 'c': - yyt0 = yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0 = yyt0p = YYCURSOR; goto yy8; case 'd': - yyt0 = yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0 = yyt0p = YYCURSOR; goto yy11; default: - yyt0 = yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0 = yyt0p = YYCURSOR; goto yy5; } yy5: - YYCURSOR = YYCTXMARKER + yyt0; - p = YYCTXMARKER + yyt0p; + YYCURSOR = yyt0; + p = yyt0p; { 1 p } yy6: ++YYCURSOR; @@ -39,13 +38,13 @@ yy6: switch (yych) { case 'b': goto yy6; case 'c': - yyt0 = (YYCURSOR - YYCTXMARKER); + yyt0 = YYCURSOR; goto yy8; case 'd': - yyt0 = (YYCURSOR - YYCTXMARKER); + yyt0 = YYCURSOR; goto yy11; default: - yyt0 = (YYCURSOR - YYCTXMARKER); + yyt0 = YYCURSOR; goto yy5; } yy8: @@ -57,8 +56,8 @@ yy8: default: goto yy10; } yy10: - YYCURSOR = YYCTXMARKER + yyt0; - p = YYCTXMARKER + yyt0p; + YYCURSOR = yyt0; + p = yyt0p; { 2 p } yy11: ++YYCURSOR; @@ -74,7 +73,6 @@ yy11: { YYCTYPE yych; - YYCTXMARKER = YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch (yych) { @@ -88,17 +86,17 @@ yy17: ++YYCURSOR; switch ((yych = *YYCURSOR)) { case 'b': - yyt0p = yyt1p = (YYCURSOR - YYCTXMARKER); + yyt0p = yyt1p = YYCURSOR; goto yy19; case 'c': - yyt0p = yyt1p = (YYCURSOR - YYCTXMARKER); + yyt0p = yyt1p = YYCURSOR; goto yy21; default: - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy18; } yy18: - p = YYCTXMARKER + yyt0p; + p = yyt0p; { 1 p } yy19: ++YYCURSOR; @@ -107,7 +105,7 @@ yy19: switch (yych) { case 'b': goto yy19; case 'c': - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy21; default: goto yy18; } @@ -120,8 +118,8 @@ yy21: default: goto yy23; } yy23: - YYCURSOR = YYCTXMARKER + yyt0p; - p = YYCTXMARKER + yyt1p; + YYCURSOR = yyt0p; + p = yyt1p; { 2 p } } @@ -130,7 +128,6 @@ yy23: { YYCTYPE yych; unsigned int yyaccept = 0; - YYCTXMARKER = YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch (yych) { @@ -145,17 +142,17 @@ yy28: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case 'b': - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy30; case 'c': - yyt0p = yyt1 = (YYCURSOR - YYCTXMARKER); + yyt0p = yyt1 = YYCURSOR; goto yy32; default: - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy29; } yy29: - p = YYCTXMARKER + yyt0p; + p = yyt0p; { 1 p } yy30: yyaccept = 1; @@ -165,7 +162,7 @@ yy30: switch (yych) { case 'b': goto yy30; case 'c': - yyt1 = (YYCURSOR - YYCTXMARKER); + yyt1 = YYCURSOR; goto yy32; default: goto yy29; } @@ -181,7 +178,7 @@ yy33: YYCURSOR = YYMARKER; switch (yyaccept) { case 0: - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy29; case 1: goto yy29; default: goto yy35; @@ -196,8 +193,8 @@ yy34: default: goto yy35; } yy35: - YYCURSOR = YYCTXMARKER + yyt1; - p = YYCTXMARKER + yyt0p; + YYCURSOR = yyt1; + p = yyt0p; { 2 p } } @@ -206,7 +203,6 @@ yy35: { YYCTYPE yych; unsigned int yyaccept = 0; - YYCTXMARKER = YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch (yych) { @@ -221,7 +217,7 @@ yy40: yych = *++YYCURSOR; switch (yych) { case 'b': - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy41; default: goto yy39; } @@ -233,12 +229,12 @@ yy41: switch (yych) { case 'b': goto yy41; case 'c': - yyt1 = (YYCURSOR - YYCTXMARKER); + yyt1 = YYCURSOR; goto yy44; default: goto yy43; } yy43: - p = YYCTXMARKER + yyt0p; + p = yyt0p; { 1 p } yy44: ++YYCURSOR; @@ -265,8 +261,8 @@ yy46: default: goto yy47; } yy47: - YYCURSOR = YYCTXMARKER + yyt1; - p = YYCTXMARKER + yyt0p; + YYCURSOR = yyt1; + p = yyt0p; { 2 p } } diff --git a/re2c/test/tags/dedup5.i--tags.c b/re2c/test/tags/dedup5.i--tags.c index 0a0afe7e..fc0be967 100644 --- a/re2c/test/tags/dedup5.i--tags.c +++ b/re2c/test/tags/dedup5.i--tags.c @@ -9,12 +9,11 @@ { YYCTYPE yych; - YYCTXMARKER = YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch (yych) { case 'a': - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy4; case 'b': goto yy5; default: goto yy2; @@ -31,7 +30,7 @@ yy4: } yy5: ++YYCURSOR; - p = YYCTXMARKER + yyt0p; + p = yyt0p; { p } yy7: ++YYCURSOR; @@ -39,7 +38,7 @@ yy7: yych = *YYCURSOR; switch (yych) { case 'a': - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy9; case 'b': goto yy5; default: goto yy8; @@ -61,13 +60,12 @@ yy9: { YYCTYPE yych; - YYCTXMARKER = YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch (yych) { case 'a': goto yy14; case 'b': - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy16; default: goto yy12; } @@ -77,7 +75,7 @@ yy13: {} yy14: ++YYCURSOR; - p = YYCTXMARKER + yyt0p; + p = yyt0p; { p } yy16: yych = *(YYMARKER = ++YYCURSOR); @@ -92,7 +90,7 @@ yy17: switch (yych) { case 'a': goto yy14; case 'b': - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy19; default: goto yy18; } diff --git a/re2c/test/tags/fallback1.i--tags.c b/re2c/test/tags/fallback1.i--tags.c index e4a1800f..ebe77acd 100644 --- a/re2c/test/tags/fallback1.i--tags.c +++ b/re2c/test/tags/fallback1.i--tags.c @@ -15,16 +15,15 @@ { YYCTYPE yych; unsigned int yyaccept = 0; - YYCTXMARKER = YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = *YYCURSOR; - yyt1p = (YYCURSOR - YYCTXMARKER); + yyt1p = YYCURSOR; switch (yych) { case 'a': goto yy3; default: goto yy2; } yy2: - p = YYCTXMARKER + yyt1p; + p = yyt1p; { 3 p } yy3: yyaccept = 0; @@ -37,7 +36,7 @@ yy4: yych = *++YYCURSOR; switch (yych) { case 'a': - yyt1p = (YYCURSOR - YYCTXMARKER); + yyt1p = YYCURSOR; goto yy6; default: goto yy5; } @@ -57,7 +56,7 @@ yy6: default: goto yy7; } yy7: - p = YYCTXMARKER + yyt1p; + p = yyt1p; { 2 p } yy8: yych = *++YYCURSOR; diff --git a/re2c/test/tags/fallback2.i--tags.c b/re2c/test/tags/fallback2.i--tags.c index 25d30ccb..206aacb0 100644 --- a/re2c/test/tags/fallback2.i--tags.c +++ b/re2c/test/tags/fallback2.i--tags.c @@ -17,7 +17,6 @@ { YYCTYPE yych; unsigned int yyaccept = 0; - YYCTXMARKER = YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *(YYMARKER = YYCURSOR); switch (yych) { @@ -25,7 +24,7 @@ default: goto yy2; } yy2: - p = YYCTXMARKER + yyt0p; + p = yyt0p; { p } yy3: ++YYCURSOR; @@ -40,7 +39,7 @@ yy4: if (yyaccept == 0) { goto yy2; } else { - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy2; } yy5: @@ -51,7 +50,7 @@ yy5: switch (yych) { case 'a': goto yy3; default: - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy2; } } diff --git a/re2c/test/tags/fallback3.i--tags.c b/re2c/test/tags/fallback3.i--tags.c index 83ae3f3e..bf2f3b7e 100644 --- a/re2c/test/tags/fallback3.i--tags.c +++ b/re2c/test/tags/fallback3.i--tags.c @@ -8,7 +8,6 @@ { YYCTYPE yych; unsigned int yyaccept = 0; - YYCTXMARKER = YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch (yych) { @@ -24,7 +23,7 @@ yy4: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case 'b': - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy5; default: goto yy3; } @@ -56,7 +55,7 @@ yy7: default: goto yy8; } yy8: - p = YYCTXMARKER + yyt0p; + p = yyt0p; { p } yy9: ++YYCURSOR; @@ -64,7 +63,7 @@ yy9: yych = *YYCURSOR; switch (yych) { case 'b': - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy5; default: goto yy6; } diff --git a/re2c/test/tags/fix2.i--tags.c b/re2c/test/tags/fix2.i--tags.c index 3b67d127..585fb606 100644 --- a/re2c/test/tags/fix2.i--tags.c +++ b/re2c/test/tags/fix2.i--tags.c @@ -4,11 +4,11 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4; + const char *YYMARKER, *p0, *p1, *p2, *p3, *p4; + { char yych; - YYCTXMARKER = YYCURSOR; yych = *YYCURSOR; switch (yych) { case '0': goto yy4; @@ -111,9 +111,10 @@ yy19: p3 = YYCURSOR - 9; p2 = YYCURSOR - 12; p1 = YYCURSOR - 14; + p0 = YYCURSOR - 15; { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, p4 - p3, p3, diff --git a/re2c/test/tags/fix2.i--tags.re b/re2c/test/tags/fix2.i--tags.re index e9ea3f43..ba31a5b2 100644 --- a/re2c/test/tags/fix2.i--tags.re +++ b/re2c/test/tags/fix2.i--tags.re @@ -3,18 +3,20 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4; + const char *YYMARKER, *p0, *p1, *p2, *p3, *p4; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; * { printf("error\n"); return; } - "0" @p1 "11" - @p2 "222" - @p3 "3333" - @p4 "44444" { + @p0 "0" + @p1 "11" + @p2 "222" + @p3 "3333" + @p4 "44444" { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, p4 - p3, p3, diff --git a/re2c/test/tags/fix2_trail.i--tags--input(custom).c b/re2c/test/tags/fix2_trail.i--tags--input(custom).c index be754e9e..0271822e 100644 --- a/re2c/test/tags/fix2_trail.i--tags--input(custom).c +++ b/re2c/test/tags/fix2_trail.i--tags--input(custom).c @@ -8,18 +8,19 @@ static void lex(const char *s) #define YYSKIP() ++s #define YYBACKUP() marker = s #define YYRESTORE() s = marker -#define YYBACKUPCTX() base = s -#define YYRESTORECTX(dist) s = base + dist -#define YYTAG(tag, dist) tag = base + dist -#define YYDIST() (s - base) - const char *marker, *base, *p1, *p2, *p3; +#define YYBACKUPTAG(t) t = s +#define YYRESTORETAG(t) s = t +#define YYCOPYTAG(t1, t2) t1 = t2 + const char *marker, *p0, *p1, *p2, *p3; + const char *yyt0;const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3; { char yych; - YYBACKUPCTX (); yych = YYPEEK (); switch (yych) { - case '0': goto yy4; + case '0': + YYBACKUPTAG (yyt0p0); + goto yy4; default: goto yy2; } yy2: @@ -32,7 +33,7 @@ yy4: yych = YYPEEK (); switch (yych) { case '1': - yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0p1); goto yy5; default: goto yy3; } @@ -51,7 +52,7 @@ yy7: yych = YYPEEK (); switch (yych) { case '2': - yyt0p2 = YYDIST(); + YYBACKUPTAG (yyt0p2); goto yy8; default: goto yy6; } @@ -74,7 +75,7 @@ yy10: yych = YYPEEK (); switch (yych) { case '3': - yyt0p3 = YYDIST(); + YYBACKUPTAG (yyt0p3); goto yy11; default: goto yy6; } @@ -104,7 +105,7 @@ yy14: yych = YYPEEK (); switch (yych) { case '4': - yyt0 = YYDIST(); + YYBACKUPTAG (yyt0); goto yy15; default: goto yy6; } @@ -138,13 +139,14 @@ yy18: } yy19: YYSKIP (); - YYRESTORECTX (yyt0); - YYTAG(p3, yyt0p3); - YYTAG(p2, yyt0p2); - YYTAG(p1, yyt0p1); + YYRESTORETAG (yyt0); + YYCOPYTAG (p3, yyt0p3); + YYCOPYTAG (p2, yyt0p2); + YYCOPYTAG (p1, yyt0p1); + YYCOPYTAG (p0, yyt0p0); { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - base, base, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, s - p3, p3, diff --git a/re2c/test/tags/fix2_trail.i--tags--input(custom).re b/re2c/test/tags/fix2_trail.i--tags--input(custom).re index e964fbd5..18b1846e 100644 --- a/re2c/test/tags/fix2_trail.i--tags--input(custom).re +++ b/re2c/test/tags/fix2_trail.i--tags--input(custom).re @@ -7,22 +7,23 @@ static void lex(const char *s) #define YYSKIP() ++s #define YYBACKUP() marker = s #define YYRESTORE() s = marker -#define YYBACKUPCTX() base = s -#define YYRESTORECTX(dist) s = base + dist -#define YYTAG(tag, dist) tag = base + dist -#define YYDIST() (s - base) - const char *marker, *base, *p1, *p2, *p3; +#define YYBACKUPTAG(t) t = s +#define YYRESTORETAG(t) s = t +#define YYCOPYTAG(t1, t2) t1 = t2 + const char *marker, *p0, *p1, *p2, *p3; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; * { printf("error\n"); return; } - "0" @p1 "11" - @p2 "222" - @p3 "3333" - / "44444" { + @p0 "0" + @p1 "11" + @p2 "222" + @p3 "3333" + / "44444" { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - base, base, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, s - p3, p3, diff --git a/re2c/test/tags/fix2_trail.i--tags.c b/re2c/test/tags/fix2_trail.i--tags.c index ffa7faf8..822c582c 100644 --- a/re2c/test/tags/fix2_trail.i--tags.c +++ b/re2c/test/tags/fix2_trail.i--tags.c @@ -4,11 +4,11 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3; + const char *YYMARKER, *p0, *p1, *p2, *p3; + { char yych; - YYCTXMARKER = YYCURSOR; yych = *YYCURSOR; switch (yych) { case '0': goto yy4; @@ -111,9 +111,10 @@ yy19: p3 = YYCURSOR - 4; p2 = YYCURSOR - 7; p1 = YYCURSOR - 9; + p0 = YYCURSOR - 10; { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, YYCURSOR - p3, p3, diff --git a/re2c/test/tags/fix2_trail.i--tags.re b/re2c/test/tags/fix2_trail.i--tags.re index 596eec60..254bb482 100644 --- a/re2c/test/tags/fix2_trail.i--tags.re +++ b/re2c/test/tags/fix2_trail.i--tags.re @@ -3,18 +3,20 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3; + const char *YYMARKER, *p0, *p1, *p2, *p3; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; * { printf("error\n"); return; } - "0" @p1 "11" - @p2 "222" - @p3 "3333" - / "44444" { + @p0 "0" + @p1 "11" + @p2 "222" + @p3 "3333" + / "44444" { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, YYCURSOR - p3, p3, diff --git a/re2c/test/tags/fix3.i--tags.c b/re2c/test/tags/fix3.i--tags.c index 682c762d..42ca5961 100644 --- a/re2c/test/tags/fix3.i--tags.c +++ b/re2c/test/tags/fix3.i--tags.c @@ -4,36 +4,39 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4; + const char *YYMARKER, *p0, *p1, *p2, *p3, *p4; + const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3;const char *yyt0p4; { char yych; - YYCTXMARKER = YYCURSOR; yych = *YYCURSOR; switch (yych) { - case '0': goto yy5; + case '0': + yyt0p0 = YYCURSOR; + goto yy5; case '1': - yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p1 = yyt0p0 = YYCURSOR; goto yy7; case '2': - yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = yyt0p1 = yyt0p0 = YYCURSOR; goto yy9; case '3': - yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p3 = yyt0p2 = yyt0p1 = yyt0p0 = YYCURSOR; goto yy11; case '4': - yyt0p4 = yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p4 = yyt0p3 = yyt0p2 = yyt0p1 = yyt0p0 = YYCURSOR; goto yy13; default: goto yy3; } yy2: - p4 = YYCTXMARKER + yyt0p4; - p3 = YYCTXMARKER + yyt0p3; - p2 = YYCTXMARKER + yyt0p2; - p1 = YYCTXMARKER + yyt0p1; + p4 = yyt0p4; + p3 = yyt0p3; + p2 = yyt0p2; + p1 = yyt0p1; + p0 = yyt0p0; { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, p4 - p3, p3, @@ -49,19 +52,19 @@ yy5: switch (yych) { case '0': goto yy5; case '1': - yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p1 = YYCURSOR; goto yy7; case '2': - yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = yyt0p1 = YYCURSOR; goto yy9; case '3': - yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p3 = yyt0p2 = yyt0p1 = YYCURSOR; goto yy11; case '4': - yyt0p4 = yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p4 = yyt0p3 = yyt0p2 = yyt0p1 = YYCURSOR; goto yy13; default: - yyt0p4 = yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p4 = yyt0p3 = yyt0p2 = yyt0p1 = YYCURSOR; goto yy2; } yy7: @@ -70,16 +73,16 @@ yy7: switch (yych) { case '1': goto yy7; case '2': - yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = YYCURSOR; goto yy9; case '3': - yyt0p3 = yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p3 = yyt0p2 = YYCURSOR; goto yy11; case '4': - yyt0p4 = yyt0p3 = yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p4 = yyt0p3 = yyt0p2 = YYCURSOR; goto yy13; default: - yyt0p4 = yyt0p3 = yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p4 = yyt0p3 = yyt0p2 = YYCURSOR; goto yy2; } yy9: @@ -88,13 +91,13 @@ yy9: switch (yych) { case '2': goto yy9; case '3': - yyt0p3 = (YYCURSOR - YYCTXMARKER); + yyt0p3 = YYCURSOR; goto yy11; case '4': - yyt0p4 = yyt0p3 = (YYCURSOR - YYCTXMARKER); + yyt0p4 = yyt0p3 = YYCURSOR; goto yy13; default: - yyt0p4 = yyt0p3 = (YYCURSOR - YYCTXMARKER); + yyt0p4 = yyt0p3 = YYCURSOR; goto yy2; } yy11: @@ -103,10 +106,10 @@ yy11: switch (yych) { case '3': goto yy11; case '4': - yyt0p4 = (YYCURSOR - YYCTXMARKER); + yyt0p4 = YYCURSOR; goto yy13; default: - yyt0p4 = (YYCURSOR - YYCTXMARKER); + yyt0p4 = YYCURSOR; goto yy2; } yy13: @@ -127,4 +130,4 @@ int main(int argc, char **argv) } return 0; } -re2c: warning: line 16: rule matches empty string [-Wmatch-empty-string] +re2c: warning: line 17: rule matches empty string [-Wmatch-empty-string] diff --git a/re2c/test/tags/fix3.i--tags.re b/re2c/test/tags/fix3.i--tags.re index 80920527..4b34b83f 100644 --- a/re2c/test/tags/fix3.i--tags.re +++ b/re2c/test/tags/fix3.i--tags.re @@ -3,19 +3,20 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4; + const char *YYMARKER, *p0, *p1, *p2, *p3, *p4; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; * { printf("error\n"); return; } - "0"* - @p1 "1"* - @p2 "2"* - @p3 "3"* - @p4 "4"* { + @p0 "0"* + @p1 "1"* + @p2 "2"* + @p3 "3"* + @p4 "4"* { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, p4 - p3, p3, diff --git a/re2c/test/tags/fix3_trail.i--tags--input(custom).c b/re2c/test/tags/fix3_trail.i--tags--input(custom).c index 1ffbf41b..ffcae56a 100644 --- a/re2c/test/tags/fix3_trail.i--tags--input(custom).c +++ b/re2c/test/tags/fix3_trail.i--tags--input(custom).c @@ -8,40 +8,52 @@ static void lex(const char *s) #define YYSKIP() ++s #define YYBACKUP() marker = s #define YYRESTORE() s = marker -#define YYBACKUPCTX() base = s -#define YYRESTORECTX(dist) s = base + dist -#define YYTAG(tag, dist) tag = base + dist -#define YYDIST() (s - base) - const char *marker, *base, *p1, *p2, *p3; +#define YYBACKUPTAG(t) t = s +#define YYRESTORETAG(t) s = t +#define YYCOPYTAG(t1, t2) t1 = t2 + const char *marker, *p0, *p1, *p2, *p3; + const char *yyt0;const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3; { char yych; - YYBACKUPCTX (); yych = YYPEEK (); switch (yych) { - case '0': goto yy5; + case '0': + YYBACKUPTAG (yyt0p0); + goto yy5; case '1': - yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0p1); + YYBACKUPTAG (yyt0p0); goto yy7; case '2': - yyt0p2 = yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0p2); + YYBACKUPTAG (yyt0p1); + YYBACKUPTAG (yyt0p0); goto yy9; case '3': - yyt0p3 = yyt0p2 = yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0p3); + YYBACKUPTAG (yyt0p2); + YYBACKUPTAG (yyt0p1); + YYBACKUPTAG (yyt0p0); goto yy11; case '4': - yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0); + YYBACKUPTAG (yyt0p3); + YYBACKUPTAG (yyt0p2); + YYBACKUPTAG (yyt0p1); + YYBACKUPTAG (yyt0p0); goto yy13; default: goto yy3; } yy2: - YYRESTORECTX (yyt0); - YYTAG(p3, yyt0p3); - YYTAG(p2, yyt0p2); - YYTAG(p1, yyt0p1); + YYRESTORETAG (yyt0); + YYCOPYTAG (p3, yyt0p3); + YYCOPYTAG (p2, yyt0p2); + YYCOPYTAG (p1, yyt0p1); + YYCOPYTAG (p0, yyt0p0); { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - base, base, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, s - p3, p3, @@ -57,19 +69,28 @@ yy5: switch (yych) { case '0': goto yy5; case '1': - yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0p1); goto yy7; case '2': - yyt0p2 = yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0p2); + YYBACKUPTAG (yyt0p1); goto yy9; case '3': - yyt0p3 = yyt0p2 = yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0p3); + YYBACKUPTAG (yyt0p2); + YYBACKUPTAG (yyt0p1); goto yy11; case '4': - yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0); + YYBACKUPTAG (yyt0p3); + YYBACKUPTAG (yyt0p2); + YYBACKUPTAG (yyt0p1); goto yy13; default: - yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0); + YYBACKUPTAG (yyt0p3); + YYBACKUPTAG (yyt0p2); + YYBACKUPTAG (yyt0p1); goto yy2; } yy7: @@ -78,16 +99,21 @@ yy7: switch (yych) { case '1': goto yy7; case '2': - yyt0p2 = YYDIST(); + YYBACKUPTAG (yyt0p2); goto yy9; case '3': - yyt0p3 = yyt0p2 = YYDIST(); + YYBACKUPTAG (yyt0p3); + YYBACKUPTAG (yyt0p2); goto yy11; case '4': - yyt0 = yyt0p3 = yyt0p2 = YYDIST(); + YYBACKUPTAG (yyt0); + YYBACKUPTAG (yyt0p3); + YYBACKUPTAG (yyt0p2); goto yy13; default: - yyt0 = yyt0p3 = yyt0p2 = YYDIST(); + YYBACKUPTAG (yyt0); + YYBACKUPTAG (yyt0p3); + YYBACKUPTAG (yyt0p2); goto yy2; } yy9: @@ -96,13 +122,15 @@ yy9: switch (yych) { case '2': goto yy9; case '3': - yyt0p3 = YYDIST(); + YYBACKUPTAG (yyt0p3); goto yy11; case '4': - yyt0 = yyt0p3 = YYDIST(); + YYBACKUPTAG (yyt0); + YYBACKUPTAG (yyt0p3); goto yy13; default: - yyt0 = yyt0p3 = YYDIST(); + YYBACKUPTAG (yyt0); + YYBACKUPTAG (yyt0p3); goto yy2; } yy11: @@ -111,10 +139,10 @@ yy11: switch (yych) { case '3': goto yy11; case '4': - yyt0 = YYDIST(); + YYBACKUPTAG (yyt0); goto yy13; default: - yyt0 = YYDIST(); + YYBACKUPTAG (yyt0); goto yy2; } yy13: diff --git a/re2c/test/tags/fix3_trail.i--tags--input(custom).re b/re2c/test/tags/fix3_trail.i--tags--input(custom).re index c1e53398..1a9ae763 100644 --- a/re2c/test/tags/fix3_trail.i--tags--input(custom).re +++ b/re2c/test/tags/fix3_trail.i--tags--input(custom).re @@ -7,23 +7,23 @@ static void lex(const char *s) #define YYSKIP() ++s #define YYBACKUP() marker = s #define YYRESTORE() s = marker -#define YYBACKUPCTX() base = s -#define YYRESTORECTX(dist) s = base + dist -#define YYTAG(tag, dist) tag = base + dist -#define YYDIST() (s - base) - const char *marker, *base, *p1, *p2, *p3; +#define YYBACKUPTAG(t) t = s +#define YYRESTORETAG(t) s = t +#define YYCOPYTAG(t1, t2) t1 = t2 + const char *marker, *p0, *p1, *p2, *p3; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; * { printf("error\n"); return; } - "0"* - @p1 "1"* - @p2 "2"* - @p3 "3"* - / "4"* { + @p0 "0"* + @p1 "1"* + @p2 "2"* + @p3 "3"* + / "4"* { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - base, base, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, s - p3, p3, diff --git a/re2c/test/tags/fix3_trail.i--tags.c b/re2c/test/tags/fix3_trail.i--tags.c index 5c022b19..60d698eb 100644 --- a/re2c/test/tags/fix3_trail.i--tags.c +++ b/re2c/test/tags/fix3_trail.i--tags.c @@ -4,36 +4,39 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3; + const char *YYMARKER, *p0, *p1, *p2, *p3; + const char *yyt0;const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3; { char yych; - YYCTXMARKER = YYCURSOR; yych = *YYCURSOR; switch (yych) { - case '0': goto yy5; + case '0': + yyt0p0 = YYCURSOR; + goto yy5; case '1': - yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p1 = yyt0p0 = YYCURSOR; goto yy7; case '2': - yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = yyt0p1 = yyt0p0 = YYCURSOR; goto yy9; case '3': - yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p3 = yyt0p2 = yyt0p1 = yyt0p0 = YYCURSOR; goto yy11; case '4': - yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = yyt0p0 = YYCURSOR; goto yy13; default: goto yy3; } yy2: - YYCURSOR = YYCTXMARKER + yyt0; - p3 = YYCTXMARKER + yyt0p3; - p2 = YYCTXMARKER + yyt0p2; - p1 = YYCTXMARKER + yyt0p1; + YYCURSOR = yyt0; + p3 = yyt0p3; + p2 = yyt0p2; + p1 = yyt0p1; + p0 = yyt0p0; { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, YYCURSOR - p3, p3, @@ -49,19 +52,19 @@ yy5: switch (yych) { case '0': goto yy5; case '1': - yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p1 = YYCURSOR; goto yy7; case '2': - yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = yyt0p1 = YYCURSOR; goto yy9; case '3': - yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p3 = yyt0p2 = yyt0p1 = YYCURSOR; goto yy11; case '4': - yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = YYCURSOR; goto yy13; default: - yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = YYCURSOR; goto yy2; } yy7: @@ -70,16 +73,16 @@ yy7: switch (yych) { case '1': goto yy7; case '2': - yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = YYCURSOR; goto yy9; case '3': - yyt0p3 = yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p3 = yyt0p2 = YYCURSOR; goto yy11; case '4': - yyt0 = yyt0p3 = yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0 = yyt0p3 = yyt0p2 = YYCURSOR; goto yy13; default: - yyt0 = yyt0p3 = yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0 = yyt0p3 = yyt0p2 = YYCURSOR; goto yy2; } yy9: @@ -88,13 +91,13 @@ yy9: switch (yych) { case '2': goto yy9; case '3': - yyt0p3 = (YYCURSOR - YYCTXMARKER); + yyt0p3 = YYCURSOR; goto yy11; case '4': - yyt0 = yyt0p3 = (YYCURSOR - YYCTXMARKER); + yyt0 = yyt0p3 = YYCURSOR; goto yy13; default: - yyt0 = yyt0p3 = (YYCURSOR - YYCTXMARKER); + yyt0 = yyt0p3 = YYCURSOR; goto yy2; } yy11: @@ -103,10 +106,10 @@ yy11: switch (yych) { case '3': goto yy11; case '4': - yyt0 = (YYCURSOR - YYCTXMARKER); + yyt0 = YYCURSOR; goto yy13; default: - yyt0 = (YYCURSOR - YYCTXMARKER); + yyt0 = YYCURSOR; goto yy2; } yy13: @@ -127,4 +130,4 @@ int main(int argc, char **argv) } return 0; } -re2c: warning: line 16: rule matches empty string [-Wmatch-empty-string] +re2c: warning: line 17: rule matches empty string [-Wmatch-empty-string] diff --git a/re2c/test/tags/fix3_trail.i--tags.re b/re2c/test/tags/fix3_trail.i--tags.re index 10364fe9..f4034bcc 100644 --- a/re2c/test/tags/fix3_trail.i--tags.re +++ b/re2c/test/tags/fix3_trail.i--tags.re @@ -3,19 +3,20 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3; + const char *YYMARKER, *p0, *p1, *p2, *p3; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; * { printf("error\n"); return; } - "0"* - @p1 "1"* - @p2 "2"* - @p3 "3"* - / "4"* { + @p0 "0"* + @p1 "1"* + @p2 "2"* + @p3 "3"* + / "4"* { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, YYCURSOR - p3, p3, diff --git a/re2c/test/tags/fix4.i--tags.c b/re2c/test/tags/fix4.i--tags.c index b760c16d..c6be7831 100644 --- a/re2c/test/tags/fix4.i--tags.c +++ b/re2c/test/tags/fix4.i--tags.c @@ -4,11 +4,11 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4; + const char *YYMARKER, *p0, *p1, *p2, *p3, *p4; + const char *yyt0p1;const char *yyt0p3; { char yych; - YYCTXMARKER = YYCURSOR; yych = *YYCURSOR; switch (yych) { case '0': goto yy4; @@ -22,10 +22,10 @@ yy4: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '1': - yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p1 = YYCURSOR; goto yy5; case '2': - yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p1 = YYCURSOR; goto yy8; default: goto yy3; } @@ -44,10 +44,10 @@ yy8: yych = *++YYCURSOR; switch (yych) { case '3': - yyt0p3 = (YYCURSOR - YYCTXMARKER); + yyt0p3 = YYCURSOR; goto yy9; case '4': - yyt0p3 = (YYCURSOR - YYCTXMARKER); + yyt0p3 = YYCURSOR; goto yy11; default: goto yy7; } @@ -62,12 +62,13 @@ yy9: yy11: ++YYCURSOR; p4 = YYCURSOR - 1; - p3 = YYCTXMARKER + yyt0p3; - p2 = YYCTXMARKER + (yyt0p3 - 1); - p1 = YYCTXMARKER + yyt0p1; + p3 = yyt0p3; + p2 = yyt0p3 - 1; + p1 = yyt0p1; + p0 = yyt0p1 - 1; { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, p4 - p3, p3, diff --git a/re2c/test/tags/fix4.i--tags.re b/re2c/test/tags/fix4.i--tags.re index ebb9b26b..e39a6920 100644 --- a/re2c/test/tags/fix4.i--tags.re +++ b/re2c/test/tags/fix4.i--tags.re @@ -3,18 +3,20 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4; + const char *YYMARKER, *p0, *p1, *p2, *p3, *p4; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; * { printf("error\n"); return; } - "0" @p1 "1"* - @p2 "2" - @p3 "3"* - @p4 "4" { + @p0 "0" + @p1 "1"* + @p2 "2" + @p3 "3"* + @p4 "4" { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, p4 - p3, p3, diff --git a/re2c/test/tags/fix4_trail.i--tags--input(custom).c b/re2c/test/tags/fix4_trail.i--tags--input(custom).c index 8091eb59..a346017c 100644 --- a/re2c/test/tags/fix4_trail.i--tags--input(custom).c +++ b/re2c/test/tags/fix4_trail.i--tags--input(custom).c @@ -8,18 +8,19 @@ static void lex(const char *s) #define YYSKIP() ++s #define YYBACKUP() marker = s #define YYRESTORE() s = marker -#define YYBACKUPCTX() base = s -#define YYRESTORECTX(dist) s = base + dist -#define YYTAG(tag, dist) tag = base + dist -#define YYDIST() (s - base) - const char *marker, *base, *p1, *p2, *p3; +#define YYBACKUPTAG(t) t = s +#define YYRESTORETAG(t) s = t +#define YYCOPYTAG(t1, t2) t1 = t2 + const char *marker, *p0, *p1, *p2, *p3; + const char *yyt0;const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3; { char yych; - YYBACKUPCTX (); yych = YYPEEK (); switch (yych) { - case '0': goto yy4; + case '0': + YYBACKUPTAG (yyt0p0); + goto yy4; default: goto yy2; } yy2: @@ -32,10 +33,11 @@ yy4: yych = YYPEEK (); switch (yych) { case '1': - yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0p1); goto yy5; case '2': - yyt0p2 = yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0p2); + YYBACKUPTAG (yyt0p1); goto yy8; default: goto yy3; } @@ -45,7 +47,7 @@ yy5: switch (yych) { case '1': goto yy5; case '2': - yyt0p2 = YYDIST(); + YYBACKUPTAG (yyt0p2); goto yy8; default: goto yy7; } @@ -57,10 +59,11 @@ yy8: yych = YYPEEK (); switch (yych) { case '3': - yyt0p3 = YYDIST(); + YYBACKUPTAG (yyt0p3); goto yy9; case '4': - yyt0 = yyt0p3 = YYDIST(); + YYBACKUPTAG (yyt0); + YYBACKUPTAG (yyt0p3); goto yy11; default: goto yy7; } @@ -70,19 +73,20 @@ yy9: switch (yych) { case '3': goto yy9; case '4': - yyt0 = YYDIST(); + YYBACKUPTAG (yyt0); goto yy11; default: goto yy7; } yy11: YYSKIP (); - YYRESTORECTX (yyt0); - YYTAG(p3, yyt0p3); - YYTAG(p2, yyt0p2); - YYTAG(p1, yyt0p1); + YYRESTORETAG (yyt0); + YYCOPYTAG (p3, yyt0p3); + YYCOPYTAG (p2, yyt0p2); + YYCOPYTAG (p1, yyt0p1); + YYCOPYTAG (p0, yyt0p0); { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - base, base, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, s - p3, p3, diff --git a/re2c/test/tags/fix4_trail.i--tags--input(custom).re b/re2c/test/tags/fix4_trail.i--tags--input(custom).re index e456605a..7b396be1 100644 --- a/re2c/test/tags/fix4_trail.i--tags--input(custom).re +++ b/re2c/test/tags/fix4_trail.i--tags--input(custom).re @@ -7,22 +7,23 @@ static void lex(const char *s) #define YYSKIP() ++s #define YYBACKUP() marker = s #define YYRESTORE() s = marker -#define YYBACKUPCTX() base = s -#define YYRESTORECTX(dist) s = base + dist -#define YYTAG(tag, dist) tag = base + dist -#define YYDIST() (s - base) - const char *marker, *base, *p1, *p2, *p3; +#define YYBACKUPTAG(t) t = s +#define YYRESTORETAG(t) s = t +#define YYCOPYTAG(t1, t2) t1 = t2 + const char *marker, *p0, *p1, *p2, *p3; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; * { printf("error\n"); return; } - "0" @p1 "1"* - @p2 "2" - @p3 "3"* - / "4" { + @p0 "0" + @p1 "1"* + @p2 "2" + @p3 "3"* + / "4" { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - base, base, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, s - p3, p3, diff --git a/re2c/test/tags/fix4_trail.i--tags.c b/re2c/test/tags/fix4_trail.i--tags.c index ad871383..d0750ab9 100644 --- a/re2c/test/tags/fix4_trail.i--tags.c +++ b/re2c/test/tags/fix4_trail.i--tags.c @@ -4,11 +4,11 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3; + const char *YYMARKER, *p0, *p1, *p2, *p3; + const char *yyt0p1;const char *yyt0p3; { char yych; - YYCTXMARKER = YYCURSOR; yych = *YYCURSOR; switch (yych) { case '0': goto yy4; @@ -22,10 +22,10 @@ yy4: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '1': - yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p1 = YYCURSOR; goto yy5; case '2': - yyt0p1 = (YYCURSOR - YYCTXMARKER); + yyt0p1 = YYCURSOR; goto yy8; default: goto yy3; } @@ -44,10 +44,10 @@ yy8: yych = *++YYCURSOR; switch (yych) { case '3': - yyt0p3 = (YYCURSOR - YYCTXMARKER); + yyt0p3 = YYCURSOR; goto yy9; case '4': - yyt0p3 = (YYCURSOR - YYCTXMARKER); + yyt0p3 = YYCURSOR; goto yy11; default: goto yy7; } @@ -62,12 +62,13 @@ yy9: yy11: ++YYCURSOR; YYCURSOR -= 1; - p3 = YYCTXMARKER + yyt0p3; - p2 = YYCTXMARKER + (yyt0p3 - 1); - p1 = YYCTXMARKER + yyt0p1; + p3 = yyt0p3; + p2 = yyt0p3 - 1; + p1 = yyt0p1; + p0 = yyt0p1 - 1; { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, YYCURSOR - p3, p3, diff --git a/re2c/test/tags/fix4_trail.i--tags.re b/re2c/test/tags/fix4_trail.i--tags.re index 32c3bcde..8a4a53e3 100644 --- a/re2c/test/tags/fix4_trail.i--tags.re +++ b/re2c/test/tags/fix4_trail.i--tags.re @@ -3,18 +3,20 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3; + const char *YYMARKER, *p0, *p1, *p2, *p3; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; * { printf("error\n"); return; } - "0" @p1 "1"* - @p2 "2" - @p3 "3"* - / "4" { + @p0 "0" + @p1 "1"* + @p2 "2" + @p3 "3"* + / "4" { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, YYCURSOR - p3, p3, diff --git a/re2c/test/tags/fix5.i--tags.c b/re2c/test/tags/fix5.i--tags.c index 8e30a014..365c334e 100644 --- a/re2c/test/tags/fix5.i--tags.c +++ b/re2c/test/tags/fix5.i--tags.c @@ -4,15 +4,19 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4; + const char *YYMARKER, *p0, *p1, *p2, *p3, *p4; + const char *yyt0p0;const char *yyt0p2;const char *yyt0p4; { char yych; - YYCTXMARKER = YYCURSOR; yych = *YYCURSOR; switch (yych) { - case '0': goto yy4; - case '1': goto yy5; + case '0': + yyt0p0 = YYCURSOR; + goto yy4; + case '1': + yyt0p0 = YYCURSOR; + goto yy5; default: goto yy2; } yy2: @@ -30,10 +34,10 @@ yy5: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '2': - yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = YYCURSOR; goto yy10; case '3': - yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = YYCURSOR; goto yy12; default: goto yy3; } @@ -53,10 +57,10 @@ yy9: yych = *++YYCURSOR; switch (yych) { case '2': - yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = YYCURSOR; goto yy10; case '3': - yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = YYCURSOR; goto yy12; default: goto yy8; } @@ -70,17 +74,18 @@ yy10: } yy12: ++YYCURSOR; - yyt0p4 = (YYCURSOR - YYCTXMARKER); + yyt0p4 = YYCURSOR; yych = *YYCURSOR; goto yy15; yy13: - p4 = YYCTXMARKER + yyt0p4; - p3 = YYCTXMARKER + (yyt0p4 - 1); - p2 = YYCTXMARKER + yyt0p2; - p1 = YYCTXMARKER + (yyt0p2 - 1); + p4 = yyt0p4; + p3 = yyt0p4 - 1; + p2 = yyt0p2; + p1 = yyt0p2 - 1; + p0 = yyt0p0; { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, p4 - p3, p3, diff --git a/re2c/test/tags/fix5.i--tags.re b/re2c/test/tags/fix5.i--tags.re index fecf25d7..9344278f 100644 --- a/re2c/test/tags/fix5.i--tags.re +++ b/re2c/test/tags/fix5.i--tags.re @@ -3,19 +3,20 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4; + const char *YYMARKER, *p0, *p1, *p2, *p3, *p4; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; * { printf("error\n"); return; } - "0"* - @p1 "1" - @p2 "2"* - @p3 "3" - @p4 "4"* { + @p0 "0"* + @p1 "1" + @p2 "2"* + @p3 "3" + @p4 "4"* { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, p4 - p3, p3, diff --git a/re2c/test/tags/fix5_trail.i--tags--input(custom).c b/re2c/test/tags/fix5_trail.i--tags--input(custom).c index 1ad31185..2a97cc56 100644 --- a/re2c/test/tags/fix5_trail.i--tags--input(custom).c +++ b/re2c/test/tags/fix5_trail.i--tags--input(custom).c @@ -8,20 +8,22 @@ static void lex(const char *s) #define YYSKIP() ++s #define YYBACKUP() marker = s #define YYRESTORE() s = marker -#define YYBACKUPCTX() base = s -#define YYRESTORECTX(dist) s = base + dist -#define YYTAG(tag, dist) tag = base + dist -#define YYDIST() (s - base) - const char *marker, *base, *p1, *p2, *p3; +#define YYBACKUPTAG(t) t = s +#define YYRESTORETAG(t) s = t +#define YYCOPYTAG(t1, t2) t1 = t2 + const char *marker, *p0, *p1, *p2, *p3; + const char *yyt0;const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3; { char yych; - YYBACKUPCTX (); yych = YYPEEK (); switch (yych) { - case '0': goto yy4; + case '0': + YYBACKUPTAG (yyt0p0); + goto yy4; case '1': - yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0p1); + YYBACKUPTAG (yyt0p0); goto yy5; default: goto yy2; } @@ -44,10 +46,11 @@ yy5: yych = YYPEEK (); switch (yych) { case '2': - yyt0p2 = YYDIST(); + YYBACKUPTAG (yyt0p2); goto yy10; case '3': - yyt0p3 = yyt0p2 = YYDIST(); + YYBACKUPTAG (yyt0p3); + YYBACKUPTAG (yyt0p2); goto yy12; default: goto yy3; } @@ -58,7 +61,7 @@ yy7: switch (yych) { case '0': goto yy6; case '1': - yyt0p1 = YYDIST(); + YYBACKUPTAG (yyt0p1); goto yy9; default: goto yy8; } @@ -70,10 +73,11 @@ yy9: yych = YYPEEK (); switch (yych) { case '2': - yyt0p2 = YYDIST(); + YYBACKUPTAG (yyt0p2); goto yy10; case '3': - yyt0p3 = yyt0p2 = YYDIST(); + YYBACKUPTAG (yyt0p3); + YYBACKUPTAG (yyt0p2); goto yy12; default: goto yy8; } @@ -83,23 +87,24 @@ yy10: switch (yych) { case '2': goto yy10; case '3': - yyt0p3 = YYDIST(); + YYBACKUPTAG (yyt0p3); goto yy12; default: goto yy8; } yy12: YYSKIP (); - yyt0 = YYDIST(); + YYBACKUPTAG (yyt0); yych = YYPEEK (); goto yy15; yy13: - YYRESTORECTX (yyt0); - YYTAG(p3, yyt0p3); - YYTAG(p2, yyt0p2); - YYTAG(p1, yyt0p1); + YYRESTORETAG (yyt0); + YYCOPYTAG (p3, yyt0p3); + YYCOPYTAG (p2, yyt0p2); + YYCOPYTAG (p1, yyt0p1); + YYCOPYTAG (p0, yyt0p0); { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - base, base, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, s - p3, p3, diff --git a/re2c/test/tags/fix5_trail.i--tags--input(custom).re b/re2c/test/tags/fix5_trail.i--tags--input(custom).re index a9a61afb..26a575fa 100644 --- a/re2c/test/tags/fix5_trail.i--tags--input(custom).re +++ b/re2c/test/tags/fix5_trail.i--tags--input(custom).re @@ -7,23 +7,23 @@ static void lex(const char *s) #define YYSKIP() ++s #define YYBACKUP() marker = s #define YYRESTORE() s = marker -#define YYBACKUPCTX() base = s -#define YYRESTORECTX(dist) s = base + dist -#define YYTAG(tag, dist) tag = base + dist -#define YYDIST() (s - base) - const char *marker, *base, *p1, *p2, *p3; +#define YYBACKUPTAG(t) t = s +#define YYRESTORETAG(t) s = t +#define YYCOPYTAG(t1, t2) t1 = t2 + const char *marker, *p0, *p1, *p2, *p3; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; * { printf("error\n"); return; } - "0"* - @p1 "1" - @p2 "2"* - @p3 "3" - / "4"* { + @p0 "0"* + @p1 "1" + @p2 "2"* + @p3 "3" + / "4"* { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - base, base, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, s - p3, p3, diff --git a/re2c/test/tags/fix5_trail.i--tags.c b/re2c/test/tags/fix5_trail.i--tags.c index c3c437b8..8b90ba03 100644 --- a/re2c/test/tags/fix5_trail.i--tags.c +++ b/re2c/test/tags/fix5_trail.i--tags.c @@ -4,15 +4,19 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3; + const char *YYMARKER, *p0, *p1, *p2, *p3; + const char *yyt0;const char *yyt0p0;const char *yyt0p2; { char yych; - YYCTXMARKER = YYCURSOR; yych = *YYCURSOR; switch (yych) { - case '0': goto yy4; - case '1': goto yy5; + case '0': + yyt0p0 = YYCURSOR; + goto yy4; + case '1': + yyt0p0 = YYCURSOR; + goto yy5; default: goto yy2; } yy2: @@ -30,10 +34,10 @@ yy5: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '2': - yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = YYCURSOR; goto yy10; case '3': - yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = YYCURSOR; goto yy12; default: goto yy3; } @@ -53,10 +57,10 @@ yy9: yych = *++YYCURSOR; switch (yych) { case '2': - yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = YYCURSOR; goto yy10; case '3': - yyt0p2 = (YYCURSOR - YYCTXMARKER); + yyt0p2 = YYCURSOR; goto yy12; default: goto yy8; } @@ -70,17 +74,18 @@ yy10: } yy12: ++YYCURSOR; - yyt0 = (YYCURSOR - YYCTXMARKER); + yyt0 = YYCURSOR; yych = *YYCURSOR; goto yy15; yy13: - YYCURSOR = YYCTXMARKER + yyt0; - p3 = YYCTXMARKER + (yyt0 - 1); - p2 = YYCTXMARKER + yyt0p2; - p1 = YYCTXMARKER + (yyt0p2 - 1); + YYCURSOR = yyt0; + p3 = yyt0 - 1; + p2 = yyt0p2; + p1 = yyt0p2 - 1; + p0 = yyt0p0; { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, YYCURSOR - p3, p3, diff --git a/re2c/test/tags/fix5_trail.i--tags.re b/re2c/test/tags/fix5_trail.i--tags.re index 55bb1812..218e7395 100644 --- a/re2c/test/tags/fix5_trail.i--tags.re +++ b/re2c/test/tags/fix5_trail.i--tags.re @@ -3,19 +3,20 @@ static void lex(const char *YYCURSOR) { - const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3; + const char *YYMARKER, *p0, *p1, *p2, *p3; + /*!tags:re2c format = "const char *@@;"; */ /*!re2c re2c:define:YYCTYPE = char; re2c:yyfill:enable = 0; * { printf("error\n"); return; } - "0"* - @p1 "1" - @p2 "2"* - @p3 "3" - / "4"* { + @p0 "0"* + @p1 "1" + @p2 "2"* + @p3 "3" + / "4"* { printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n", - p1 - YYCTXMARKER, YYCTXMARKER, + p1 - p0, p0, p2 - p1, p1, p3 - p2, p2, YYCURSOR - p3, p3, diff --git a/re2c/test/tags/iter_plus.i--tags.c b/re2c/test/tags/iter_plus.i--tags.c index fa8335e4..3fb4b7ef 100644 --- a/re2c/test/tags/iter_plus.i--tags.c +++ b/re2c/test/tags/iter_plus.i--tags.c @@ -5,12 +5,11 @@ { YYCTYPE yych; - YYCTXMARKER = YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch (yych) { case 'a': - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy4; default: goto yy2; } @@ -23,12 +22,12 @@ yy4: yych = *YYCURSOR; switch (yych) { case 'a': - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy4; default: goto yy6; } yy6: - p = YYCTXMARKER + yyt0p; + p = yyt0p; { p } } diff --git a/re2c/test/tags/minimization.i.c b/re2c/test/tags/minimization.i.c index 2dd1acb5..ea283061 100644 --- a/re2c/test/tags/minimization.i.c +++ b/re2c/test/tags/minimization.i.c @@ -32,7 +32,6 @@ yy5: { YYCTYPE yych; - YYCTXMARKER = YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch (yych) { @@ -48,7 +47,7 @@ yy11: yych = *++YYCURSOR; switch (yych) { case 'a': - yyt0p = (YYCURSOR - YYCTXMARKER); + yyt0p = YYCURSOR; goto yy13; default: goto yy10; } @@ -60,7 +59,7 @@ yy12: } yy13: ++YYCURSOR; - p = YYCTXMARKER + yyt0p; + p = yyt0p; { p } }