diff --git a/Libraries/LibRegex/RegexOptimizer.cpp b/Libraries/LibRegex/RegexOptimizer.cpp index 2294ed33568..28d7cf43857 100644 --- a/Libraries/LibRegex/RegexOptimizer.cpp +++ b/Libraries/LibRegex/RegexOptimizer.cpp @@ -6,11 +6,11 @@ #include #include -#include #include #include #include #include +#include #include #include #include @@ -1176,8 +1176,8 @@ void Optimizer::append_alternation(ByteCode& target, Span alternatives patch_locations.append({ node_ip, target_ip }); }; - Queue nodes_to_visit; - nodes_to_visit.enqueue(&trie); + Vector nodes_to_visit; + nodes_to_visit.append(&trie); HashMap>> instruction_positions; if (has_any_backwards_jump) @@ -1195,7 +1195,7 @@ void Optimizer::append_alternation(ByteCode& target, Span alternatives // forkjump child2 // ... while (!nodes_to_visit.is_empty()) { - auto const* node = nodes_to_visit.dequeue(); + auto const* node = nodes_to_visit.take_last(); for (auto& patch : patch_locations) { if (!patch.done && node_is(node, patch.source_ip)) { auto value = static_cast(target.size() - patch.target_ip - 1); @@ -1291,7 +1291,7 @@ void Optimizer::append_alternation(ByteCode& target, Span alternatives target.append(static_cast(OpCodeId::ForkJump)); add_patch_point(child_node, target.size()); target.append(static_cast(0)); - nodes_to_visit.enqueue(child_node); + nodes_to_visit.append(child_node); } } diff --git a/Tests/LibRegex/Regex.cpp b/Tests/LibRegex/Regex.cpp index 148656b9a98..a5faf6b2dcb 100644 --- a/Tests/LibRegex/Regex.cpp +++ b/Tests/LibRegex/Regex.cpp @@ -716,6 +716,7 @@ TEST_CASE(ECMA262_match) ""sv, false, }, // See above, also ladybird#2931. { "[^]*[^]"sv, "i"sv, true }, // Optimizer bug, ignoring an enabled trailing 'invert' when comparing blocks, ladybird#3421. + { "xx|...|...."sv, "cd"sv, false }, }; // clang-format on