diff --git a/Userland/Libraries/LibRegex/RegexByteCode.cpp b/Userland/Libraries/LibRegex/RegexByteCode.cpp index f5869acbdb..964d403c68 100644 --- a/Userland/Libraries/LibRegex/RegexByteCode.cpp +++ b/Userland/Libraries/LibRegex/RegexByteCode.cpp @@ -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; } diff --git a/Userland/Libraries/LibRegex/RegexMatch.h b/Userland/Libraries/LibRegex/RegexMatch.h index 4ed5cab2f0..b6cd0e0793 100644 --- a/Userland/Libraries/LibRegex/RegexMatch.h +++ b/Userland/Libraries/LibRegex/RegexMatch.h @@ -101,6 +101,16 @@ public: [](auto const& view) { return view.length(); }); } + RegexStringView typed_null_view() + { + auto view = m_view.visit( + [&](T const&) { + return RegexStringView { T {} }; + }); + view.set_unicode(unicode()); + return view; + } + RegexStringView construct_as_same(Span data, Optional& optional_string_storage, Vector& 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 };