diff --git a/Libraries/LibJS/Parser.cpp b/Libraries/LibJS/Parser.cpp index 9a68bdfe42..3257c1f524 100644 --- a/Libraries/LibJS/Parser.cpp +++ b/Libraries/LibJS/Parser.cpp @@ -1278,7 +1278,7 @@ Vector Parser::parse_function_parameters(int& function_ while (match(TokenType::Identifier) || match(TokenType::TripleDot)) { if (parse_options & FunctionNodeParseOptions::IsGetterFunction) syntax_error("Getter function must have no arguments"); - if (parse_options & FunctionNodeParseOptions::IsSetterFunction && parameters.size() >= 1) + if (parse_options & FunctionNodeParseOptions::IsSetterFunction && (parameters.size() >= 1 || match(TokenType::TripleDot))) syntax_error("Setter function must have one argument"); if (match(TokenType::TripleDot)) { consume(); diff --git a/Libraries/LibJS/Tests/classes/class-errors.js b/Libraries/LibJS/Tests/classes/class-errors.js index 93c50829d0..fb479a0af2 100644 --- a/Libraries/LibJS/Tests/classes/class-errors.js +++ b/Libraries/LibJS/Tests/classes/class-errors.js @@ -70,6 +70,11 @@ describe("syntax errors", () => { class A { set foo(bar, baz) { } + }`).not.toEval(); + expect(` + class A { + set foo(...bar) { + } }`).not.toEval(); }); diff --git a/Libraries/LibJS/Tests/object-basic.js b/Libraries/LibJS/Tests/object-basic.js index e00382fdc2..37f5c6e4dd 100644 --- a/Libraries/LibJS/Tests/object-basic.js +++ b/Libraries/LibJS/Tests/object-basic.js @@ -151,6 +151,7 @@ describe("errors", () => { expect("({ get ...[foo] })").not.toEval(); expect("({ get foo(bar) {} })").not.toEval(); expect("({ set foo() {} })").not.toEval(); + expect("({ set foo(...bar) {} })").not.toEval(); expect("({ set foo(bar, baz) {} })").not.toEval(); expect("({ ...foo: bar })").not.toEval(); });