The previous change caused some assertion issues.
#include "dfa_min.h"
#include "grey.h"
+#include "mcclellancompile_util.h"
#include "rdfa.h"
#include "ue2common.h"
#include "util/container.h"
return;
}
+ if (is_dead(rdfa)) {
+ DEBUG_PRINTF("dfa is empty\n");
+ }
+
UNUSED const size_t states_before = rdfa.states.size();
HopcroftInfo info(rdfa);
const CompileContext &cc,
bool trust_daddy_states,
set<dstate_id_t> *accel_states) {
+ assert(!is_dead(raw));
+
u16 total_daddy = 0;
dfa_info info(strat);
bool using8bit = cc.grey.allowMcClellan8 && info.size() <= 256;
return ds.reports.empty() && ds.reports_eod.empty();
})) {
DEBUG_PRINTF("no reports left at all, dfa is dead\n");
- raw.states.clear();
raw.start_anchored = DEAD_STATE;
raw.start_floating = DEAD_STATE;
}
return can_die_early(raw, raw.start_anchored, visited, age_limit);
}
+bool is_dead(const raw_dfa &rdfa) {
+ return rdfa.start_anchored == DEAD_STATE &&
+ rdfa.start_floating == DEAD_STATE;
+}
+
} // namespace ue2
bool can_die_early(const raw_dfa &raw, u32 age_limit);
+/**
+ * \brief Returns true if this DFA cannot match, i.e. its start state is
+ * DEAD_STATE.
+ */
+bool is_dead(const raw_dfa &rdfa);
+
+
} // namespace ue2
#endif