mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
rose_build_matchers: simplify literal build
This commit is contained in:
parent
bcbd85ab67
commit
6c5b4e657c
@ -671,8 +671,6 @@ MatcherProto makeMatcherProto(const RoseBuildImpl &build,
|
|||||||
|
|
||||||
assert(id < build.literal_info.size());
|
assert(id < build.literal_info.size());
|
||||||
const rose_literal_info &info = build.literal_info[id];
|
const rose_literal_info &info = build.literal_info[id];
|
||||||
u32 final_id = info.final_id;
|
|
||||||
rose_group groups = info.group_mask;
|
|
||||||
/* Note: requires_benefits are handled in the literal entries */
|
/* Note: requires_benefits are handled in the literal entries */
|
||||||
const ue2_literal &lit = e.second.s;
|
const ue2_literal &lit = e.second.s;
|
||||||
|
|
||||||
@ -723,8 +721,8 @@ MatcherProto makeMatcherProto(const RoseBuildImpl &build,
|
|||||||
|
|
||||||
DEBUG_PRINTF("id=%u, s='%s', nocase=%d, noruns=%d, msk=%s, "
|
DEBUG_PRINTF("id=%u, s='%s', nocase=%d, noruns=%d, msk=%s, "
|
||||||
"cmp=%s\n",
|
"cmp=%s\n",
|
||||||
final_id, escapeString(s).c_str(), (int)nocase, noruns,
|
info.fragment_id, escapeString(s).c_str(), (int)nocase,
|
||||||
dumpMask(msk).c_str(), dumpMask(cmp).c_str());
|
noruns, dumpMask(msk).c_str(), dumpMask(cmp).c_str());
|
||||||
|
|
||||||
if (!maskIsConsistent(s, nocase, msk, cmp)) {
|
if (!maskIsConsistent(s, nocase, msk, cmp)) {
|
||||||
DEBUG_PRINTF("msk/cmp for literal can't match, skipping\n");
|
DEBUG_PRINTF("msk/cmp for literal can't match, skipping\n");
|
||||||
@ -732,20 +730,17 @@ MatcherProto makeMatcherProto(const RoseBuildImpl &build,
|
|||||||
}
|
}
|
||||||
|
|
||||||
mp.accel_lits.emplace_back(lit.get_string(), lit.any_nocase(), msk, cmp,
|
mp.accel_lits.emplace_back(lit.get_string(), lit.any_nocase(), msk, cmp,
|
||||||
groups);
|
info.group_mask);
|
||||||
mp.history_required = max(mp.history_required, lit_hist_len);
|
mp.history_required = max(mp.history_required, lit_hist_len);
|
||||||
mp.lits.emplace_back(move(s), nocase, noruns, final_id, groups, msk,
|
|
||||||
cmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto &lit : mp.lits) {
|
assert(info.fragment_id < build.fragments.size());
|
||||||
u32 final_id = lit.id;
|
const auto &frag = build.fragments.at(info.fragment_id);
|
||||||
assert(contains(build.final_to_frag_map, final_id));
|
u32 prog_offset =
|
||||||
const auto &frag =
|
delay_rebuild ? frag.delay_program_offset : frag.lit_program_offset;
|
||||||
build.fragments.at(build.final_to_frag_map.at(final_id));
|
const auto &groups = frag.groups;
|
||||||
lit.id = delay_rebuild ? frag.delay_program_offset
|
|
||||||
: frag.lit_program_offset;
|
mp.lits.emplace_back(move(s), nocase, noruns, prog_offset, groups, msk,
|
||||||
lit.groups = frag.groups;
|
cmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
sort_and_unique(mp.lits);
|
sort_and_unique(mp.lits);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user