1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 09:58:11 +00:00

LibJS: Make RegExp() constructor spec-compliant

- Default values should depend on arguments being undefined, not being
  missing
- "(?:)" for empty pattern happens in RegExp.prototype.source, not the
  constructor
This commit is contained in:
Linus Groh 2020-11-27 22:42:41 +00:00 committed by Andreas Kling
parent 99536449d5
commit 5cb45e4feb
2 changed files with 21 additions and 8 deletions

View file

@ -56,14 +56,18 @@ Value RegExpConstructor::call()
Value RegExpConstructor::construct(Function&)
{
auto& vm = this->vm();
if (!vm.argument_count())
return RegExpObject::create(global_object(), "(?:)", "");
auto pattern = vm.argument(0).to_string(global_object());
if (vm.exception())
return {};
auto flags = vm.argument_count() > 1 ? vm.argument(1).to_string(global_object()) : "";
if (vm.exception())
return {};
String pattern = "";
String flags = "";
if (!vm.argument(0).is_undefined()) {
pattern = vm.argument(0).to_string(global_object());
if (vm.exception())
return {};
}
if (!vm.argument(1).is_undefined()) {
flags = vm.argument(1).to_string(global_object());
if (vm.exception())
return {};
}
return RegExpObject::create(global_object(), pattern, flags);
}