diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator-prototype.c index fe5d4fcf2e..0b2128987b 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator-prototype.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator-prototype.c @@ -111,7 +111,18 @@ ecma_builtin_async_generator_prototype_dispatch_routine (uint8_t builtin_routine if (executable_object_p == NULL) { - return ecma_raise_type_error (ECMA_ERR_ARGUMENT_THIS_NOT_ASYNC_GENERATOR); + const lit_utf8_byte_t *msg_p = ecma_get_error_utf8 (ECMA_ERR_ARGUMENT_THIS_NOT_ASYNC_GENERATOR); + lit_utf8_size_t msg_size = ecma_get_error_size (ECMA_ERR_ARGUMENT_THIS_NOT_ASYNC_GENERATOR); + ecma_string_t *error_msg_p = ecma_new_ecma_string_from_ascii (msg_p, msg_size); + + ecma_object_t *type_error_obj_p = ecma_new_standard_error (JERRY_ERROR_TYPE, error_msg_p); + ecma_deref_ecma_string (error_msg_p); + + ecma_value_t promise = ecma_op_create_promise_object (ECMA_VALUE_EMPTY, ECMA_VALUE_UNDEFINED, NULL); + ecma_reject_promise (promise, ecma_make_object_value (type_error_obj_p)); + ecma_deref_object (type_error_obj_p); + + return promise; } if (executable_object_p->extended_object.u.cls.u2.executable_obj_flags & ECMA_EXECUTABLE_OBJECT_COMPLETED) diff --git a/tests/jerry/es.next/function-async-gen1.js b/tests/jerry/es.next/function-async-gen1.js index ccec5e3ca2..4fa7be0c0e 100644 --- a/tests/jerry/es.next/function-async-gen1.js +++ b/tests/jerry/es.next/function-async-gen1.js @@ -39,6 +39,19 @@ function check_rejected(p, value) }) } + +function check_type_error(p) +{ + assert(p instanceof Promise) + + p.then(function(v) { + assert(false) + }, function(v) { + assert(v instanceof TypeError); + successCount++ + }) +} + // Test 1 var gen, r, o @@ -65,6 +78,9 @@ check_fulfilled(gen.next("Test2"), 1.5, false) check_fulfilled(gen.next(2.5), o, true) check_fulfilled(gen.next(), undefined, true) check_fulfilled(gen.next(), undefined, true) +check_type_error(gen.next.call(undefined)) +check_type_error(gen.throw.call(undefined)) +check_type_error(gen.return.call(undefined)) r(1) @@ -220,7 +236,7 @@ check_fulfilled(gen.next(), undefined, true) // END function __checkAsync() { - assert(successCount === 29) + assert(successCount === 32) assert(state === 4) assert(state2 === 4) } diff --git a/tests/test262-esnext-excludelist.xml b/tests/test262-esnext-excludelist.xml index 7e8e0daf7c..1f0044f33b 100644 --- a/tests/test262-esnext-excludelist.xml +++ b/tests/test262-esnext-excludelist.xml @@ -6465,15 +6465,9 @@ - - - - - -