diff --git a/Userland/Libraries/LibRegex/RegexMatcher.cpp b/Userland/Libraries/LibRegex/RegexMatcher.cpp index d6d9db077b..16fa1b4ec1 100644 --- a/Userland/Libraries/LibRegex/RegexMatcher.cpp +++ b/Userland/Libraries/LibRegex/RegexMatcher.cpp @@ -449,6 +449,8 @@ Optional Matcher::execute(MatchInput const& input, MatchState& sta (*it) = state; it->instruction_position = state.fork_at_position; it->initiating_fork = *input.fork_to_replace; + it->capture_group_matches = state.capture_group_matches; + it->matches = state.matches; found = true; break; } diff --git a/Userland/Libraries/LibRegex/RegexOptimizer.cpp b/Userland/Libraries/LibRegex/RegexOptimizer.cpp index 2dbd96eb1c..8dd7335463 100644 --- a/Userland/Libraries/LibRegex/RegexOptimizer.cpp +++ b/Userland/Libraries/LibRegex/RegexOptimizer.cpp @@ -223,7 +223,6 @@ void Regex::attempt_rewrite_loops_as_atomic_groups(BasicBlockList const& // ------------------------- // bb1 | RE1 // can be rewritten as: - // loop.hdr | ForkStay bb1 (if RE1 matches _something_, empty otherwise) // ------------------------- // bb0 | RE0 // | ForkReplaceX bb0 @@ -371,15 +370,6 @@ void Regex::attempt_rewrite_loops_as_atomic_groups(BasicBlockList const& } else { VERIFY_NOT_REACHED(); } - - if (candidate.form == AlternateForm::DirectLoopWithoutHeader) { - if (candidate.new_target_block.has_value()) { - // Insert a fork-stay targeted at the second block. - bytecode.insert(candidate.forking_block.start, (ByteCodeValueType)OpCodeId::ForkStay); - bytecode.insert(candidate.forking_block.start + 1, candidate.new_target_block->start - candidate.forking_block.start + 2); - needed_patches.insert(candidate.forking_block.start, 2u); - } - } } if (!needed_patches.is_empty()) {