From: Ulya Trofimovich Date: Wed, 9 Nov 2016 22:21:13 +0000 (+0000) Subject: Skeleton: share data with DFA, generate strings before optimizing DFA. X-Git-Tag: 1.0~39^2~234 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0e40784ec9ef47cc23ef32d8aaaa63a3ad8f6ec6;p=re2c Skeleton: share data with DFA, generate strings before optimizing DFA. Skeleton must use unoptimized DFA right after determinization, otherwise it won't be able to track optimization errors. Therefore skeleton must either use a copy of DFA, or use the original before any optimizations. Copy-pasting the whole DFA is a waste (especially when it comes to tag commands, which are stored in linked lists), so we take the second approach. However, this means that skeleton '.input' files are generated every time DFA is constructed, not every time DFA is used for code generation. This explains changes in tests: in reuse mode, we sometimes construct DFA and never use it for code generation. --- diff --git a/re2c/src/codegen/emit_dfa.cc b/re2c/src/codegen/emit_dfa.cc index 3e3c614d..ad9260a4 100644 --- a/re2c/src/codegen/emit_dfa.cc +++ b/re2c/src/codegen/emit_dfa.cc @@ -183,7 +183,6 @@ void DFA::emit(Output & output, uint32_t& ind, bool isLastCond, bool& bPrologBra if (opts->target == opt_t::SKELETON) { if (output.skeletons.insert (name).second) { - emit_data(*skeleton); emit_start(*skeleton, o, max_fill, need_backup, need_accept, oldstyle_ctxmarker, tagnames, tagvars); uint32_t i = 2; diff --git a/re2c/src/ir/compile.cc b/re2c/src/ir/compile.cc index 658eb23c..3fc52f7c 100644 --- a/re2c/src/ir/compile.cc +++ b/re2c/src/ir/compile.cc @@ -63,6 +63,9 @@ static smart_ptr compile_rules( // skeleton must be constructed after DFA construction // but prior to any other DFA transformations Skeleton *skeleton = new Skeleton(dfa, cs, defrule, name, cond, line); + if (opts->target == opt_t::SKELETON) { + emit_data(*skeleton); + } cutoff_dead_rules(dfa, defrule, cond); diff --git a/re2c/src/ir/skeleton/control_flow.cc b/re2c/src/ir/skeleton/control_flow.cc index 91d959cb..072ef97d 100644 --- a/re2c/src/ir/skeleton/control_flow.cc +++ b/re2c/src/ir/skeleton/control_flow.cc @@ -75,13 +75,14 @@ void warn_undefined_control_flow(const Skeleton &skel) static void fprint_default_arc(FILE *f, const Node::arc_t &arc) { const size_t ranges = arc.size(); - if (ranges == 1 && arc[0].first == arc[0].second) { - fprintf(f, "\\x%X", arc[0].first); + if (ranges == 1 && arc[0].lower == arc[0].upper) { + fprintf(f, "\\x%X", arc[0].lower); } else { fprintf(f, "["); for (size_t i = 0; i < ranges; ++i) { - const uint32_t l = arc[i].first; - const uint32_t u = arc[i].second; + const uint32_t + l = arc[i].lower, + u = arc[i].upper; fprintf(f, "\\x%X", l); if (l != u) { fprintf(f, "-\\x%X", u); diff --git a/re2c/src/ir/skeleton/generate_data.cc b/re2c/src/ir/skeleton/generate_data.cc index cdf58436..5a85d213 100644 --- a/re2c/src/ir/skeleton/generate_data.cc +++ b/re2c/src/ir/skeleton/generate_data.cc @@ -112,8 +112,8 @@ template static cover_size_t cover_one( const Node::arc_t &arc = path.arc(skel, i); for (Node::citer_t a = arc.begin(); a != arc.end(); ++a) { const uint32_t - l = a->first, - u = a->second; + l = a->lower, + u = a->upper; w += 2 + (u - l - 1) / step(l, u); } @@ -135,8 +135,8 @@ template static cover_size_t cover_one( const Node::arc_t &arc = path.arc(skel, i); for (Node::citer_t a = arc.begin(); a != arc.end(); ++a) { const uint32_t - l = a->first, - u = a->second, + l = a->lower, + u = a->upper, d = step(l, u); for (uint32_t m = l; m < u + d; m += d, ++j) { buffer[j * len + i] = to_le(static_cast(std::min(m, u))); diff --git a/re2c/src/ir/skeleton/path.h b/re2c/src/ir/skeleton/path.h index 3625941a..e9b194e1 100644 --- a/re2c/src/ir/skeleton/path.h +++ b/re2c/src/ir/skeleton/path.h @@ -48,20 +48,28 @@ public: const Node &node = skel.nodes[*tail]; if (node.rule == Rule::NONE) continue; - size_t len = static_cast(head - tail) - 1; - if (node.trail == Tag::NONE) return len; + const Rule &rule = skel.rules[node.rule]; + const size_t trail = rule.trail; + if (trail != Tag::NONE) { + assert(skel.tags[trail].type == Tag::VAR); - const Tag &tag = skel.tags[node.trail]; - if (tag.type == Tag::FIX) { - return len - tag.fix.dist; - } - for (; tail != head; ++tail) { - if (skel.nodes[*tail].tags[node.trver]) { - return static_cast(head - tail) - 1; + const tagver_t ver = rule.tags[trail]; + const tagsave_t *p; + + for (p = node.cmd->save; p && p->ver != ver; p = p->next); + for (; !p && ++tail != head;) { + // trailing context is a top-level tag: either all ranges have it + // or none of them do, so it is sufficient to check the 1st range + const Node::arc_t &arc = skel.nodes[*tail].arcs[*(tail - 1)]; + for (p = arc[0].cmd->save; p && p->ver != ver; p = p->next); } + + assert(p); } - assert(false); + + return static_cast(head - tail) - 1; } + return 0; } size_t match(const Skeleton &skel) const diff --git a/re2c/src/ir/skeleton/skeleton.cc b/re2c/src/ir/skeleton/skeleton.cc index 6168b62d..29bb07dd 100644 --- a/re2c/src/ir/skeleton/skeleton.cc +++ b/re2c/src/ir/skeleton/skeleton.cc @@ -11,32 +11,30 @@ namespace re2c Node::Node() : arcs() , rule(Rule::NONE) - , trail(Tag::NONE) - , trver(TAGVER_ZERO) - , tags(ZERO_TAGS) + , cmd(NULL) {} -Node::~Node() +void Node::init(const dfa_state_t *s, const charset_t &cs, size_t nil) { - delete[] tags; -} + const size_t nc = cs.size() - 1; + for (uint32_t c = 0, l = 0; c < nc;) { -void Node::init(const bool *ts, size_t r, size_t tr, tagver_t tv, - const std::vector > &a) -{ - rule = r; - tags = ts; - trail = tr; - trver = tv; + size_t j = s->arcs[c]; + const tcmd_t &t = s->tcmd[c]; + for (; ++c < nc && s->arcs[c] == j && !s->tcmd[c].save && !s->tcmd[c].copy;); + if (j == dfa_t::NIL) j = nil; + + // all arcs go to default node => this node is final + if (l == 0 && c == nc && j == nil) break; + + const uint32_t u = cs[c]; + arcs[j].push_back(Node::range_t(l, u - 1, &t)); - std::vector >::const_iterator - i = a.begin(), - e = a.end(); - for (uint32_t l = 0; i != e; ++i) { - const uint32_t u = i->second; - arcs[i->first].push_back(std::make_pair(l, u - 1)); l = u; } + + rule = s->rule; + cmd = &s->tcmd[nc]; } bool Node::end() const @@ -58,47 +56,13 @@ Skeleton::Skeleton( , nodes(new Node[nodes_count]) , sizeof_key(8) , defrule(def) + , rules(dfa.rules) , tags(dfa.tags) { - const size_t nc = cs.size() - 1; - - // initialize skeleton nodes - for (size_t i = 0; i < nodes_count - 1; ++i) { - dfa_state_t *s = dfa.states[i]; - std::vector > arcs; - for (size_t c = 0; c < nc;) { - const size_t j = s->arcs[c]; - for (;++c < nc && s->arcs[c] == j;); - const size_t to = j == dfa_t::NIL - ? nodes_count - 1 - : j; - arcs.push_back(std::make_pair(to, cs[c])); - } - // all arcs go to default node => this node is final, drop arcs - if (arcs.size() == 1 && arcs[0].first == nodes_count - 1) { - arcs.clear(); - } - - // in skeleton we are only interested in trailing contexts - // which may be attributed to states rather than transitions - // trailing context also cannot have fallback tag - bool *tags = new bool[static_cast(dfa.maxtagver) + 1](); - for (size_t c = 0; c <= nc; ++c) { - for (tagsave_t *p = s->tcmd[c].save; p; p = p->next) { - tags[p->ver] = true; - } - } - - size_t trail = Tag::NONE; - tagver_t trver = TAGVER_ZERO; - if (s->rule != Rule::NONE) { - trail = dfa.rules[s->rule].trail; - if (trail != Tag::NONE) { - trver = dfa.rules[s->rule].tags[trail]; - } - } - - nodes[i].init(tags, s->rule, trail, trver, arcs); + // initialize nodes + const size_t nil = nodes_count - 1; + for (size_t i = 0; i < nil; ++i) { + nodes[i].init(dfa.states[i], cs, nil); } // initialize size of key diff --git a/re2c/src/ir/skeleton/skeleton.h b/re2c/src/ir/skeleton/skeleton.h index 4d982ffd..53ee6356 100644 --- a/re2c/src/ir/skeleton/skeleton.h +++ b/re2c/src/ir/skeleton/skeleton.h @@ -13,6 +13,7 @@ #include "src/ir/regexp/regexp.h" #include "src/ir/rule.h" +#include "src/ir/tcmd.h" #include "src/util/local_increment.h" #include "src/util/forbid_copy.h" @@ -20,6 +21,7 @@ namespace re2c { struct dfa_t; +struct dfa_state_t; struct OutputFile; struct path_t; @@ -27,20 +29,26 @@ typedef local_increment_t local_inc; struct Node { - typedef std::vector > arc_t; + struct range_t { + uint32_t lower; + uint32_t upper; + const tcmd_t *cmd; + + range_t(): lower(0), upper(0), cmd(NULL) {} + range_t(uint32_t l, uint32_t u, const tcmd_t *c) + : lower(l), upper(u), cmd(c) {} + }; + + typedef std::vector arc_t; typedef std::map arcs_t; typedef arc_t::const_iterator citer_t; arcs_t arcs; size_t rule; - size_t trail; - tagver_t trver; - const bool *tags; + const tcmd_t *cmd; Node(); - ~Node(); - void init(const bool *ts, size_t r, size_t tr, tagver_t tv, - const std::vector > &arcs); + void init(const dfa_state_t *s, const charset_t &cs, size_t nil); bool end() const; FORBID_COPY(Node); @@ -57,6 +65,7 @@ struct Skeleton size_t sizeof_key; const size_t defrule; + const std::valarray &rules; const std::valarray &tags; Skeleton(const dfa_t &dfa, const charset_t &cs, size_t def, diff --git a/re2c/test/repeat-03.cgir--skeleton.c b/re2c/test/repeat-03.cgir--skeleton.c index c2e836b2..1feb5365 100644 --- a/re2c/test/repeat-03.cgir--skeleton.c +++ b/re2c/test/repeat-03.cgir--skeleton.c @@ -710,7 +710,9 @@ int main() } return 0; } -  !"#$%&'()*+,-./023456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`defghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ1abc +  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`defghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿabc +ÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿac +ÿ  !"#$%&'()*+,-./023456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`defghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ1abc ÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿac ÿ  !"#$%&'()*+,-./013456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`defghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ2abc ÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿac diff --git a/re2c/test/repeat-06.gir--skeleton.c b/re2c/test/repeat-06.gir--skeleton.c index 48958360..abbef45b 100644 --- a/re2c/test/repeat-06.gir--skeleton.c +++ b/re2c/test/repeat-06.gir--skeleton.c @@ -616,7 +616,8 @@ int main() } return 0; } -  !"#$%&'()*+,-./023456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`efghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ1abcd +abcd +  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`efghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !"#$%&'()*+,-./023456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`efghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ1abcd ÿ  !"#$%&'()*+,-./013456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`efghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ2abcd ÿ  !"#$%&'()*+,-./012456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`efghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ3abcd ÿre2c: warning: line 24: control flow is undefined for strings that match '\xA', use default rule '*' [-Wundefined-control-flow] diff --git a/re2c/test/repeat-07_default.gir--skeleton.c b/re2c/test/repeat-07_default.gir--skeleton.c index 9f7e573f..6e633600 100644 --- a/re2c/test/repeat-07_default.gir--skeleton.c +++ b/re2c/test/repeat-07_default.gir--skeleton.c @@ -639,7 +639,8 @@ int main() } return 0; } -  !"#$%&'()*+,-./023456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`efghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ + +  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`efghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿabcdþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ  !"#$%&'()*+,-./023456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`efghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 1abcdþ  !"#$%&'()*+,-./013456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`eeeeeeeeee e e e e eeeeeeeeeeeeeeeeeee e!e"e#e$e%e&e'e(e)e*e+e,e-e.e/e0e1e2e3e4e5e6e7e8e9e:e;ee?e@eAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe[e\e]e^e_e`eaebecedeeefegeheiejekelemeneoepeqereseteuevewexeyeze{e|e}e~ee€ee‚eƒe„e…e†e‡eˆe‰eŠe‹eŒeeŽeee‘e’e“e”e•e–e—e˜e™eše›eœeežeŸe e¡e¢e£e¤e¥e¦e§e¨e©eªe«e¬e­e®e¯e°e±e²e³e´eµe¶e·e¸e¹eºe»e¼e½e¾e¿eÀeÁeÂeÃeÄeÅeÆeÇeÈeÉeÊeËeÌeÍeÎeÏeÐeÑeÒeÓeÔeÕeÖe×eØeÙeÚeÛeÜeÝeÞeßeàeáeâeãeäeåeæeçeèeéeêeëeìeíeîeïeðeñeòeóeôeõeöe÷eøeùeúeûeüeýeþeÿÿÿ 2abcdþ  !"#$%&'()*+,-./012456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`eee"e3eDeUefeweˆe™eªe»eÌeÝeîeÿee!e2eCeTeeeve‡e˜e©eºeËeÜeíeþee e1eBeSedeue†e—e¨e¹eÊeÛeìeýeee0eAeRecete…e–e§e¸eÉeÚeëeüe ee/e@eQebese„e•e¦e·eÈeÙeêeûe ee.e?ePeaereƒe”e¥e¶eÇeØeéeúe ee-e>eOe`eqe‚e“e¤eµeÆe×eèeùe diff --git a/re2c/test/reuse_conds_default_0.cgir--skeleton.c b/re2c/test/reuse_conds_default_0.cgir--skeleton.c index 37ef51b1..66c61d36 100644 --- a/re2c/test/reuse_conds_default_0.cgir--skeleton.c +++ b/re2c/test/reuse_conds_default_0.cgir--skeleton.c @@ -715,7 +715,9 @@ int main() } return 0; } -  !"#$%&'()*+,-./023456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`defghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ +  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`defghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿabc +ÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿac +ÿ  !"#$%&'()*+,-./023456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`defghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 1abcþ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿac ÿ  !"#$%&'()*+,-./013456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`defghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ2abc ÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ diff --git a/re2c/test/reuse_conds_default_1.cgir--skeleton.c b/re2c/test/reuse_conds_default_1.cgir--skeleton.c index 7b7b9010..1602c7f4 100644 --- a/re2c/test/reuse_conds_default_1.cgir--skeleton.c +++ b/re2c/test/reuse_conds_default_1.cgir--skeleton.c @@ -718,7 +718,9 @@ int main() } return 0; } -  !"#$%&'()*+,-./023456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`defghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ +  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`defghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ +abcþ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿac +ÿ  !"#$%&'()*+,-./023456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`defghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 1abcþ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ acþ  !"#$%&'()*+,-./013456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`defghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 2abcþ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿac