From: Ulya Trofimovich Date: Mon, 31 Oct 2016 13:44:43 +0000 (+0000) Subject: Update struct field instead of passing return value. X-Git-Tag: 1.0~39^2~244 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=77c3c125e8d69f1271ef10986cd5c425cf266876;p=re2c Update struct field instead of passing return value. --- diff --git a/re2c/src/ir/adfa/adfa.cc b/re2c/src/ir/adfa/adfa.cc index aeef7b5a..226c5bdf 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 - , tagver_t maxver ) : accepts () , skeleton (skel) @@ -41,7 +40,7 @@ DFA::DFA , need_backup (false) , need_accept (false) , oldstyle_ctxmarker (false) - , maxtagver (maxver) + , maxtagver (dfa.maxtagver) { 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 1864b9ed..fb0d8f7f 100644 --- a/re2c/src/ir/adfa/adfa.h +++ b/re2c/src/ir/adfa/adfa.h @@ -82,7 +82,6 @@ struct DFA , const std::string &n , const std::string &c , uint32_t l - , tagver_t maxver ); ~DFA (); void reorder(); diff --git a/re2c/src/ir/compile.cc b/re2c/src/ir/compile.cc index 66da0f2a..658eb23c 100644 --- a/re2c/src/ir/compile.cc +++ b/re2c/src/ir/compile.cc @@ -69,7 +69,7 @@ static smart_ptr compile_rules( insert_fallback_tags(dfa); // try to minimize the number of tag variables - const tagver_t maxtagver = optimize_tags(dfa); + optimize_tags(dfa); minimization(dfa); @@ -78,7 +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, maxtagver); + DFA *adfa = new DFA(dfa, fill, skeleton, cs, name, cond, line); // see note [reordering DFA states] adfa->reorder(); diff --git a/re2c/src/ir/dfa/determinization.cc b/re2c/src/ir/dfa/determinization.cc index 38863da9..3a93da4a 100644 --- a/re2c/src/ir/dfa/determinization.cc +++ b/re2c/src/ir/dfa/determinization.cc @@ -14,6 +14,7 @@ namespace re2c { +static tagver_t vartag_maxver(const std::valarray &tags); static nfa_state_t *transition(nfa_state_t *state, uint32_t symbol); static void reach(const closure_t &clos1, closure_t &clos2, uint32_t symbol); static void warn_bad_tags(const bool *badtags, const std::valarray &tags, @@ -62,7 +63,7 @@ dfa_t::dfa_t(const nfa_t &nfa, closure_t clos1, clos2; bool *badtags = new bool[ntag](); - maxtagver = static_cast(ntag); + maxtagver = vartag_maxver(tags); clos1.push_back(clos_t(nfa.root, ZERO_TAGS)); closure(clos1, clos2, tagpool, rules, badtags); clospool.insert(clos2); @@ -98,6 +99,16 @@ dfa_t::dfa_t(const nfa_t &nfa, delete[] badtags; } +tagver_t vartag_maxver(const std::valarray &tags) +{ + for (size_t t = tags.size(); t > 0; --t) { + if (tags[t - 1].type == Tag::VAR) { + return static_cast(t); + } + } + return 0; +} + void warn_bad_tags(const bool *badtags, const std::valarray &tags, const std::valarray &rules, diff --git a/re2c/src/ir/dfa/dfa.h b/re2c/src/ir/dfa/dfa.h index 4bd7b0fd..7fa5eb24 100644 --- a/re2c/src/ir/dfa/dfa.h +++ b/re2c/src/ir/dfa/dfa.h @@ -70,7 +70,7 @@ void minimization(dfa_t &dfa); void fillpoints(const dfa_t &dfa, std::vector &fill); void cutoff_dead_rules(dfa_t &dfa, size_t defrule, const std::string &cond); void insert_fallback_tags(dfa_t &dfa); -tagver_t optimize_tags(dfa_t &dfa); +void optimize_tags(dfa_t &dfa); } // namespace re2c diff --git a/re2c/src/ir/dfa/tag_optimize.cc b/re2c/src/ir/dfa/tag_optimize.cc index c1ea88b5..2f43ac61 100644 --- a/re2c/src/ir/dfa/tag_optimize.cc +++ b/re2c/src/ir/dfa/tag_optimize.cc @@ -6,11 +6,9 @@ namespace re2c { -static size_t count_variable_tags(const std::valarray &tags); - -tagver_t optimize_tags(dfa_t &dfa) +void optimize_tags(dfa_t &dfa) { - if (count_variable_tags(dfa.tags) == 0) return 0; + if (dfa.maxtagver == 0) return; const size_t narc = dfa.states.size() * dfa.nchars, @@ -29,18 +27,6 @@ tagver_t optimize_tags(dfa_t &dfa) delete[] live; delete[] interf; delete[] ver2new; - return maxver; -} - -size_t count_variable_tags(const std::valarray &tags) -{ - size_t nvar = 0, ntag = tags.size(); - for (size_t t = 0; t < ntag; ++t) { - if (tags[t].type == Tag::VAR) { - ++nvar; - } - } - return nvar; } } // namespace re2c diff --git a/re2c/src/ir/dfa/tag_renaming.cc b/re2c/src/ir/dfa/tag_renaming.cc index e56b03d0..13f8646a 100644 --- a/re2c/src/ir/dfa/tag_renaming.cc +++ b/re2c/src/ir/dfa/tag_renaming.cc @@ -9,10 +9,12 @@ static void rename_copy(tagcopy_t **pcopy, const tagver_t *ver2new); void tag_renaming(dfa_t &dfa, const tagver_t *ver2new, tagver_t maxver) { - if (maxver >= dfa.maxtagver) { - assert(maxver == dfa.maxtagver); + tagver_t &oldmax = dfa.maxtagver; + if (maxver >= oldmax) { + assert(maxver == oldmax); return; } + oldmax = maxver; const size_t nstate = dfa.states.size(),