From: Ulya Trofimovich Date: Sat, 14 May 2016 14:34:54 +0000 (+0100) Subject: Code cleanup. X-Git-Tag: 1.0~39^2~298 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=643f5fd795c6d9818ab803507ac4dd2eee1ceaac;p=re2c Code cleanup. --- diff --git a/re2c/bootstrap/src/codegen/subst_tags.cc b/re2c/bootstrap/src/codegen/subst_tags.cc index 211fcc99..78c34bb9 100644 --- a/re2c/bootstrap/src/codegen/subst_tags.cc +++ b/re2c/bootstrap/src/codegen/subst_tags.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 0.16 on Fri May 13 14:25:27 2016 */ +/* Generated by re2c 0.16 on Sat May 14 15:27:19 2016 */ #line 1 "../src/codegen/subst_tags.re" #include "src/codegen/emit.h" #include "src/codegen/input_api.h" @@ -113,18 +113,19 @@ yy7: { const std::string name((base + yytag1name), head); for (size_t i = ltag; i < htag; ++i) { - if (name == *tags[i].name) { + const Tag &t = tags[i]; + if (name == *t.name) { result.append(tail, base); - result.append(opts->input_api.expr_tag(tags, i)); + result.append(opts->input_api.expr_tag(tags, t)); tail = head; break; } } goto loop; } -#line 126 "src/codegen/subst_tags.cc" +#line 127 "src/codegen/subst_tags.cc" } -#line 53 "../src/codegen/subst_tags.re" +#line 54 "../src/codegen/subst_tags.re" } diff --git a/re2c/src/codegen/input_api.cc b/re2c/src/codegen/input_api.cc index 95f37c0b..f4e97fbe 100644 --- a/re2c/src/codegen/input_api.cc +++ b/re2c/src/codegen/input_api.cc @@ -129,40 +129,31 @@ std::string InputAPI::stmt_dist (uint32_t ind, const bool *mask, return s + expr_dist() + ";\n"; } -std::string InputAPI::expr_tag_var(const std::string &expr) const +std::string InputAPI::expr_tag(const std::valarray &tags, const Tag &tag) const { - switch (type_) { - case DEFAULT: return "(" + opts->yyctxmarker + " + " + expr + ")"; - case CUSTOM: return opts->tags_yytag + "(" + expr + ")"; - default: assert(false); - } -} + std::string expr; -std::string InputAPI::expr_tag(const std::valarray &tags, size_t idx) const -{ - const Tag &t = tags[idx]; - if (t.type == Tag::VAR) { - const Tag &o = tags[t.var.orig]; - return expr_tag_var(vartag_expr(o.name, o.rule)); - } else if (t.fix.base != Tag::NONE) { - const Tag &o = tags[tags[t.fix.base].var.orig]; - std::ostringstream s; - s << "(" << vartag_expr(o.name, o.rule) << " - " << t.fix.dist << ")"; - return expr_tag_var(s.str()); + if (tag.type == Tag::VAR) { + const Tag &orig = tags[tag.var.orig]; + expr = vartag_expr(orig.name, orig.rule); } else { - std::ostringstream s; - switch (type_) { - case DEFAULT: + const std::string dist = to_string(tag.fix.dist); + if (tag.fix.base == Tag::NONE) { + if (type_ == DEFAULT) { // optimize '(YYCTXMARKER + ((YYCURSOR - YCTXMARKER) - yyctx))' // to '(YYCURSOR - yytag)' - s << "(" << opts->yycursor << " - " << t.fix.dist << ")"; - break; - case CUSTOM: - s << opts->tags_yytag << "(" << opts->tags_yydist << "() - " << t.fix.dist << ")"; - break; + return "(" + opts->yycursor + " - " + dist + ")"; + } + expr = opts->tags_yydist + "() - " + dist; + } else { + const Tag &orig = tags[tags[tag.fix.base].var.orig]; + expr = "(" + vartag_expr(orig.name, orig.rule) + " - " + dist + ")"; } - return s.str(); } + + return (type_ == DEFAULT) + ? "(" + opts->yyctxmarker + " + " + expr + ")" + : opts->tags_yytag + "(" + expr + ")"; } std::string InputAPI::stmt_restore (uint32_t ind) const diff --git a/re2c/src/codegen/input_api.h b/re2c/src/codegen/input_api.h index 8fee2c64..4ed39cfe 100644 --- a/re2c/src/codegen/input_api.h +++ b/re2c/src/codegen/input_api.h @@ -35,7 +35,7 @@ public: std::string expr_dist () const; std::string stmt_dist (uint32_t ind, const bool *tagmask, const std::valarray &tags) const; - std::string expr_tag(const std::valarray &tags, size_t idx) const; + std::string expr_tag(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; @@ -45,9 +45,6 @@ public: std::string stmt_skip_backup_peek (uint32_t ind) const; std::string expr_lessthan_one () const; std::string expr_lessthan (size_t n) const; - -private: - std::string expr_tag_var(const std::string &expr) const; }; } // end namespace re2c diff --git a/re2c/src/codegen/subst_tags.re b/re2c/src/codegen/subst_tags.re index 81f28048..a760deec 100644 --- a/re2c/src/codegen/subst_tags.re +++ b/re2c/src/codegen/subst_tags.re @@ -41,9 +41,10 @@ std::string subst_tags(const std::string &action, "@" @name [a-zA-Z0-9_]+ { const std::string name(@name, head); for (size_t i = ltag; i < htag; ++i) { - if (name == *tags[i].name) { + const Tag &t = tags[i]; + if (name == *t.name) { result.append(tail, base); - result.append(opts->input_api.expr_tag(tags, i)); + result.append(opts->input_api.expr_tag(tags, t)); tail = head; break; }