diff --git a/Libraries/LibJS/Runtime/RegExpConstructor.cpp b/Libraries/LibJS/Runtime/RegExpConstructor.cpp index a416ee54e4..477261b664 100644 --- a/Libraries/LibJS/Runtime/RegExpConstructor.cpp +++ b/Libraries/LibJS/Runtime/RegExpConstructor.cpp @@ -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); } diff --git a/Libraries/LibJS/Tests/builtins/RegExp/RegExp.js b/Libraries/LibJS/Tests/builtins/RegExp/RegExp.js new file mode 100644 index 0000000000..aa18a0b907 --- /dev/null +++ b/Libraries/LibJS/Tests/builtins/RegExp/RegExp.js @@ -0,0 +1,9 @@ +test("basic functionality", () => { + // FIXME: update when toString is spec-compliant + expect(RegExp().toString()).toBe("//"); + expect(RegExp(undefined).toString()).toBe("//"); + expect(RegExp("foo").toString()).toBe("/foo/"); + expect(RegExp("foo", undefined).toString()).toBe("/foo/"); + expect(RegExp("foo", "g").toString()).toBe("/foo/g"); + expect(RegExp(undefined, "g").toString()).toBe("//g"); +});