diff --git a/jerry-core/ecma/operations/ecma-arraybuffer-object.c b/jerry-core/ecma/operations/ecma-arraybuffer-object.c index 71a610cc97..7b0e0077ca 100644 --- a/jerry-core/ecma/operations/ecma-arraybuffer-object.c +++ b/jerry-core/ecma/operations/ecma-arraybuffer-object.c @@ -15,6 +15,7 @@ #include "ecma-arraybuffer-object.h" #include "ecma-try-catch-macro.h" +#include "ecma-typedarray-object.h" #include "ecma-objects.h" #include "ecma-builtins.h" #include "ecma-exceptions.h" diff --git a/jerry-core/ecma/operations/ecma-typedarray-object.c b/jerry-core/ecma/operations/ecma-typedarray-object.c index 9127bcbf37..691a357087 100644 --- a/jerry-core/ecma/operations/ecma-typedarray-object.c +++ b/jerry-core/ecma/operations/ecma-typedarray-object.c @@ -534,15 +534,21 @@ ecma_typedarray_create_object_with_length (ecma_length_t array_length, /**< leng ecma_object_t *ctor_proto_p = ecma_get_object_from_value (ctor_proto); - ecma_value_t byte_length_val = ecma_make_uint32_value (byte_length); - ecma_value_t new_arraybuffer = ecma_op_function_construct (ctor_proto_p, - ctor_proto_p, - &byte_length_val, - 1); + ecma_object_t *data_p = ecma_op_get_prototype_from_constructor (ctor_proto_p, + ECMA_BUILTIN_ID_ARRAYBUFFER_PROTOTYPE); + ecma_deref_object (ctor_proto_p); - ecma_free_value (byte_length_val); - new_arraybuffer_p = ecma_get_object_from_value (new_arraybuffer); + if (JERRY_UNLIKELY (data_p == NULL)) + { + return ECMA_VALUE_ERROR; + } + + new_arraybuffer_p = ecma_arraybuffer_new_object (byte_length); + + ECMA_SET_NON_NULL_POINTER (new_arraybuffer_p->u2.prototype_cp, data_p); + + ecma_deref_object (data_p); } ecma_object_t *object_p = ecma_create_object (proto_p, diff --git a/tests/jerry/es2015/regression-test-issue-3836.js b/tests/jerry/es2015/regression-test-issue-3836.js new file mode 100644 index 0000000000..fc494c8294 --- /dev/null +++ b/tests/jerry/es2015/regression-test-issue-3836.js @@ -0,0 +1,41 @@ +// 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. + +function validate_typedarray (typedarray, result) { + assert(typedarray.length === result.length); + for (var i=0;i