1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 05:17:35 +00:00

LibJS: Convert the RegExpInitialize AO to ThrowCompletionOr

This commit is contained in:
Idan Horowitz 2021-10-23 03:49:29 +03:00 committed by Andreas Kling
parent 35faf50941
commit d9f5e2d461
3 changed files with 11 additions and 15 deletions

View file

@ -140,7 +140,7 @@ void RegExpObject::initialize(GlobalObject& global_object)
}
// 22.2.3.2.2 RegExpInitialize ( obj, pattern, flags ), https://tc39.es/ecma262/#sec-regexpinitialize
RegExpObject* RegExpObject::regexp_initialize(GlobalObject& global_object, Value pattern, Value flags)
ThrowCompletionOr<RegExpObject*> RegExpObject::regexp_initialize(GlobalObject& global_object, Value pattern, Value flags)
{
auto& vm = global_object.vm();
@ -148,7 +148,7 @@ RegExpObject* RegExpObject::regexp_initialize(GlobalObject& global_object, Value
if (flags.is_undefined()) {
f = String::empty();
} else {
f = TRY_OR_DISCARD(flags.to_string(global_object));
f = TRY(flags.to_string(global_object));
}
String original_pattern;
@ -158,28 +158,24 @@ RegExpObject* RegExpObject::regexp_initialize(GlobalObject& global_object, Value
original_pattern = String::empty();
parsed_pattern = String::empty();
} else {
original_pattern = TRY_OR_DISCARD(pattern.to_string(global_object));
original_pattern = TRY(pattern.to_string(global_object));
bool unicode = f.find('u').has_value();
parsed_pattern = parse_regex_pattern(original_pattern, unicode);
}
auto parsed_flags_or_error = regex_flags_from_string(f);
if (parsed_flags_or_error.is_error()) {
vm.throw_exception(global_object, SyntaxError::create(global_object, parsed_flags_or_error.release_error()));
return {};
}
if (parsed_flags_or_error.is_error())
return vm.throw_completion<SyntaxError>(global_object, parsed_flags_or_error.release_error());
Regex<ECMA262> regex(move(parsed_pattern), parsed_flags_or_error.release_value());
if (regex.parser_result.error != regex::Error::NoError) {
vm.throw_exception<SyntaxError>(global_object, ErrorType::RegExpCompileError, regex.error_string());
return {};
}
if (regex.parser_result.error != regex::Error::NoError)
return vm.throw_completion<SyntaxError>(global_object, ErrorType::RegExpCompileError, regex.error_string());
m_pattern = move(original_pattern);
m_flags = move(f);
m_regex = move(regex);
TRY_OR_DISCARD(set(vm.names.lastIndex, Value(0), Object::ShouldThrowExceptions::Yes));
TRY(set(vm.names.lastIndex, Value(0), Object::ShouldThrowExceptions::Yes));
return this;
}
@ -197,7 +193,7 @@ String RegExpObject::escape_regexp_pattern() const
RegExpObject* regexp_create(GlobalObject& global_object, Value pattern, Value flags)
{
auto* regexp_object = RegExpObject::create(global_object);
return regexp_object->regexp_initialize(global_object, pattern, flags);
return TRY_OR_DISCARD(regexp_object->regexp_initialize(global_object, pattern, flags));
}
}