diff --git a/jerry-core/ecma/operations/ecma-function-object.c b/jerry-core/ecma/operations/ecma-function-object.c
index a5888f0afa..0e61cbc5bb 100644
--- a/jerry-core/ecma/operations/ecma-function-object.c
+++ b/jerry-core/ecma/operations/ecma-function-object.c
@@ -492,28 +492,28 @@ ecma_op_create_dynamic_function (const ecma_value_t *arguments_list_p, /**< argu
#if ENABLED (JERRY_ESNEXT)
ecma_object_t *new_target_p = JERRY_CONTEXT (current_new_target_p);
+ ecma_builtin_id_t fallback_ctor = ECMA_BUILTIN_ID_FUNCTION;
if (JERRY_UNLIKELY (parse_opts & (ECMA_PARSE_GENERATOR_FUNCTION | ECMA_PARSE_ASYNC_FUNCTION)))
{
- fallback_proto = ECMA_BUILTIN_ID_GENERATOR;
+ fallback_proto = ECMA_BUILTIN_ID_ASYNC_GENERATOR;
+ fallback_ctor = ECMA_BUILTIN_ID_ASYNC_GENERATOR_FUNCTION;
- if (parse_opts & ECMA_PARSE_ASYNC_FUNCTION)
+ if (!(parse_opts & ECMA_PARSE_GENERATOR_FUNCTION))
{
- fallback_proto = ECMA_BUILTIN_ID_ASYNC_GENERATOR;
-
- if (new_target_p == NULL)
- {
- new_target_p = ecma_builtin_get (ECMA_BUILTIN_ID_ASYNC_GENERATOR_FUNCTION);
- }
+ fallback_proto = ECMA_BUILTIN_ID_ASYNC_FUNCTION_PROTOTYPE;
+ fallback_ctor = ECMA_BUILTIN_ID_ASYNC_FUNCTION;
}
- else if (new_target_p == NULL)
+ else if (!(parse_opts & ECMA_PARSE_ASYNC_FUNCTION))
{
- new_target_p = ecma_builtin_get (ECMA_BUILTIN_ID_GENERATOR_FUNCTION);
+ fallback_proto = ECMA_BUILTIN_ID_GENERATOR;
+ fallback_ctor = ECMA_BUILTIN_ID_GENERATOR_FUNCTION;
}
}
- else if (new_target_p == NULL)
+
+ if (new_target_p == NULL)
{
- new_target_p = ecma_builtin_get (ECMA_BUILTIN_ID_FUNCTION);
+ new_target_p = ecma_builtin_get (fallback_ctor);
}
ecma_object_t *proto = ecma_op_get_prototype_from_constructor (new_target_p, fallback_proto);
diff --git a/tests/test262-esnext-excludelist.xml b/tests/test262-esnext-excludelist.xml
index caf2cfbbe4..f188daa951 100644
--- a/tests/test262-esnext-excludelist.xml
+++ b/tests/test262-esnext-excludelist.xml
@@ -8606,7 +8606,6 @@
-
@@ -8858,5 +8857,4 @@
-