From 7f6f562adb115e05409650fabf1a074e7eced371 Mon Sep 17 00:00:00 2001 From: Robert Fancsik Date: Wed, 20 Nov 2019 12:21:05 +0100 Subject: [PATCH] Throw error for using rest parameter in property setter (#3335) JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu --- jerry-core/parser/js/js-parser-util.c | 4 ++++ jerry-core/parser/js/js-parser.c | 4 ++++ jerry-core/parser/js/js-parser.h | 1 + tests/jerry/es2015/function-rest-parameter.js | 1 + 4 files changed, 10 insertions(+) diff --git a/jerry-core/parser/js/js-parser-util.c b/jerry-core/parser/js/js-parser-util.c index 5bf38a291..83cafa335 100644 --- a/jerry-core/parser/js/js-parser-util.c +++ b/jerry-core/parser/js/js-parser-util.c @@ -1137,6 +1137,10 @@ parser_error_to_string (parser_error_t error) /**< error code */ { return "Rest parameter must be the last formal parameter."; } + case PARSER_ERR_SETTER_REST_PARAMETER: + { + return "Setter function argument must not be a rest parameter."; + } case PARSER_ERR_REST_PARAMETER_DEFAULT_INITIALIZER: { return "Rest parameter may not have a default initializer."; diff --git a/jerry-core/parser/js/js-parser.c b/jerry-core/parser/js/js-parser.c index 5e207fc75..572cb6fcf 100644 --- a/jerry-core/parser/js/js-parser.c +++ b/jerry-core/parser/js/js-parser.c @@ -1638,6 +1638,10 @@ parser_parse_function_arguments (parser_context_t *context_p, /**< context */ } else if (context_p->token.type == LEXER_THREE_DOTS) { + if (context_p->status_flags & PARSER_IS_PROPERTY_SETTER) + { + parser_raise_error (context_p, PARSER_ERR_SETTER_REST_PARAMETER); + } lexer_next_token (context_p); if (duplicated_argument_names) diff --git a/jerry-core/parser/js/js-parser.h b/jerry-core/parser/js/js-parser.h index c96fc8352..de8d4c372 100644 --- a/jerry-core/parser/js/js-parser.h +++ b/jerry-core/parser/js/js-parser.h @@ -127,6 +127,7 @@ typedef enum PARSER_ERR_OF_EXPECTED, /**< of keyword expected */ PARSER_ERR_FORMAL_PARAM_AFTER_REST_PARAMETER, /**< formal parameter after rest parameter */ + PARSER_ERR_SETTER_REST_PARAMETER, /**< setter rest parameter */ PARSER_ERR_REST_PARAMETER_DEFAULT_INITIALIZER, /**< rest parameter default initializer */ PARSER_ERR_DUPLICATED_ARGUMENT_NAMES, /**< duplicated argument names */ PARSER_ERR_INVALID_DESTRUCTURING_PATTERN, /**< invalid destructuring pattern */ diff --git a/tests/jerry/es2015/function-rest-parameter.js b/tests/jerry/es2015/function-rest-parameter.js index e4b536f91..0075a4b3f 100644 --- a/tests/jerry/es2015/function-rest-parameter.js +++ b/tests/jerry/es2015/function-rest-parameter.js @@ -35,6 +35,7 @@ CheckSyntaxError ('function x (... c = 5) {}'); CheckSyntaxError ('function x (...) {}'); CheckSyntaxError ('function x (a, a, ...a) {}'); CheckSyntaxError ('"use strict" function x (...arguments) {}'); +CheckSyntaxError ('var o = { set e (...args) { } }'); rest_params = ['hello', true, 7, {}, [], function () {}];