1
0
Fork 0
mirror of https://github.com/LadybirdBrowser/ladybird.git synced 2025-06-11 02:13:56 +09:00

LibRegex: Preserve the type of the match when clearing capture groups

Even though the contents are supposed to be reset, the type should stay
unchanged, as that's an assumption the engine is making.
This commit is contained in:
Ali Mohammad Pur 2021-07-24 12:55:04 +04:30 committed by Ali Mohammad Pur
parent f36607dc95
commit 1dd1378159
Notes: sideshowbarker 2024-07-18 08:24:02 +09:00
2 changed files with 22 additions and 2 deletions

View file

@ -299,7 +299,7 @@ ALWAYS_INLINE ExecutionResult OpCode_ClearCaptureGroup::execute(MatchInput const
if (input.match_index < state.capture_group_matches.size()) {
auto& group = state.capture_group_matches[input.match_index];
if (id() < group.size())
group[id()] = {};
group[id()].reset();
}
return ExecutionResult::Continue;
}
@ -353,7 +353,8 @@ ALWAYS_INLINE ExecutionResult OpCode_ClearNamedCaptureGroup::execute(MatchInput
{
if (input.match_index < state.capture_group_matches.size()) {
auto& group = state.named_capture_group_matches[input.match_index];
group.remove(name());
if (auto it = group.find(name()); it != group.end())
it->value.reset();
}
return ExecutionResult::Continue;
}

View file

@ -101,6 +101,16 @@ public:
[](auto const& view) { return view.length(); });
}
RegexStringView typed_null_view()
{
auto view = m_view.visit(
[&]<typename T>(T const&) {
return RegexStringView { T {} };
});
view.set_unicode(unicode());
return view;
}
RegexStringView construct_as_same(Span<u32> data, Optional<String>& optional_string_storage, Vector<u16>& optional_utf16_storage) const
{
auto view = m_view.visit(
@ -417,6 +427,15 @@ public:
{
}
void reset()
{
view = view.typed_null_view();
line = 0;
column = 0;
global_offset = 0;
left_column = 0;
}
RegexStringView view { nullptr };
size_t line { 0 };
size_t column { 0 };