]> granicus.if.org Git - re2c/commitdiff
Small speedup in determinization by delaying computation of costly conditions.
authorUlya Trofimovich <skvadrik@gmail.com>
Thu, 7 Feb 2019 21:41:18 +0000 (21:41 +0000)
committerUlya Trofimovich <skvadrik@gmail.com>
Thu, 7 Feb 2019 22:06:30 +0000 (22:06 +0000)
re2c/src/dfa/closure.cc
re2c/src/dfa/find_state.cc

index 1ed21f4d22dd613896e94dd3dedae69547e896b6..f5620ef68464870fac2e80fc7ef1f5fd25c686ec 100644 (file)
@@ -180,10 +180,8 @@ void generate_versions(determ_context_t &ctx)
         const tagver_t *vs = tvtbl[c->tvers];
         for (size_t t = 0; t < ntag; ++t) {
             const Tag &tag = tags[t];
-            const tagver_t
-                h0 = thist.last(h, t),
-                l0 = thist.last(l, t);
 
+            const tagver_t h0 = thist.last(h, t);
             if (h0 == TAGVER_ZERO) continue;
 
             const tagver_t v = history(tag) ? vs[t] : TAGVER_ZERO;
@@ -193,7 +191,7 @@ void generate_versions(determ_context_t &ctx)
                 m = newvers.insert(std::make_pair(x, n)).first->second;
             if (n == m) ++maxver;
 
-            if (!fixed(tag) && (l0 == TAGVER_ZERO || history(tag))) {
+            if (!fixed(tag) && (history(tag) || thist.last(l, t) == TAGVER_ZERO)) {
                 newacts.insert(std::make_pair(x, m));
             }
         }
index deeca51b291995fc69595c0f49a710a0436cc834..d4010e0e2561397c73707b99e3426b26e8c8cfc9 100644 (file)
@@ -408,8 +408,8 @@ bool kernel_map_t::operator()(const kernel_t *x, const kernel_t *y)
 
         for (size_t t = 0; t < ntag; ++t) {
             // see note [mapping ignores items with lookahead tags]
-            if (ctx.dc_taghistory.last(xl, t) != TAGVER_ZERO
-                && !history(tags[t])) continue;
+            if (!history(tags[t])
+                && ctx.dc_taghistory.last(xl, t) != TAGVER_ZERO) continue;
 
             const tagver_t xv = xvs[t], yv = yvs[t];
             tagver_t &xv0 = y2x[yv], &yv0 = x2y[xv];