diff --git a/src/rose/rose_build_bytecode.cpp b/src/rose/rose_build_bytecode.cpp index 197ceb4a..a50ebb8e 100644 --- a/src/rose/rose_build_bytecode.cpp +++ b/src/rose/rose_build_bytecode.cpp @@ -5409,6 +5409,15 @@ aligned_unique_ptr RoseBuildImpl::buildFinalEngine(u32 minWidth) { allocateFinalLiteralId(*this, bc); final_to_frag_map = groupByFragment(*this, bc); + // Write the fragment IDs into the literal_info structures. + for (auto &info : literal_info) { + if (info.final_id == MO_INVALID_IDX) { + continue; + } + assert(contains(final_to_frag_map, info.final_id)); + info.fragment_id = final_to_frag_map.at(info.final_id).fragment_id; + } + auto anchored_dfas = buildAnchoredDfas(*this); bc.floatingMinLiteralMatchOffset = diff --git a/src/rose/rose_build_impl.h b/src/rose/rose_build_impl.h index addd703c..bf588553 100644 --- a/src/rose/rose_build_impl.h +++ b/src/rose/rose_build_impl.h @@ -264,7 +264,8 @@ struct rose_literal_info { ue2::flat_set vertices; rose_group group_mask = 0; u32 undelayed_id = MO_INVALID_IDX; - u32 final_id = MO_INVALID_IDX; /* id reported by fdr */ + u32 final_id = MO_INVALID_IDX; // TODO: remove + u32 fragment_id = MO_INVALID_IDX; //!< ID corresponding to literal prog. bool squash_group = false; bool requires_benefits = false; };