diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-error.c b/jerry-core/ecma/builtin-objects/ecma-builtin-error.c
index 78e132eb0..b6404deb0 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-error.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-error.c
@@ -22,7 +22,9 @@
#include "ecma-helpers.h"
#include "ecma-builtin-helpers.h"
#include "ecma-objects.h"
+#include "ecma-function-object.h"
#include "jrt.h"
+#include "jcontext.h"
#define ECMA_BUILTINS_INTERNAL
#include "ecma-builtins-internal.h"
@@ -62,7 +64,29 @@ ecma_value_t
ecma_builtin_error_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */
uint32_t arguments_list_len) /**< number of arguments */
{
+#if !ENABLED (JERRY_ESNEXT)
return ecma_builtin_error_dispatch_call (arguments_list_p, arguments_list_len);
+#else /* ENABLED (JERRY_ESNEXT) */
+ ecma_object_t *proto_p = ecma_op_get_prototype_from_constructor (JERRY_CONTEXT (current_new_target),
+ ECMA_BUILTIN_ID_ERROR_PROTOTYPE);
+
+ if (proto_p == NULL)
+ {
+ return ECMA_VALUE_ERROR;
+ }
+
+ ecma_value_t result = ecma_builtin_error_dispatch_call (arguments_list_p, arguments_list_len);
+
+ if (!ECMA_IS_VALUE_ERROR (result))
+ {
+ ecma_object_t *object_p = ecma_get_object_from_value (result);
+ ECMA_SET_NON_NULL_POINTER (object_p->u2.prototype_cp, proto_p);
+ }
+
+ ecma_deref_object (proto_p);
+
+ return result;
+#endif /* ENABLED (JERRY_ESNEXT) */
} /* ecma_builtin_error_dispatch_construct */
/**
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror.c b/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror.c
index 7fd168fd6..80fd6d125 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror.c
@@ -22,7 +22,9 @@
#include "ecma-helpers.h"
#include "ecma-builtin-helpers.h"
#include "ecma-objects.h"
+#include "ecma-function-object.h"
#include "jrt.h"
+#include "jcontext.h"
#if ENABLED (JERRY_BUILTIN_ERRORS)
@@ -64,7 +66,29 @@ ecma_value_t
ecma_builtin_eval_error_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */
uint32_t arguments_list_len) /**< number of arguments */
{
+#if !ENABLED (JERRY_ESNEXT)
return ecma_builtin_eval_error_dispatch_call (arguments_list_p, arguments_list_len);
+#else /* ENABLED (JERRY_ESNEXT) */
+ ecma_object_t *proto_p = ecma_op_get_prototype_from_constructor (JERRY_CONTEXT (current_new_target),
+ ECMA_BUILTIN_ID_EVAL_ERROR_PROTOTYPE);
+
+ if (proto_p == NULL)
+ {
+ return ECMA_VALUE_ERROR;
+ }
+
+ ecma_value_t result = ecma_builtin_eval_error_dispatch_call (arguments_list_p, arguments_list_len);
+
+ if (!ECMA_IS_VALUE_ERROR (result))
+ {
+ ecma_object_t *object_p = ecma_get_object_from_value (result);
+ ECMA_SET_NON_NULL_POINTER (object_p->u2.prototype_cp, proto_p);
+ }
+
+ ecma_deref_object (proto_p);
+
+ return result;
+#endif /* ENABLED (JERRY_ESNEXT) */
} /* ecma_builtin_eval_error_dispatch_construct */
/**
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror.c b/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror.c
index 65a381e02..bebce4c79 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror.c
@@ -22,7 +22,9 @@
#include "ecma-helpers.h"
#include "ecma-builtin-helpers.h"
#include "ecma-objects.h"
+#include "ecma-function-object.h"
#include "jrt.h"
+#include "jcontext.h"
#if ENABLED (JERRY_BUILTIN_ERRORS)
@@ -64,7 +66,29 @@ ecma_value_t
ecma_builtin_range_error_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */
uint32_t arguments_list_len) /**< number of arguments */
{
+#if !ENABLED (JERRY_ESNEXT)
return ecma_builtin_range_error_dispatch_call (arguments_list_p, arguments_list_len);
+#else /* ENABLED (JERRY_ESNEXT) */
+ ecma_object_t *proto_p = ecma_op_get_prototype_from_constructor (JERRY_CONTEXT (current_new_target),
+ ECMA_BUILTIN_ID_RANGE_ERROR_PROTOTYPE);
+
+ if (proto_p == NULL)
+ {
+ return ECMA_VALUE_ERROR;
+ }
+
+ ecma_value_t result = ecma_builtin_range_error_dispatch_call (arguments_list_p, arguments_list_len);
+
+ if (!ECMA_IS_VALUE_ERROR (result))
+ {
+ ecma_object_t *object_p = ecma_get_object_from_value (result);
+ ECMA_SET_NON_NULL_POINTER (object_p->u2.prototype_cp, proto_p);
+ }
+
+ ecma_deref_object (proto_p);
+
+ return result;
+#endif /* ENABLED (JERRY_ESNEXT) */
} /* ecma_builtin_range_error_dispatch_construct */
/**
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror.c b/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror.c
index c34739da3..9113b743e 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror.c
@@ -22,7 +22,9 @@
#include "ecma-helpers.h"
#include "ecma-builtin-helpers.h"
#include "ecma-objects.h"
+#include "ecma-function-object.h"
#include "jrt.h"
+#include "jcontext.h"
#if ENABLED (JERRY_BUILTIN_ERRORS)
@@ -64,7 +66,29 @@ ecma_value_t
ecma_builtin_reference_error_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */
uint32_t arguments_list_len) /**< number of arguments */
{
+#if !ENABLED (JERRY_ESNEXT)
return ecma_builtin_reference_error_dispatch_call (arguments_list_p, arguments_list_len);
+#else /* ENABLED (JERRY_ESNEXT) */
+ ecma_object_t *proto_p = ecma_op_get_prototype_from_constructor (JERRY_CONTEXT (current_new_target),
+ ECMA_BUILTIN_ID_REFERENCE_ERROR_PROTOTYPE);
+
+ if (proto_p == NULL)
+ {
+ return ECMA_VALUE_ERROR;
+ }
+
+ ecma_value_t result = ecma_builtin_reference_error_dispatch_call (arguments_list_p, arguments_list_len);
+
+ if (!ECMA_IS_VALUE_ERROR (result))
+ {
+ ecma_object_t *object_p = ecma_get_object_from_value (result);
+ ECMA_SET_NON_NULL_POINTER (object_p->u2.prototype_cp, proto_p);
+ }
+
+ ecma_deref_object (proto_p);
+
+ return result;
+#endif /* ENABLED (JERRY_ESNEXT) */
} /* ecma_builtin_reference_error_dispatch_construct */
/**
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror.c b/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror.c
index ee5796b73..aaae2778b 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror.c
@@ -22,7 +22,9 @@
#include "ecma-helpers.h"
#include "ecma-builtin-helpers.h"
#include "ecma-objects.h"
+#include "ecma-function-object.h"
#include "jrt.h"
+#include "jcontext.h"
#if ENABLED (JERRY_BUILTIN_ERRORS)
@@ -64,7 +66,29 @@ ecma_value_t
ecma_builtin_syntax_error_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */
uint32_t arguments_list_len) /**< number of arguments */
{
+#if !ENABLED (JERRY_ESNEXT)
return ecma_builtin_syntax_error_dispatch_call (arguments_list_p, arguments_list_len);
+#else /* ENABLED (JERRY_ESNEXT) */
+ ecma_object_t *proto_p = ecma_op_get_prototype_from_constructor (JERRY_CONTEXT (current_new_target),
+ ECMA_BUILTIN_ID_SYNTAX_ERROR_PROTOTYPE);
+
+ if (proto_p == NULL)
+ {
+ return ECMA_VALUE_ERROR;
+ }
+
+ ecma_value_t result = ecma_builtin_syntax_error_dispatch_call (arguments_list_p, arguments_list_len);
+
+ if (!ECMA_IS_VALUE_ERROR (result))
+ {
+ ecma_object_t *object_p = ecma_get_object_from_value (result);
+ ECMA_SET_NON_NULL_POINTER (object_p->u2.prototype_cp, proto_p);
+ }
+
+ ecma_deref_object (proto_p);
+
+ return result;
+#endif /* ENABLED (JERRY_ESNEXT) */
} /* ecma_builtin_syntax_error_dispatch_construct */
/**
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror.c b/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror.c
index 9fd2b1441..d95e898ca 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror.c
@@ -22,7 +22,9 @@
#include "ecma-helpers.h"
#include "ecma-builtin-helpers.h"
#include "ecma-objects.h"
+#include "ecma-function-object.h"
#include "jrt.h"
+#include "jcontext.h"
#if ENABLED (JERRY_BUILTIN_ERRORS)
@@ -64,7 +66,29 @@ ecma_value_t
ecma_builtin_type_error_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */
uint32_t arguments_list_len) /**< number of arguments */
{
+#if !ENABLED (JERRY_ESNEXT)
return ecma_builtin_type_error_dispatch_call (arguments_list_p, arguments_list_len);
+#else /* ENABLED (JERRY_ESNEXT) */
+ ecma_object_t *proto_p = ecma_op_get_prototype_from_constructor (JERRY_CONTEXT (current_new_target),
+ ECMA_BUILTIN_ID_TYPE_ERROR_PROTOTYPE);
+
+ if (proto_p == NULL)
+ {
+ return ECMA_VALUE_ERROR;
+ }
+
+ ecma_value_t result = ecma_builtin_type_error_dispatch_call (arguments_list_p, arguments_list_len);
+
+ if (!ECMA_IS_VALUE_ERROR (result))
+ {
+ ecma_object_t *object_p = ecma_get_object_from_value (result);
+ ECMA_SET_NON_NULL_POINTER (object_p->u2.prototype_cp, proto_p);
+ }
+
+ ecma_deref_object (proto_p);
+
+ return result;
+#endif /* ENABLED (JERRY_ESNEXT) */
} /* ecma_builtin_type_error_dispatch_construct */
/**
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-urierror.c b/jerry-core/ecma/builtin-objects/ecma-builtin-urierror.c
index d2ce32004..8f505cd2a 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-urierror.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-urierror.c
@@ -22,7 +22,9 @@
#include "ecma-helpers.h"
#include "ecma-builtin-helpers.h"
#include "ecma-objects.h"
+#include "ecma-function-object.h"
#include "jrt.h"
+#include "jcontext.h"
#if ENABLED (JERRY_BUILTIN_ERRORS)
@@ -64,7 +66,29 @@ ecma_value_t
ecma_builtin_uri_error_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */
uint32_t arguments_list_len) /**< number of arguments */
{
+#if !ENABLED (JERRY_ESNEXT)
return ecma_builtin_uri_error_dispatch_call (arguments_list_p, arguments_list_len);
+#else /* ENABLED (JERRY_ESNEXT) */
+ ecma_object_t *proto_p = ecma_op_get_prototype_from_constructor (JERRY_CONTEXT (current_new_target),
+ ECMA_BUILTIN_ID_URI_ERROR_PROTOTYPE);
+
+ if (proto_p == NULL)
+ {
+ return ECMA_VALUE_ERROR;
+ }
+
+ ecma_value_t result = ecma_builtin_uri_error_dispatch_call (arguments_list_p, arguments_list_len);
+
+ if (!ECMA_IS_VALUE_ERROR (result))
+ {
+ ecma_object_t *object_p = ecma_get_object_from_value (result);
+ ECMA_SET_NON_NULL_POINTER (object_p->u2.prototype_cp, proto_p);
+ }
+
+ ecma_deref_object (proto_p);
+
+ return result;
+#endif /* ENABLED (JERRY_ESNEXT) */
} /* ecma_builtin_uri_error_dispatch_construct */
/**
diff --git a/tests/jerry/es.next/new-target-error.js b/tests/jerry/es.next/new-target-error.js
new file mode 100644
index 000000000..1460453fc
--- /dev/null
+++ b/tests/jerry/es.next/new-target-error.js
@@ -0,0 +1,32 @@
+// 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 F (){}
+var obj = Reflect.construct (Error, [], F);
+obj[2] = 'foo';
+assert (obj instanceof F);
+
+try {
+ Reflect.construct (Error, [-1], F);
+} catch (e) {
+ assert (e instanceof RangeError);
+}
+
+var o = new Proxy (function f () {}, { get (t,p,r) { if (p == "prototype") { throw "34" } Reflect.get (...arguments) }})
+
+try {
+ Reflect.construct (Error, [], o)
+} catch (e) {
+ assert (e === "34");
+}
diff --git a/tests/test262-esnext-excludelist.xml b/tests/test262-esnext-excludelist.xml
index 744f1fdb5..3739499b0 100644
--- a/tests/test262-esnext-excludelist.xml
+++ b/tests/test262-esnext-excludelist.xml
@@ -9631,17 +9631,10 @@
-
-
-
-
-
-
-