diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-generator-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-generator-prototype.c index 7383b0b93..2cd7620bb 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-generator-prototype.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-generator-prototype.c @@ -39,9 +39,9 @@ enum { ECMA_GENERATOR_PROTOTYPE_ROUTINE_START = ECMA_BUILTIN_ID__COUNT - 1, - ECMA_GENERATOR_PROTOTYPE_ROUTINE_RETURN, + ECMA_GENERATOR_PROTOTYPE_ROUTINE_NEXT, ECMA_GENERATOR_PROTOTYPE_ROUTINE_THROW, - ECMA_GENERATOR_PROTOTYPE_ROUTINE_NEXT + ECMA_GENERATOR_PROTOTYPE_ROUTINE_RETURN }; #define BUILTIN_INC_HEADER_NAME "ecma-builtin-generator-prototype.inc.h" @@ -206,7 +206,13 @@ ecma_builtin_generator_prototype_dispatch_routine (uint16_t builtin_routine_id, if (executable_object_p->extended_object.u.class_prop.extra_info & ECMA_EXECUTABLE_OBJECT_COMPLETED) { - return ecma_create_iter_result_object (ECMA_VALUE_UNDEFINED, ECMA_VALUE_TRUE); + if (builtin_routine_id != ECMA_GENERATOR_PROTOTYPE_ROUTINE_THROW) + { + return ecma_create_iter_result_object (ECMA_VALUE_UNDEFINED, ECMA_VALUE_TRUE); + } + + jcontext_raise_exception (ecma_copy_value (arguments_list_p[0])); + return ECMA_VALUE_ERROR; } switch (builtin_routine_id) @@ -223,16 +229,13 @@ ecma_builtin_generator_prototype_dispatch_routine (uint16_t builtin_routine_id, arguments_list_p[0], ECMA_ITERATOR_THROW); } - case ECMA_GENERATOR_PROTOTYPE_ROUTINE_RETURN: + default: { + JERRY_ASSERT (builtin_routine_id == ECMA_GENERATOR_PROTOTYPE_ROUTINE_RETURN); return ecma_builtin_generator_prototype_object_do (executable_object_p, arguments_list_p[0], ECMA_ITERATOR_RETURN); } - default: - { - JERRY_UNREACHABLE (); - } } return ECMA_VALUE_EMPTY; diff --git a/tests/jerry/es.next/generator-throw.js b/tests/jerry/es.next/generator-throw.js index da99bdcba..c172e1471 100644 --- a/tests/jerry/es.next/generator-throw.js +++ b/tests/jerry/es.next/generator-throw.js @@ -69,7 +69,7 @@ check_result(f.throw("throw"), "z", false) check_throw("f.next()", "throw") check_result(f.next(), undefined, true) -function* gen3() { +function/* generator */*/* generator */gen3() { try { return 8 } finally { @@ -80,3 +80,15 @@ function* gen3() { f = gen3() check_result(f.next(), 1, false) check_throw("f.throw(2)", 2) + +function + /* generator */ + * + /* generator */ + gen4() +{ +} + +f = gen4() +check_result(f.next(), undefined, true) +check_throw("f.throw('Str')", "Str") diff --git a/tests/test262-es6-excludelist.xml b/tests/test262-es6-excludelist.xml index 84131e13f..b3478cf8c 100644 --- a/tests/test262-es6-excludelist.xml +++ b/tests/test262-es6-excludelist.xml @@ -43,7 +43,6 @@ -