diff --git a/jerry-core/parser/js/js-parser.c b/jerry-core/parser/js/js-parser.c index 1b156a6de..922afabb2 100644 --- a/jerry-core/parser/js/js-parser.c +++ b/jerry-core/parser/js/js-parser.c @@ -290,7 +290,7 @@ parser_compute_indicies (parser_context_t *context_p, /**< context */ { if (!(literal_p->status_flags & LEXER_FLAG_NO_REG_STORE)) { - JERRY_ASSERT (register_count < PARSER_MAXIMUM_NUMBER_OF_REGISTERS); + JERRY_ASSERT (register_count <= PARSER_MAXIMUM_NUMBER_OF_REGISTERS); /* This var literal can be stored in a register. */ literal_p->prop.index = register_index; register_index++; diff --git a/tests/jerry/regression-test-issue-1556.js b/tests/jerry/regression-test-issue-1556.js new file mode 100644 index 000000000..e1a59d36f --- /dev/null +++ b/tests/jerry/regression-test-issue-1556.js @@ -0,0 +1,43 @@ +// Copyright JS Foundation and other contributors, http://js.foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* Maximum 256 paramaters are allowed. */ +var src = "(function ("; +for (var i = 0; i < 254; i++) + src += "a" + i + ", "; +src += "b) { var c = 1; })()"; + +eval(src); + +/* More than 256 parameters is a syntax error. */ +var src = "(function ("; +for (var i = 0; i < 255; i++) + src += "a" + i + ", "; +src += "b) { })()"; + +try { + eval(src); + assert(false); +} catch (e) { + assert(e instanceof SyntaxError); +} + +/* Maximum 256 local variables are stored in registers. + * The rest is stored in the lexical environment. */ +var src = "(function () {"; +for (var i = 0; i < 400; i++) + src += "var a" + i + " = 5; "; +src += "})()"; + +eval(src);