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:
parent
f36607dc95
commit
1dd1378159
Notes:
sideshowbarker
2024-07-18 08:24:02 +09:00
Author: https://github.com/alimpfard
Commit: 1dd1378159
Pull-request: https://github.com/SerenityOS/serenity/pull/8977
Reviewed-by: https://github.com/Lubrsi
2 changed files with 22 additions and 2 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue