if (proper_out_degree(g.startDs, g)) {
return false; /* not purely anchored */
}
- if (is_match_vertex(g.start, g)) {
- return false; /* vacuous (todo: handle?) */
- }
ei.new_graph = cloneHolder(*left.graph());
auto gg = ei.new_graph;
ei.lag_adjust = decreaseLag(build, *gg, succs);
+ if (is_match_vertex(gg->start, *gg)) {
+ return false; /* should not still be vacuous as lag decreased */
+ }
+
if (!can_die_early(*gg, EAGER_DIE_BEFORE_LIMIT)) {
DEBUG_PRINTF("not eager as stuck alive\n");
return false;
always_run++;
}
+ if (t->eagerIterOffset) {
+ /* eager prefixes are always run */
+ always_run++;
+ }
+
const HWLM *ftable = getFLiteralMatcher(t);
if (ftable) {
/* TODO: ignore conditional ftables, or ftables beyond smwr region */