mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 12:05:15 +00:00
LibRegex: Don't use Optional<T> inside regex::Match
This prevented Match from being trivially copyable, which we want it to be for fast Vector copying.
This commit is contained in:
parent
54edf29f1b
commit
5308d77600
Notes:
github-actions[bot]
2025-04-14 15:41:20 +00:00
Author: https://github.com/awesomekling Commit: https://github.com/LadybirdBrowser/ladybird/commit/5308d776006 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4351
3 changed files with 11 additions and 8 deletions
|
@ -328,9 +328,9 @@ static ThrowCompletionOr<Value> regexp_builtin_exec(VM& vm, RegExpObject& regexp
|
|||
MUST(array->create_data_property_or_throw(i, captured_value));
|
||||
|
||||
// e. If the ith capture of R was defined with a GroupName, then
|
||||
if (capture.capture_group_name.has_value()) {
|
||||
if (capture.capture_group_name >= 0) {
|
||||
// i. Let s be the CapturingGroupName of the corresponding RegExpIdentifierName.
|
||||
auto group_name = regex.parser_result.bytecode.get_string(capture.capture_group_name.release_value());
|
||||
auto group_name = regex.parser_result.bytecode.get_string(capture.capture_group_name);
|
||||
|
||||
// ii. Perform ! CreateDataPropertyOrThrow(groups, s, capturedValue).
|
||||
MUST(groups_object->create_data_property_or_throw(group_name, captured_value));
|
||||
|
|
|
@ -502,7 +502,7 @@ public:
|
|||
void reset()
|
||||
{
|
||||
view = view.typed_null_view();
|
||||
capture_group_name.clear();
|
||||
capture_group_name = -1;
|
||||
line = 0;
|
||||
column = 0;
|
||||
global_offset = 0;
|
||||
|
@ -510,7 +510,10 @@ public:
|
|||
}
|
||||
|
||||
RegexStringView view {};
|
||||
Optional<size_t> capture_group_name {}; // This is a string table index.
|
||||
|
||||
// This is a string table index. -1 if none. Not using Optional to keep the struct trivially copyable.
|
||||
ssize_t capture_group_name { -1 };
|
||||
|
||||
size_t line { 0 };
|
||||
size_t column { 0 };
|
||||
size_t global_offset { 0 };
|
||||
|
|
|
@ -426,10 +426,10 @@ TEST_CASE(named_capture_group)
|
|||
EXPECT_EQ(result.count, 2u);
|
||||
EXPECT_EQ(result.matches.at(0).view, "Opacity=255");
|
||||
EXPECT_EQ(result.capture_group_matches.at(0).at(0).view, "255");
|
||||
EXPECT_EQ(re.parser_result.bytecode.get_string(result.capture_group_matches.at(0).at(0).capture_group_name.value()), "Test");
|
||||
EXPECT_EQ(re.parser_result.bytecode.get_string(result.capture_group_matches.at(0).at(0).capture_group_name), "Test");
|
||||
EXPECT_EQ(result.matches.at(1).view, "AudibleBeep=0");
|
||||
EXPECT_EQ(result.capture_group_matches.at(1).at(0).view, "0");
|
||||
EXPECT_EQ(re.parser_result.bytecode.get_string(result.capture_group_matches.at(1).at(0).capture_group_name.value()), "Test");
|
||||
EXPECT_EQ(re.parser_result.bytecode.get_string(result.capture_group_matches.at(1).at(0).capture_group_name), "Test");
|
||||
}
|
||||
|
||||
TEST_CASE(ecma262_named_capture_group_with_dollar_sign)
|
||||
|
@ -449,10 +449,10 @@ TEST_CASE(ecma262_named_capture_group_with_dollar_sign)
|
|||
EXPECT_EQ(result.count, 2u);
|
||||
EXPECT_EQ(result.matches.at(0).view, "Opacity=255");
|
||||
EXPECT_EQ(result.capture_group_matches.at(0).at(0).view, "255");
|
||||
EXPECT_EQ(re.parser_result.bytecode.get_string(result.capture_group_matches.at(0).at(0).capture_group_name.value()), "$Test$");
|
||||
EXPECT_EQ(re.parser_result.bytecode.get_string(result.capture_group_matches.at(0).at(0).capture_group_name), "$Test$");
|
||||
EXPECT_EQ(result.matches.at(1).view, "AudibleBeep=0");
|
||||
EXPECT_EQ(result.capture_group_matches.at(1).at(0).view, "0");
|
||||
EXPECT_EQ(re.parser_result.bytecode.get_string(result.capture_group_matches.at(1).at(0).capture_group_name.value()), "$Test$");
|
||||
EXPECT_EQ(re.parser_result.bytecode.get_string(result.capture_group_matches.at(1).at(0).capture_group_name), "$Test$");
|
||||
}
|
||||
|
||||
TEST_CASE(a_star)
|
||||
|
|
Loading…
Add table
Reference in a new issue