diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-reflect.c b/jerry-core/ecma/builtin-objects/ecma-builtin-reflect.c index 95a226d0c..9758b69c3 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-reflect.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-reflect.c @@ -179,7 +179,7 @@ ecma_builtin_reflect_dispatch_routine (uint16_t builtin_routine_id, /**< built-i ecma_object_t *target_p = ecma_get_object_from_value (arguments_list[0]); - /* 2. new_target_p is not supported for now*/ + /* 2. */ ecma_object_t *new_target_p = target_p; if (arguments_number > 2) diff --git a/jerry-core/ecma/operations/ecma-function-object.c b/jerry-core/ecma/operations/ecma-function-object.c index bf3ee1ccb..fbde56428 100644 --- a/jerry-core/ecma/operations/ecma-function-object.c +++ b/jerry-core/ecma/operations/ecma-function-object.c @@ -419,6 +419,8 @@ ecma_op_create_dynamic_function (const ecma_value_t *arguments_list_p, /**< argu if (JERRY_UNLIKELY (proto == NULL)) { ecma_bytecode_deref (bytecode_data_p); + ecma_deref_ecma_string (arguments_str_p); + ecma_deref_ecma_string (function_body_str_p); return ECMA_VALUE_ERROR; } #endif /* ENABLED (JERRY_ES2015) */ diff --git a/tests/jerry/es2015/reflect-construct.js b/tests/jerry/es2015/reflect-construct.js index 0baac264b..d37ee2ba1 100644 --- a/tests/jerry/es2015/reflect-construct.js +++ b/tests/jerry/es2015/reflect-construct.js @@ -51,8 +51,8 @@ function DogClass () { var obj1 = Reflect.construct (CatClass, args, DogClass); assert (obj1.name === 'Cat'); -// assert (!(ob1 instanceof CatClass)); This is true because new target is not supported yet -// assert (obj1 instanceof DogClass); This is false because new target is not supported yet +assert (!(obj1 instanceof CatClass)); +assert (obj1 instanceof DogClass); try { Reflect.construct (func1, 5, 5); diff --git a/tests/jerry/es2015/regression-test-issue-3862.js b/tests/jerry/es2015/regression-test-issue-3862.js new file mode 100644 index 000000000..292059a4b --- /dev/null +++ b/tests/jerry/es2015/regression-test-issue-3862.js @@ -0,0 +1,29 @@ +// 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. + +var target = function() {}; +var handler = { + get() { + if ($); + } +}; + +var o = new Proxy(target, handler); + +try { + Reflect.construct(Function, ['c'], o); + assert(false); +} catch (e) { + assert(e instanceof ReferenceError); +}