aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Fancsik <robert.fancsik@h-lab.eu>2021-10-28 12:45:47 +0200
committerGitHub <noreply@github.com>2021-10-28 12:45:47 +0200
commitd2388e907f1354455db1045607ee487abf0ce526 (patch)
treec10ab559517efdd382972c3ec234352f66259b4c
parentdd77ec914a36023abc34cbb09efad3cb46803a05 (diff)
Implement CreateAsyncFromSyncIterator (#4802)
JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik robert.fancsik@h-lab.eu
-rw-r--r--jerry-core/CMakeLists.txt2
-rw-r--r--jerry-core/api/jerry.c1
-rw-r--r--jerry-core/ecma/base/ecma-errors.c5
-rw-r--r--jerry-core/ecma/base/ecma-errors.h1
-rw-r--r--jerry-core/ecma/base/ecma-gc.c26
-rw-r--r--jerry-core/ecma/base/ecma-globals.h10
-rw-r--r--jerry-core/ecma/builtin-objects/ecma-builtin-async-from-sync-iterator-prototype.c374
-rw-r--r--jerry-core/ecma/builtin-objects/ecma-builtin-async-from-sync-iterator-prototype.inc.h32
-rw-r--r--jerry-core/ecma/builtin-objects/ecma-builtin-handlers.c1
-rw-r--r--jerry-core/ecma/builtin-objects/ecma-builtin-handlers.h2
-rw-r--r--jerry-core/ecma/builtin-objects/ecma-builtin-handlers.inc.h1
-rw-r--r--jerry-core/ecma/builtin-objects/ecma-builtin-promise.c112
-rw-r--r--jerry-core/ecma/builtin-objects/ecma-builtins.inc.h7
-rw-r--r--jerry-core/ecma/operations/ecma-iterator-object.c124
-rw-r--r--jerry-core/ecma/operations/ecma-iterator-object.h12
-rw-r--r--jerry-core/ecma/operations/ecma-objects.c1
-rw-r--r--jerry-core/ecma/operations/ecma-promise-object.c239
-rw-r--r--jerry-core/ecma/operations/ecma-promise-object.h6
-rw-r--r--tests/jerry/es.next/async-from-sync-iterator.js210
-rw-r--r--tests/jerry/es.next/promise-all-iterator.js2
-rw-r--r--tests/jerry/es.next/promise-all-settled.js2
-rw-r--r--tests/jerry/es.next/promise-any.js2
-rw-r--r--tests/jerry/es.next/promise-race-iterator.js2
-rw-r--r--tests/test262-esnext-excludelist.xml259
24 files changed, 1015 insertions, 418 deletions
diff --git a/jerry-core/CMakeLists.txt b/jerry-core/CMakeLists.txt
index 0a3f5e32..3c54a7e5 100644
--- a/jerry-core/CMakeLists.txt
+++ b/jerry-core/CMakeLists.txt
@@ -160,6 +160,7 @@ set(SOURCE_CORE_FILES
ecma/builtin-objects/ecma-builtin-array.c
ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.c
ecma/builtin-objects/ecma-builtin-arraybuffer.c
+ ecma/builtin-objects/ecma-builtin-async-from-sync-iterator-prototype.c
ecma/builtin-objects/ecma-builtin-async-function-prototype.c
ecma/builtin-objects/ecma-builtin-async-function.c
ecma/builtin-objects/ecma-builtin-async-generator-function.c
@@ -358,6 +359,7 @@ if(ENABLE_AMALGAM)
ecma/builtin-objects/ecma-builtin-array.inc.h
ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.inc.h
ecma/builtin-objects/ecma-builtin-arraybuffer.inc.h
+ ecma/builtin-objects/ecma-builtin-async-from-sync-iterator-prototype.inc.h
ecma/builtin-objects/ecma-builtin-async-function-prototype.inc.h
ecma/builtin-objects/ecma-builtin-async-function.inc.h
ecma/builtin-objects/ecma-builtin-async-generator-function.inc.h
diff --git a/jerry-core/api/jerry.c b/jerry-core/api/jerry.c
index c9c2b0b9..c8a8524d 100644
--- a/jerry-core/api/jerry.c
+++ b/jerry-core/api/jerry.c
@@ -1542,6 +1542,7 @@ static const uint8_t jerry_class_object_type[] =
#if JERRY_ESNEXT
JERRY_OBJECT_TYPE_PROMISE, /**< type of ECMA_OBJECT_CLASS_PROMISE */
JERRY_OBJECT_TYPE_GENERIC, /**< type of ECMA_OBJECT_CLASS_PROMISE_CAPABILITY */
+ JERRY_OBJECT_TYPE_GENERIC, /**< type of ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR */
#endif /* JERRY_ESNEXT */
#if JERRY_BUILTIN_DATAVIEW
JERRY_OBJECT_TYPE_DATAVIEW, /**< type of ECMA_OBJECT_CLASS_DATAVIEW */
diff --git a/jerry-core/ecma/base/ecma-errors.c b/jerry-core/ecma/base/ecma-errors.c
index 23cd88f0..27189eaf 100644
--- a/jerry-core/ecma/base/ecma-errors.c
+++ b/jerry-core/ecma/base/ecma-errors.c
@@ -130,6 +130,11 @@ const char * const ecma_error_class_is_non_configurable = "Prototype property of
const char * const ecma_error_argument_is_not_an_object = "Argument is not an object";
/**
+ * Error message length of 'ecma_error_argument_is_not_an_object'
+ */
+const int ecma_error_argument_is_not_an_object_length = 25;
+
+/**
* Error message, argument is not a Proxy object
*/
const char * const ecma_error_argument_is_not_a_proxy = "Argument is not a Proxy object";
diff --git a/jerry-core/ecma/base/ecma-errors.h b/jerry-core/ecma/base/ecma-errors.h
index 21133d7d..8cab743e 100644
--- a/jerry-core/ecma/base/ecma-errors.h
+++ b/jerry-core/ecma/base/ecma-errors.h
@@ -69,6 +69,7 @@ extern const char * const ecma_error_arraybuffer_is_detached;
extern const char * const ecma_error_cannot_convert_to_object;
extern const char * const ecma_error_class_is_non_configurable;
extern const char * const ecma_error_argument_is_not_an_object;
+extern const int ecma_error_argument_is_not_an_object_length;
extern const char * const ecma_error_argument_is_not_a_proxy;
extern const char * const ecma_error_target_is_not_a_constructor;
extern const char * const ecma_error_argument_is_not_an_regexp;
diff --git a/jerry-core/ecma/base/ecma-gc.c b/jerry-core/ecma/base/ecma-gc.c
index a5dc7243..f3e3c0dd 100644
--- a/jerry-core/ecma/base/ecma-gc.c
+++ b/jerry-core/ecma/base/ecma-gc.c
@@ -1013,6 +1013,19 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
}
break;
}
+ case ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR:
+ {
+ ecma_async_from_sync_iterator_object_t *iter_p = (ecma_async_from_sync_iterator_object_t *) ext_object_p;
+
+ ecma_gc_set_object_visited (ecma_get_object_from_value (iter_p->header.u.cls.u3.sync_iterator));
+
+ if (!ecma_is_value_undefined (iter_p->sync_next_method))
+ {
+ ecma_gc_set_object_visited (ecma_get_object_from_value (iter_p->sync_next_method));
+ }
+
+ break;
+ }
case ECMA_OBJECT_CLASS_ARRAY_ITERATOR:
case ECMA_OBJECT_CLASS_SET_ITERATOR:
case ECMA_OBJECT_CLASS_MAP_ITERATOR:
@@ -1208,6 +1221,10 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
}
break;
}
+ case ECMA_NATIVE_HANDLER_ASYNC_FROM_SYNC_ITERATOR_UNWRAP:
+ {
+ break;
+ }
default:
{
JERRY_UNREACHABLE ();
@@ -1911,6 +1928,11 @@ ecma_gc_free_object (ecma_object_t *object_p) /**< object to free */
ext_object_size = sizeof (ecma_promise_capabality_t);
break;
}
+ case ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR:
+ {
+ ext_object_size = sizeof (ecma_async_from_sync_iterator_object_t);
+ break;
+ }
#endif /* JERRY_ESNEXT */
#if JERRY_MODULE_SYSTEM
case ECMA_OBJECT_CLASS_MODULE:
@@ -2039,6 +2061,10 @@ ecma_gc_free_object (ecma_object_t *object_p) /**< object to free */
ext_object_size = sizeof (ecma_promise_value_thunk_t);
break;
}
+ case ECMA_NATIVE_HANDLER_ASYNC_FROM_SYNC_ITERATOR_UNWRAP:
+ {
+ break;
+ }
default:
{
JERRY_UNREACHABLE ();
diff --git a/jerry-core/ecma/base/ecma-globals.h b/jerry-core/ecma/base/ecma-globals.h
index 117049e9..b39c2adb 100644
--- a/jerry-core/ecma/base/ecma-globals.h
+++ b/jerry-core/ecma/base/ecma-globals.h
@@ -772,6 +772,7 @@ typedef enum
#if JERRY_ESNEXT
ECMA_OBJECT_CLASS_PROMISE, /**< Promise (ECMAScript v6, 25.4) */
ECMA_OBJECT_CLASS_PROMISE_CAPABILITY, /**< Promise capability (ECMAScript v6, 25.4.1.1) */
+ ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR, /**< AsyncFromSyncIterator (ECMAScript v11, 25.1.4) */
#endif /* JERRY_ESNEXT */
#if JERRY_BUILTIN_DATAVIEW
ECMA_OBJECT_CLASS_DATAVIEW, /**< DataView (ECMAScript v6, 24.2) */
@@ -1124,6 +1125,7 @@ typedef struct
ecma_value_t head; /**< points to the async generator task queue head item */
ecma_value_t iterated_value; /**< for %Iterator%: [[IteratedObject]] property */
ecma_value_t promise; /**< PromiseCapability[[Promise]] internal slot */
+ ecma_value_t sync_iterator; /**< IteratorRecord [[Iterator]] internal slot for AsyncFromSyncIterator */
ecma_value_t spread_value; /**< for spread object: spreaded element */
int32_t tza; /**< TimeZone adjustment for date objects */
#endif /* JERRY_ESNEXT */
@@ -2507,6 +2509,14 @@ typedef enum
ECMA_CONSTRUCTOR_FUNCTION_HAS_HERITAGE = (1 << 0), /**< heritage object is present */
} ecma_constructor_function_flags_t;
+/**
+ * Description of AsyncFromSyncIterator objects.
+ */
+typedef struct
+{
+ ecma_extended_object_t header; /**< header part */
+ ecma_value_t sync_next_method; /**< IteratorRecord [[NextMethod]] internal slot */
+} ecma_async_from_sync_iterator_object_t;
#endif /* JERRY_ESNEXT */
/**
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-async-from-sync-iterator-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-async-from-sync-iterator-prototype.c
new file mode 100644
index 00000000..eb26c2ee
--- /dev/null
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-async-from-sync-iterator-prototype.c
@@ -0,0 +1,374 @@
+/* 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.
+ */
+
+#include "ecma-builtin-handlers.h"
+#include "ecma-builtins.h"
+#include "ecma-exceptions.h"
+#include "ecma-function-object.h"
+#include "ecma-gc.h"
+#include "ecma-globals.h"
+#include "ecma-helpers.h"
+#include "ecma-iterator-object.h"
+#include "ecma-objects.h"
+#include "ecma-promise-object.h"
+#include "jcontext.h"
+#include "jerryscript-types.h"
+#include "jrt.h"
+#include "lit-magic-strings.h"
+#include "lit-strings.h"
+#include "opcodes.h"
+#include "vm-defines.h"
+
+#if JERRY_ESNEXT
+
+#define ECMA_BUILTINS_INTERNAL
+#include "ecma-builtins-internal.h"
+
+/**
+ * This object has a custom dispatch function.
+ */
+#define BUILTIN_CUSTOM_DISPATCH
+
+/**
+ * List of built-in routine identifiers.
+ */
+enum
+{
+ ECMA_ASYNC_FROM_SYNC_ITERATOR_PROTOTYPE_ROUTINE_START = 0, /**< buitlin routine start id */
+ ECMA_ASYNC_FROM_SYNC_ITERATOR_PROTOTYPE_ROUTINE_NEXT, /**< 'next' routine v11, 25.1.4.2.1 */
+ ECMA_ASYNC_FROM_SYNC_ITERATOR_PROTOTYPE_ROUTINE_RETURN, /**< 'return' routine v11, 25.1.4.2.2 */
+ ECMA_ASYNC_FROM_SYNC_ITERATOR_PROTOTYPE_ROUTINE_THROW /**< 'throw' routine v11, 25.1.4.2.3 */
+} ecma_async_from_sync_iterator_operation_type_t;
+
+#define BUILTIN_INC_HEADER_NAME "ecma-builtin-async-from-sync-iterator-prototype.inc.h"
+#define BUILTIN_UNDERSCORED_ID async_from_sync_iterator_prototype
+#include "ecma-builtin-internal-routines-template.inc.h"
+
+/** \addtogroup ecma ECMA
+ * @{
+ *
+ * \addtogroup ecmabuiltins
+ * @{
+ *
+ * \addtogroup generator ECMA %AsyncFromSyncIteratorPrototype% object built-in
+ * @{
+ */
+
+/**
+ * AsyncFromSyncIteratorContinuation operation
+ *
+ * See also:
+ * ECMAScript v11, 25.1.4.4
+ *
+ * @return ecma value
+ * Returned value must be freed with ecma_free_value.
+ */
+static ecma_value_t
+ecma_op_async_from_sync_iterator_prototype_continuation (ecma_value_t result, /**< routine's 'result' argument */
+ ecma_object_t *capability_obj_p) /**< promise capability */
+{
+ /* 1. */
+ ecma_value_t done = ecma_op_iterator_complete (result);
+
+ /* 2. */
+ if (ECMA_IS_VALUE_ERROR (ecma_op_if_abrupt_reject_promise (&done, capability_obj_p)))
+ {
+ return done;
+ }
+
+ uint16_t done_flag = ecma_is_value_false (done) ? 0 : (1 << ECMA_NATIVE_HANDLER_COMMON_FLAGS_SHIFT);
+ ecma_free_value (done);
+
+ /* 3. */
+ ecma_value_t value = ecma_op_iterator_value (result);
+
+ /* 4. */
+ if (ECMA_IS_VALUE_ERROR (ecma_op_if_abrupt_reject_promise (&value, capability_obj_p)))
+ {
+ return value;
+ }
+
+ /* 5. */
+ ecma_value_t builtin_promise = ecma_make_object_value (ecma_builtin_get (ECMA_BUILTIN_ID_PROMISE));
+ ecma_value_t value_wrapper = ecma_promise_reject_or_resolve (builtin_promise, value, true);
+ ecma_free_value (value);
+
+ /* 6. */
+ if (ECMA_IS_VALUE_ERROR (ecma_op_if_abrupt_reject_promise (&value_wrapper, capability_obj_p)))
+ {
+ return value_wrapper;
+ }
+
+ /* 8 - 9. */
+ ecma_object_t *on_fullfilled = ecma_op_create_native_handler (ECMA_NATIVE_HANDLER_ASYNC_FROM_SYNC_ITERATOR_UNWRAP,
+ sizeof (ecma_extended_object_t));
+ ((ecma_extended_object_t *) on_fullfilled)->u.built_in.u2.routine_flags = (uint8_t) done_flag;
+
+ /* 10. */
+ ecma_value_t then_result = ecma_promise_perform_then (value_wrapper,
+ ecma_make_object_value (on_fullfilled),
+ ECMA_VALUE_UNDEFINED,
+ capability_obj_p);
+
+ JERRY_ASSERT (!ECMA_IS_VALUE_ERROR (then_result));
+ ecma_deref_object (on_fullfilled);
+ ecma_free_value (value_wrapper);
+
+ /* 11. */
+ return then_result;
+} /* ecma_op_async_from_sync_iterator_prototype_continuation */
+
+/**
+ * The %AsyncFromSyncIteratorPrototype% object's 'next' routine
+ *
+ * See also:
+ * ECMAScript v11, 25.1.4.2.1
+ *
+ * @return ecma value
+ * Returned value must be freed with ecma_free_value.
+ */
+static ecma_value_t
+ecma_builtin_async_from_sync_iterator_prototype_next (ecma_async_from_sync_iterator_object_t *iter_p, /**< iterator
+ * record*/
+ ecma_object_t *capability_p, /**< promise capability */
+ ecma_value_t value) /**< routine's 'value' argument */
+{
+ /* 5. */
+ ecma_value_t next_result = ecma_op_iterator_next (iter_p->header.u.cls.u3.sync_iterator,
+ iter_p->sync_next_method,
+ value);
+
+ /* 6. */
+ if (ECMA_IS_VALUE_ERROR (ecma_op_if_abrupt_reject_promise (&next_result, capability_p)))
+ {
+ return next_result;
+ }
+
+ /* 7. */
+ ecma_value_t result = ecma_op_async_from_sync_iterator_prototype_continuation (next_result, capability_p);
+ ecma_free_value (next_result);
+
+ return result;
+} /* ecma_builtin_async_from_sync_iterator_prototype_next */
+
+/**
+ * The %AsyncFromSyncIteratorPrototype% object's 'return' and 'throw' routines
+ *
+ * See also:
+ * ECMAScript v11, 25.1.4.2.2
+ * ECMAScript v11, 25.1.4.2.3
+ *
+ * @return ecma value
+ * Returned value must be freed with ecma_free_value.
+ */
+static ecma_value_t
+ecma_builtin_async_from_sync_iterator_prototype_do (ecma_async_from_sync_iterator_object_t *iter_p, /**< iterator
+ * record*/
+ ecma_object_t *capability_obj_p, /**< promise capability */
+ ecma_value_t value, /**< routine's 'value' argument */
+ lit_magic_string_id_t method_id) /**< method id */
+{
+ /* 5. */
+ ecma_value_t sync_iterator = iter_p->header.u.cls.u3.sync_iterator;
+ ecma_value_t method = ecma_op_get_method_by_magic_id (sync_iterator, method_id);
+
+ /* 6. */
+ if (ECMA_IS_VALUE_ERROR (ecma_op_if_abrupt_reject_promise (&method, capability_obj_p)))
+ {
+ return method;
+ }
+
+ ecma_promise_capabality_t *capability_p = (ecma_promise_capabality_t *) capability_obj_p;
+
+ ecma_value_t call_arg;
+ uint32_t arg_size;
+
+ if (ecma_is_value_empty (value))
+ {
+ arg_size = 0;
+ call_arg = ECMA_VALUE_UNDEFINED;
+ }
+ else
+ {
+ arg_size = 1;
+ call_arg = value;
+ }
+
+ /* 7. */
+ if (ecma_is_value_undefined (method))
+ {
+ ecma_value_t func_obj;
+
+ if (method_id == LIT_MAGIC_STRING_RETURN)
+ {
+ /* 7.a. */
+ call_arg = ecma_create_iter_result_object (call_arg, ECMA_VALUE_TRUE);
+ arg_size = 1;
+ func_obj = capability_p->resolve;
+ }
+ else
+ {
+ func_obj = capability_p->reject;
+ }
+
+ /* 7.b. */
+ ecma_value_t resolve = ecma_op_function_call (ecma_get_object_from_value (func_obj),
+ ECMA_VALUE_UNDEFINED,
+ &call_arg,
+ arg_size);
+ JERRY_ASSERT (!ECMA_IS_VALUE_ERROR (resolve));
+ ecma_free_value (resolve);
+
+ if (method_id == LIT_MAGIC_STRING_RETURN)
+ {
+ ecma_free_value (call_arg);
+ }
+
+ /* 7.c. */
+ return ecma_copy_value (capability_p->header.u.cls.u3.promise);
+ }
+
+ /* 8. */
+ ecma_value_t call_result;
+
+ if (!ecma_op_is_callable (method))
+ {
+ ecma_free_value (method);
+ call_result = ecma_raise_type_error (ECMA_ERR_MSG (ecma_error_expected_a_function));
+ }
+ else
+ {
+ ecma_object_t *method_func_obj = ecma_get_object_from_value (method);
+ call_result = ecma_op_function_call (method_func_obj, sync_iterator, &call_arg, arg_size);
+ ecma_deref_object (method_func_obj);
+ }
+
+ /* 9. */
+ if (ECMA_IS_VALUE_ERROR (ecma_op_if_abrupt_reject_promise (&call_result, capability_obj_p)))
+ {
+ return call_result;
+ }
+
+ /* 10. */
+ if (!ecma_is_value_object (call_result))
+ {
+ ecma_free_value (call_result);
+
+#if JERRY_ERROR_MESSAGES
+ const lit_utf8_byte_t *msg_p = (const lit_utf8_byte_t *) ecma_error_argument_is_not_an_object;
+ lit_utf8_size_t msg_size = (lit_utf8_size_t) ecma_error_argument_is_not_an_object_length;
+ JERRY_ASSERT (lit_zt_utf8_string_size (msg_p) == msg_size);
+ ecma_string_t *error_msg_p = ecma_new_ecma_string_from_ascii (msg_p, msg_size);
+#else /* !JERRY_ERROR_MESSAGES */
+ ecma_string_t *error_msg_p = ecma_get_magic_string (LIT_MAGIC_STRING__EMPTY);
+#endif /* JERRY_ERROR_MESSAGES */
+
+ ecma_object_t *type_error_obj_p = ecma_new_standard_error (JERRY_ERROR_TYPE, error_msg_p);
+
+#if JERRY_ERROR_MESSAGES
+ ecma_deref_ecma_string (error_msg_p);
+#endif /* JERRY_ERROR_MESSAGES */
+
+ ecma_value_t type_error = ecma_make_object_value (type_error_obj_p);
+
+ /* 10.a. */
+ ecma_value_t reject = ecma_op_function_call (ecma_get_object_from_value (capability_p->reject),
+ ECMA_VALUE_UNDEFINED,
+ &type_error,
+ 1);
+ JERRY_ASSERT (!ECMA_IS_VALUE_ERROR (reject));
+ ecma_deref_object (type_error_obj_p);
+ ecma_free_value (reject);
+
+ /* 10.b. */
+ return ecma_copy_value (capability_p->header.u.cls.u3.promise);
+ }
+
+ ecma_value_t result = ecma_op_async_from_sync_iterator_prototype_continuation (call_result, capability_obj_p);
+ ecma_free_value (call_result);
+
+ return result;
+} /* ecma_builtin_async_from_sync_iterator_prototype_do */
+
+/**
+ * Dispatcher of the %AsyncFromSyncIteratorPrototype% built-in's routines
+ *
+ * @return ecma value
+ * Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_async_from_sync_iterator_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+ * routine
+ * identifier */
+ ecma_value_t this_arg, /**< 'this' argument value */
+ const ecma_value_t arguments_list_p[], /**< list of
+ * arguments
+ * passed to
+ * routine */
+ uint32_t arguments_number) /**< length of
+ * arguments' list */
+{
+ JERRY_UNUSED (arguments_number);
+ JERRY_ASSERT (ecma_is_value_object (this_arg));
+
+ ecma_object_t *this_obj_p = ecma_get_object_from_value (this_arg);
+
+ JERRY_ASSERT (ecma_object_class_is (this_obj_p, ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR));
+
+ ecma_async_from_sync_iterator_object_t *iter_p = (ecma_async_from_sync_iterator_object_t *) this_obj_p;
+
+ ecma_value_t builtin_promise = ecma_make_object_value (ecma_builtin_get (ECMA_BUILTIN_ID_PROMISE));
+ ecma_object_t *capability_p = ecma_promise_new_capability (builtin_promise, ECMA_VALUE_UNDEFINED);
+ JERRY_ASSERT (capability_p != NULL);
+
+ ecma_value_t result;
+ ecma_value_t arg = (arguments_number == 0 ? ECMA_VALUE_EMPTY : arguments_list_p[0]);
+
+ switch (builtin_routine_id)
+ {
+ case ECMA_ASYNC_FROM_SYNC_ITERATOR_PROTOTYPE_ROUTINE_NEXT:
+ {
+ result = ecma_builtin_async_from_sync_iterator_prototype_next (iter_p, capability_p, arg);
+ break;
+ }
+ case ECMA_ASYNC_FROM_SYNC_ITERATOR_PROTOTYPE_ROUTINE_RETURN:
+ {
+ result = ecma_builtin_async_from_sync_iterator_prototype_do (iter_p, capability_p, arg, LIT_MAGIC_STRING_RETURN);
+ break;
+ }
+ case ECMA_ASYNC_FROM_SYNC_ITERATOR_PROTOTYPE_ROUTINE_THROW:
+ {
+ result = ecma_builtin_async_from_sync_iterator_prototype_do (iter_p, capability_p, arg, LIT_MAGIC_STRING_THROW);
+ break;
+ }
+ default:
+ {
+ JERRY_UNREACHABLE ();
+ break;
+ }
+ }
+
+ ecma_deref_object (capability_p);
+
+ return result;
+} /* ecma_builtin_async_from_sync_iterator_prototype_dispatch_routine */
+
+/**
+ * @}
+ * @}
+ * @}
+ */
+
+#endif /* JERRY_ESNEXT */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-async-from-sync-iterator-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-async-from-sync-iterator-prototype.inc.h
new file mode 100644
index 00000000..c1413fcb
--- /dev/null
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-async-from-sync-iterator-prototype.inc.h
@@ -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.
+ */
+
+/*
+ * %AsyncFromSyncIteratorPrototype% built-in description (AsyncFunction.prototype)
+ */
+
+#include "ecma-builtin-helpers-macro-defines.inc.h"
+
+#if JERRY_ESNEXT
+
+/* Routine properties:
+ * (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
+ROUTINE (LIT_MAGIC_STRING_NEXT, ECMA_ASYNC_FROM_SYNC_ITERATOR_PROTOTYPE_ROUTINE_NEXT, 1, 1)
+ROUTINE (LIT_MAGIC_STRING_RETURN, ECMA_ASYNC_FROM_SYNC_ITERATOR_PROTOTYPE_ROUTINE_RETURN, 1, 1)
+ROUTINE (LIT_MAGIC_STRING_THROW, ECMA_ASYNC_FROM_SYNC_ITERATOR_PROTOTYPE_ROUTINE_THROW, 1, 1)
+
+#endif /* JERRY_ESNEXT */
+
+#include "ecma-builtin-helpers-macro-undefs.inc.h"
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-handlers.c b/jerry-core/ecma/builtin-objects/ecma-builtin-handlers.c
index 0b9ba20f..984e9823 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-handlers.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-handlers.c
@@ -19,6 +19,7 @@
#include "ecma-builtin-handlers.h"
#include "ecma-promise-object.h"
+#include "ecma-iterator-object.h"
static const ecma_builtin_handler_t ecma_native_handlers[] =
{
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-handlers.h b/jerry-core/ecma/builtin-objects/ecma-builtin-handlers.h
index ce0e7dbe..de582adc 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-handlers.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-handlers.h
@@ -44,7 +44,7 @@ typedef enum
/**
* Shift for Promise helper handler function.
*/
-#define ECMA_NATIVE_HANDLER_FLAGS_PROMISE_HELPER_SHIFT 2
+#define ECMA_NATIVE_HANDLER_COMMON_FLAGS_SHIFT 2
ecma_builtin_handler_t
ecma_builtin_handler_get (ecma_native_handler_id_t id);
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-handlers.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-handlers.inc.h
index 3e61e08e..b5b7a60e 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-handlers.inc.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-handlers.inc.h
@@ -19,6 +19,7 @@ ECMA_NATIVE_HANDLER (ECMA_NATIVE_HANDLER_PROMISE_THEN_FINALLY, ecma_promise_then
ECMA_NATIVE_HANDLER (ECMA_NATIVE_HANDLER_PROMISE_CATCH_FINALLY, ecma_promise_catch_finally_cb, 1)
ECMA_NATIVE_HANDLER (ECMA_NATIVE_HANDLER_PROMISE_ALL_HELPER, ecma_promise_all_or_all_settled_handler_cb, 1)
ECMA_NATIVE_HANDLER (ECMA_NATIVE_HANDLER_PROMISE_CAPABILITY_EXECUTOR, ecma_op_get_capabilities_executor_cb, 2)
+ECMA_NATIVE_HANDLER (ECMA_NATIVE_HANDLER_ASYNC_FROM_SYNC_ITERATOR_UNWRAP, ecma_async_from_sync_iterator_unwrap_cb, 1)
#if JERRY_BUILTIN_PROXY
ECMA_NATIVE_HANDLER (ECMA_NATIVE_HANDLER_PROXY_REVOKE, ecma_proxy_revoke_cb, 0)
#endif /* JERRY_BUILTIN_PROXY */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c b/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c
index 831aef3d..55afaa34 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c
@@ -66,45 +66,6 @@ enum
*/
/**
- * Reject the promise if the value is error.
- *
- * See also:
- * ES2015 25.4.1.1.1
- *
- * @return ecma value of the new promise.
- * Returned value must be freed with ecma_free_value.
- */
-static inline ecma_value_t
-ecma_builtin_promise_reject_abrupt (ecma_value_t value, /**< value */
- ecma_object_t *capability_obj_p) /**< capability */
-{
- JERRY_ASSERT (ecma_object_class_is (capability_obj_p, ECMA_OBJECT_CLASS_PROMISE_CAPABILITY));
-
- if (!ECMA_IS_VALUE_ERROR (value))
- {
- return value;
- }
-
- ecma_value_t reason = jcontext_take_exception ();
-
- ecma_promise_capabality_t *capability_p = (ecma_promise_capabality_t *) capability_obj_p;
- ecma_value_t call_ret = ecma_op_function_call (ecma_get_object_from_value (capability_p->reject),
- ECMA_VALUE_UNDEFINED,
- &reason,
- 1);
- ecma_free_value (reason);
-
- if (ECMA_IS_VALUE_ERROR (call_ret))
- {
- return call_ret;
- }
-
- ecma_free_value (call_ret);
-
- return ecma_copy_value (capability_p->header.u.cls.u3.promise);
-} /* ecma_builtin_promise_reject_abrupt */
-
-/**
* Runtime Semantics: PerformPromiseRace.
*
* See also:
@@ -118,7 +79,6 @@ ecma_builtin_promise_perform_race (ecma_value_t iterator, /**< the iterator for
ecma_value_t next_method, /**< next method */
ecma_object_t *capability_obj_p, /**< PromiseCapability record */
ecma_value_t ctor, /**< Constructor value */
- ecma_value_t resolve, /** the resolve of Promise.all */
bool *done_p) /**< [out] iteratorRecord[[done]] */
{
JERRY_ASSERT (ecma_is_value_object (iterator));
@@ -127,6 +87,20 @@ ecma_builtin_promise_perform_race (ecma_value_t iterator, /**< the iterator for
ecma_promise_capabality_t *capability_p = (ecma_promise_capabality_t *) capability_obj_p;
+ ecma_value_t resolve = ecma_op_object_get_by_magic_id (ecma_get_object_from_value (ctor),
+ LIT_MAGIC_STRING_RESOLVE);
+
+ if (ECMA_IS_VALUE_ERROR (resolve))
+ {
+ return resolve;
+ }
+
+ if (!ecma_op_is_callable (resolve))
+ {
+ ecma_free_value (resolve);
+ return ecma_raise_type_error (ECMA_ERR_MSG ("Resolve method must be callable"));
+ }
+
ecma_object_t *resolve_func_p = ecma_get_object_from_value (resolve);
ecma_value_t ret_value = ECMA_VALUE_ERROR;
@@ -184,6 +158,8 @@ ecma_builtin_promise_perform_race (ecma_value_t iterator, /**< the iterator for
done:
*done_p = true;
exit:
+ ecma_deref_object (resolve_func_p);
+
return ret_value;
} /* ecma_builtin_promise_perform_race */
@@ -201,7 +177,6 @@ ecma_builtin_promise_perform (ecma_value_t iterator, /**< iteratorRecord */
ecma_value_t next_method, /**< next method */
ecma_object_t *capability_obj_p, /**< PromiseCapability record */
ecma_value_t ctor, /**< the caller of Promise.all */
- ecma_value_t resolve, /** the resolve of Promise.all */
uint8_t builtin_routine_id, /**< built-in wide routine identifier */
bool *done_p) /**< [out] iteratorRecord[[done]] */
{
@@ -211,6 +186,20 @@ ecma_builtin_promise_perform (ecma_value_t iterator, /**< iteratorRecord */
ecma_promise_capabality_t *capability_p = (ecma_promise_capabality_t *) capability_obj_p;
+ ecma_value_t resolve = ecma_op_object_get_by_magic_id (ecma_get_object_from_value (ctor),
+ LIT_MAGIC_STRING_RESOLVE);
+
+ if (ECMA_IS_VALUE_ERROR (resolve))
+ {
+ return resolve;
+ }
+
+ if (!ecma_op_is_callable (resolve))
+ {
+ ecma_free_value (resolve);
+ return ecma_raise_type_error (ECMA_ERR_MSG ("Resolve method must be callable"));
+ }
+
ecma_object_t *resolve_func_p = ecma_get_object_from_value (resolve);
/* 3. */
@@ -321,11 +310,11 @@ ecma_builtin_promise_perform (ecma_value_t iterator, /**< iteratorRecord */
/* p. */
executor_p->remaining_elements = remaining;
- uint8_t executor_type = ECMA_PROMISE_ALL_RESOLVE << ECMA_NATIVE_HANDLER_FLAGS_PROMISE_HELPER_SHIFT;
+ uint8_t executor_type = ECMA_PROMISE_ALL_RESOLVE << ECMA_NATIVE_HANDLER_COMMON_FLAGS_SHIFT;
if (builtin_routine_id == ECMA_PROMISE_ROUTINE_ALLSETTLED)
{
- executor_type = ECMA_PROMISE_ALLSETTLED_RESOLVE << ECMA_NATIVE_HANDLER_FLAGS_PROMISE_HELPER_SHIFT;
+ executor_type = ECMA_PROMISE_ALLSETTLED_RESOLVE << ECMA_NATIVE_HANDLER_COMMON_FLAGS_SHIFT;
}
executor_p->header.u.built_in.u2.routine_flags |= executor_type;
@@ -343,11 +332,11 @@ ecma_builtin_promise_perform (ecma_value_t iterator, /**< iteratorRecord */
if (builtin_routine_id != ECMA_PROMISE_ROUTINE_ALL)
{
- uint8_t executor_type = ECMA_PROMISE_ALLSETTLED_REJECT << ECMA_NATIVE_HANDLER_FLAGS_PROMISE_HELPER_SHIFT;
+ uint8_t executor_type = ECMA_PROMISE_ALLSETTLED_REJECT << ECMA_NATIVE_HANDLER_COMMON_FLAGS_SHIFT;
if (builtin_routine_id == ECMA_PROMISE_ROUTINE_ANY)
{
- executor_type = ECMA_PROMISE_ANY_REJECT << ECMA_NATIVE_HANDLER_FLAGS_PROMISE_HELPER_SHIFT;
+ executor_type = ECMA_PROMISE_ANY_REJECT << ECMA_NATIVE_HANDLER_COMMON_FLAGS_SHIFT;
}
ecma_object_t *reject_func_p = ecma_op_create_native_handler (ECMA_NATIVE_HANDLER_PROMISE_ALL_HELPER,
@@ -390,6 +379,8 @@ done:
exit:
ecma_free_value (remaining);
ecma_deref_object (values_array_obj_p);
+ ecma_deref_object (resolve_func_p);
+
return ret_value;
} /* ecma_builtin_promise_perform */
@@ -411,41 +402,22 @@ ecma_builtin_promise_helper (ecma_value_t this_arg, /**< 'this' argument */
return ECMA_VALUE_ERROR;
}
- ecma_value_t resolve = ecma_op_object_get_by_magic_id (ecma_get_object_from_value (this_arg),
- LIT_MAGIC_STRING_RESOLVE);
-
- if (ECMA_IS_VALUE_ERROR (resolve))
- {
- resolve = ecma_builtin_promise_reject_abrupt (resolve, capability_obj_p);
- ecma_deref_object (capability_obj_p);
- return resolve;
- }
-
- if (!ecma_op_is_callable (resolve))
- {
- ecma_free_value (resolve);
- ecma_raise_type_error (ECMA_ERR_MSG ("Resolve method must be callable"));
- resolve = ecma_builtin_promise_reject_abrupt (ECMA_VALUE_ERROR, capability_obj_p);
- ecma_deref_object (capability_obj_p);
- return resolve;
- }
-
ecma_value_t next_method;
ecma_value_t iterator = ecma_op_get_iterator (iterable, ECMA_VALUE_SYNC_ITERATOR, &next_method);
- iterator = ecma_builtin_promise_reject_abrupt (iterator, capability_obj_p);
+ ecma_value_t ret = ECMA_VALUE_ERROR;
- if (ECMA_IS_VALUE_ERROR (iterator))
+ if (ECMA_IS_VALUE_ERROR (ecma_op_if_abrupt_reject_promise (&iterator, capability_obj_p)))
{
+ ecma_free_value (next_method);
ecma_deref_object (capability_obj_p);
return iterator;
}
- ecma_value_t ret = ECMA_VALUE_EMPTY;
bool is_done = false;
if (builtin_routine_id == ECMA_PROMISE_ROUTINE_RACE)
{
- ret = ecma_builtin_promise_perform_race (iterator, next_method, capability_obj_p, this_arg, resolve, &is_done);
+ ret = ecma_builtin_promise_perform_race (iterator, next_method, capability_obj_p, this_arg, &is_done);
}
else
{
@@ -453,7 +425,6 @@ ecma_builtin_promise_helper (ecma_value_t this_arg, /**< 'this' argument */
next_method,
capability_obj_p,
this_arg,
- resolve,
builtin_routine_id,
&is_done);
}
@@ -465,12 +436,11 @@ ecma_builtin_promise_helper (ecma_value_t this_arg, /**< 'this' argument */
ret = ecma_op_iterator_close (iterator);
}
- ret = ecma_builtin_promise_reject_abrupt (ret, capability_obj_p);
+ ecma_op_if_abrupt_reject_promise (&ret, capability_obj_p);
}
ecma_free_value (iterator);
ecma_free_value (next_method);
- ecma_free_value (resolve);
ecma_deref_object (capability_obj_p);
return ret;
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtins.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtins.inc.h
index 66d0e23e..d03868d1 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtins.inc.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtins.inc.h
@@ -701,6 +701,13 @@ BUILTIN (ECMA_BUILTIN_ID_ASYNC_ITERATOR_PROTOTYPE,
true,
async_iterator_prototype)
+/* The %AsyncFromSyncIteratorPrototype% object (ECMA-262 v11, 25.1.4.2) */
+BUILTIN (ECMA_BUILTIN_ID_ASYNC_FROM_SYNC_ITERATOR_PROTOTYPE,
+ ECMA_OBJECT_TYPE_BUILT_IN_GENERAL,
+ ECMA_BUILTIN_ID_ASYNC_ITERATOR_PROTOTYPE,
+ true,
+ async_from_sync_iterator_prototype)
+
/* The %(GeneratorFunction)% object */
BUILTIN_ROUTINE (ECMA_BUILTIN_ID_GENERATOR_FUNCTION,
ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION,
diff --git a/jerry-core/ecma/operations/ecma-iterator-object.c b/jerry-core/ecma/operations/ecma-iterator-object.c
index ac8b963f..cf066d05 100644
--- a/jerry-core/ecma/operations/ecma-iterator-object.c
+++ b/jerry-core/ecma/operations/ecma-iterator-object.c
@@ -202,16 +202,49 @@ ecma_op_get_iterator (ecma_value_t value, /**< value to get iterator from */
return method;
}
}
+ /* 3.a */
else if (method == ECMA_VALUE_ASYNC_ITERATOR)
{
- /* TODO: CreateAsyncFromSyncIterator should be supported. */
use_default_method = true;
+
+ /* 3.a.i */
method = ecma_op_get_method_by_symbol_id (value, LIT_GLOBAL_SYMBOL_ASYNC_ITERATOR);
if (ECMA_IS_VALUE_ERROR (method))
{
return method;
}
+
+ /* 3.a.ii */
+
+ if (ecma_is_value_undefined (method))
+ {
+ method = ecma_op_get_method_by_symbol_id (value, LIT_GLOBAL_SYMBOL_ITERATOR);
+
+ if (ECMA_IS_VALUE_ERROR (method))
+ {
+ return method;
+ }
+
+ ecma_value_t sync_next_method;
+ ecma_value_t sync_iterator = ecma_op_get_iterator (value, method, &sync_next_method);
+
+ if (ECMA_IS_VALUE_ERROR (sync_iterator))
+ {
+ ecma_free_value (method);
+ return sync_iterator;
+ }
+
+ ecma_value_t async_iterator = ecma_op_create_async_from_sync_iterator (sync_iterator,
+ sync_next_method,
+ next_method_p);
+
+ ecma_free_value (method);
+ ecma_free_value (sync_iterator);
+ ecma_free_value (sync_next_method);
+
+ return async_iterator;
+ }
}
/* 3. */
@@ -397,6 +430,35 @@ ecma_op_iterator_throw (ecma_value_t iterator, /**< iterator value */
} /* ecma_op_iterator_throw */
/**
+ * IteratorComplete operation
+ *
+ * See also: ECMA-262 v10, 7.4.3
+ *
+ * @return true/false - whether the iteration ended
+ */
+ecma_value_t
+ecma_op_iterator_complete (ecma_value_t iter_result) /**< iterator value */
+{
+ /* 1. */
+ JERRY_ASSERT (ecma_is_value_object (iter_result));
+
+ /* 2. */
+ ecma_object_t *obj_p = ecma_get_object_from_value (iter_result);
+
+ ecma_value_t done = ecma_op_object_get_by_magic_id (obj_p, LIT_MAGIC_STRING_DONE);
+
+ if (ECMA_IS_VALUE_ERROR (done))
+ {
+ return done;
+ }
+
+ ecma_value_t res = ecma_make_boolean_value (ecma_op_to_boolean (done));
+ ecma_free_value (done);
+
+ return res;
+} /* ecma_op_iterator_complete */
+
+/**
* IteratorValue operation
*
* See also: ECMA-262 v6, 7.4.4
@@ -623,6 +685,66 @@ ecma_op_iterator_do (ecma_iterator_command_type_t command, /**< command to be ex
return result;
} /* ecma_op_iterator_do */
+/**
+ * CreateAsyncFromSyncIterator operation
+ *
+ * See also: ECMA-262 v10, 25.1.4.1
+ *
+ * Note:
+ * Returned value must be freed with ecma_free_value.
+ *
+ * @return async from sync iterator object
+ */
+ecma_value_t
+ecma_op_create_async_from_sync_iterator (ecma_value_t sync_iterator, /**< sync iterator */
+ ecma_value_t sync_next_method, /**< sync iterator next method */
+ ecma_value_t *async_next_method_p) /**< [out] async next method */
+{
+ JERRY_ASSERT (ecma_is_value_object (sync_iterator));
+ JERRY_ASSERT (ecma_is_value_object (sync_next_method) || ecma_is_value_undefined (sync_next_method));
+
+ /* 1. */
+ ecma_object_t *obj_p = ecma_create_object (ecma_builtin_get (ECMA_BUILTIN_ID_ASYNC_FROM_SYNC_ITERATOR_PROTOTYPE),
+ sizeof (ecma_async_from_sync_iterator_object_t),
+ ECMA_OBJECT_TYPE_CLASS);
+
+ ecma_async_from_sync_iterator_object_t *ext_obj_p = (ecma_async_from_sync_iterator_object_t *) obj_p;
+
+ /* 2. */
+ ext_obj_p->sync_next_method = sync_next_method;
+ ext_obj_p->header.u.cls.u3.sync_iterator = sync_iterator;
+ ext_obj_p->header.u.cls.type = ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR;
+
+ /* 3. */
+ *async_next_method_p = ecma_op_object_get_by_magic_id (obj_p, LIT_MAGIC_STRING_NEXT);
+ JERRY_ASSERT (!ECMA_IS_VALUE_ERROR (*async_next_method_p));
+
+ /* 4. */
+ return ecma_make_object_value (obj_p);
+} /* ecma_op_create_async_from_sync_iterator */
+
+/**
+ * Async-from-Sync Iterator Value Unwrap Functions
+ *
+ * See also: ES11 25.1.4.2.4
+ *
+ * @return iterator result object
+ */
+ecma_value_t
+ecma_async_from_sync_iterator_unwrap_cb (ecma_object_t *function_obj_p, /**< function object */
+ const ecma_value_t args_p[], /**< argument list */
+ const uint32_t args_count) /**< argument number */
+{
+ ecma_extended_object_t *unwrap_p = (ecma_extended_object_t *) function_obj_p;
+
+ /* 2. */
+ ecma_value_t arg = args_count > 0 ? args_p[0] : ECMA_VALUE_UNDEFINED;
+ ecma_value_t done = ecma_make_boolean_value (unwrap_p->u.built_in.u2.routine_flags
+ >> ECMA_NATIVE_HANDLER_COMMON_FLAGS_SHIFT);
+
+ return ecma_create_iter_result_object (arg, done);
+} /* ecma_async_from_sync_iterator_unwrap_cb */
+
#endif /* JERRY_ESNEXT */
/**
diff --git a/jerry-core/ecma/operations/ecma-iterator-object.h b/jerry-core/ecma/operations/ecma-iterator-object.h
index 9699bded..157b3432 100644
--- a/jerry-core/ecma/operations/ecma-iterator-object.h
+++ b/jerry-core/ecma/operations/ecma-iterator-object.h
@@ -59,6 +59,9 @@ ecma_value_t
ecma_op_get_iterator (ecma_value_t value, ecma_value_t method, ecma_value_t *next_method_p);
ecma_value_t
+ecma_op_iterator_complete (ecma_value_t iter_result);
+
+ecma_value_t
ecma_op_iterator_value (ecma_value_t iter_result);
ecma_value_t
@@ -74,6 +77,15 @@ ecma_value_t
ecma_op_iterator_do (ecma_iterator_command_type_t command, ecma_value_t iterator,
ecma_value_t next_method, ecma_value_t value, bool *done_p);
+ecma_value_t
+ecma_op_create_async_from_sync_iterator (ecma_value_t sync_iterator, ecma_value_t sync_next_method,
+ ecma_value_t *async_next_method_p);
+
+ecma_value_t
+ecma_async_from_sync_iterator_unwrap_cb (ecma_object_t *function_obj_p,
+ const ecma_value_t args_p[],
+ const uint32_t args_count);
+
#endif /* JERRY_ESNEXT */
/**
diff --git a/jerry-core/ecma/operations/ecma-objects.c b/jerry-core/ecma/operations/ecma-objects.c
index a4aaf366..597f60a8 100644
--- a/jerry-core/ecma/operations/ecma-objects.c
+++ b/jerry-core/ecma/operations/ecma-objects.c
@@ -2937,6 +2937,7 @@ static const uint16_t ecma_class_object_magic_string_id[] =
#if JERRY_ESNEXT
LIT_MAGIC_STRING_PROMISE_UL, /**< magic string id of ECMA_OBJECT_CLASS_PROMISE */
LIT_MAGIC_STRING_OBJECT_UL, /**< magic string id of ECMA_OBJECT_CLASS_PROMISE_CAPABILITY */
+ LIT_MAGIC_STRING_OBJECT_UL, /**< magic string id of ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR */
#endif /* JERRY_ESNEXT */
#if JERRY_BUILTIN_DATAVIEW
LIT_MAGIC_STRING_DATAVIEW_UL, /**< magic string id of ECMA_OBJECT_CLASS_DATAVIEW */
diff --git a/jerry-core/ecma/operations/ecma-promise-object.c b/jerry-core/ecma/operations/ecma-promise-object.c
index 3c6b7378..b5d135d8 100644
--- a/jerry-core/ecma/operations/ecma-promise-object.c
+++ b/jerry-core/ecma/operations/ecma-promise-object.c
@@ -607,7 +607,7 @@ ecma_promise_all_or_all_settled_handler_cb (ecma_object_t *function_obj_p, /**<
ecma_promise_all_executor_t *executor_p = (ecma_promise_all_executor_t *) function_obj_p;
uint8_t promise_type = executor_p->header.u.built_in.u2.routine_flags;
- promise_type = (uint8_t) (promise_type >> ECMA_NATIVE_HANDLER_FLAGS_PROMISE_HELPER_SHIFT);
+ promise_type = (uint8_t) (promise_type >> ECMA_NATIVE_HANDLER_COMMON_FLAGS_SHIFT);
/* 1 - 2. */
if (executor_p->index == 0)
@@ -895,103 +895,6 @@ ecma_promise_reject_or_resolve (ecma_value_t this_arg, /**< "this" argument */
} /* ecma_promise_reject_or_resolve */
/**
- * It performs the "then" operation on promiFulfilled
- * and onRejected as its settlement actions.
- *
- * See also: 25.4.5.3.1
- *
- * @return ecma value of the new promise object
- * Returned value must be freed with ecma_free_value
- */
-static ecma_value_t
-ecma_promise_do_then (ecma_value_t promise, /**< the promise which call 'then' */
- ecma_value_t on_fulfilled, /**< on_fulfilled function */
- ecma_value_t on_rejected, /**< on_rejected function */
- ecma_object_t *result_capability_obj_p) /**< promise capability */
-{
- JERRY_ASSERT (ecma_object_class_is (result_capability_obj_p, ECMA_OBJECT_CLASS_PROMISE_CAPABILITY));
-
- ecma_promise_capabality_t *capability_p = (ecma_promise_capabality_t *) result_capability_obj_p;
-
- /* 3. boolean true indicates "indentity" */
- if (!ecma_op_is_callable (on_fulfilled))
- {
- on_fulfilled = ECMA_VALUE_TRUE;
- }
-
- /* 4. boolean false indicates "thrower" */
- if (!ecma_op_is_callable (on_rejected))
- {
- on_rejected = ECMA_VALUE_FALSE;
- }
-
- ecma_object_t *promise_obj_p = ecma_get_object_from_value (promise);
- ecma_promise_object_t *promise_p = (ecma_promise_object_t *) promise_obj_p;
-
- uint16_t flags = ecma_promise_get_flags (promise_obj_p);
-
- if (flags & ECMA_PROMISE_IS_PENDING)
- {
- /* 7. */
- /* [ capability, (on_fulfilled), (on_rejected) ] */
- ecma_value_t reaction_values[3];
- ecma_value_t *reactions_p = reaction_values + 1;
-
- uint8_t tag = 0;
-
- if (on_fulfilled != ECMA_VALUE_TRUE)
- {
- tag |= JMEM_FIRST_TAG_BIT_MASK;
- *reactions_p++ = on_fulfilled;
- }
-
- if (on_rejected != ECMA_VALUE_FALSE)
- {
- tag |= JMEM_SECOND_TAG_BIT_MASK;
- *reactions_p++ = on_rejected;
- }
-
- ECMA_SET_NON_NULL_POINTER_TAG (reaction_values[0], result_capability_obj_p, tag);
-
- uint32_t value_count = (uint32_t) (reactions_p - reaction_values);
- ecma_collection_append (promise_p->reactions, reaction_values, value_count);
- }
- else if (flags & ECMA_PROMISE_IS_FULFILLED)
- {
- /* 8. */
- ecma_value_t value = ecma_promise_get_result (promise_obj_p);
- ecma_enqueue_promise_reaction_job (ecma_make_object_value (result_capability_obj_p), on_fulfilled, value);
- ecma_free_value (value);
- }
- else
- {
- /* 9. */
- ecma_value_t reason = ecma_promise_get_result (promise_obj_p);
- ecma_enqueue_promise_reaction_job (ecma_make_object_value (result_capability_obj_p), on_rejected, reason);
- ecma_free_value (reason);
-
-#if JERRY_PROMISE_CALLBACK
- if (ecma_promise_get_flags (promise_obj_p) & ECMA_PROMISE_UNHANDLED_REJECT)
- {
- promise_p->header.u.cls.u1.promise_flags &= (uint8_t) ~ECMA_PROMISE_UNHANDLED_REJECT;
-
- if (JERRY_UNLIKELY (JERRY_CONTEXT (promise_callback_filters) & JERRY_PROMISE_EVENT_FILTER_ERROR))
- {
- JERRY_ASSERT (JERRY_CONTEXT (promise_callback) != NULL);
- JERRY_CONTEXT (promise_callback) (JERRY_PROMISE_EVENT_CATCH_HANDLER_ADDED,
- promise,
- ECMA_VALUE_UNDEFINED,
- JERRY_CONTEXT (promise_callback_user_p));
- }
- }
-#endif /* JERRY_PROMISE_CALLBACK */
- }
-
- /* 10. */
- return ecma_copy_value (capability_p->header.u.cls.u3.promise);
-} /* ecma_promise_do_then */
-
-/**
* The common function for ecma_builtin_promise_prototype_then
* and ecma_builtin_promise_prototype_catch.
*
@@ -1029,7 +932,7 @@ ecma_promise_then (ecma_value_t promise, /**< the promise which call 'then' */
return ECMA_VALUE_ERROR;
}
- ecma_value_t ret = ecma_promise_do_then (promise, on_fulfilled, on_rejected, result_capability_obj_p);
+ ecma_value_t ret = ecma_promise_perform_then (promise, on_fulfilled, on_rejected, result_capability_obj_p);
ecma_deref_object (result_capability_obj_p);
return ret;
@@ -1327,6 +1230,144 @@ ecma_promise_async_await (ecma_extended_object_t *async_generator_object_p, /**<
} /* ecma_promise_async_await */
/**
+ * Reject the promise if the value is error.
+ *
+ * See also:
+ * ES2015 25.4.1.1.1
+ *
+ * @return ecma value of the new promise.
+ * Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_op_if_abrupt_reject_promise (ecma_value_t *value_p, /**< [in - out] completion value */
+ ecma_object_t *capability_obj_p) /**< capability */
+{
+ JERRY_ASSERT (ecma_object_class_is (capability_obj_p, ECMA_OBJECT_CLASS_PROMISE_CAPABILITY));
+
+ if (!ECMA_IS_VALUE_ERROR (*value_p))
+ {
+ return ECMA_VALUE_EMPTY;
+ }
+
+ ecma_value_t reason = jcontext_take_exception ();
+
+ ecma_promise_capabality_t *capability_p = (ecma_promise_capabality_t *) capability_obj_p;
+ ecma_value_t call_ret = ecma_op_function_call (ecma_get_object_from_value (capability_p->reject),
+ ECMA_VALUE_UNDEFINED,
+ &reason,
+ 1);
+ ecma_free_value (reason);
+
+ if (ECMA_IS_VALUE_ERROR (call_ret))
+ {
+ *value_p = call_ret;
+ return call_ret;
+ }
+
+ ecma_free_value (call_ret);
+ *value_p = ecma_copy_value (capability_p->header.u.cls.u3.promise);
+
+ return ECMA_VALUE_EMPTY;
+} /* ecma_op_if_abrupt_reject_promise */
+
+/**
+ * It performs the "then" operation on promiFulfilled
+ * and onRejected as its settlement actions.
+ *
+ * See also: 25.4.5.3.1
+ *
+ * @return ecma value of the new promise object
+ * Returned value must be freed with ecma_free_value
+ */
+ecma_value_t
+ecma_promise_perform_then (ecma_value_t promise, /**< the promise which call 'then' */
+ ecma_value_t on_fulfilled, /**< on_fulfilled function */
+ ecma_value_t on_rejected, /**< on_rejected function */
+ ecma_object_t *result_capability_obj_p) /**< promise capability */
+{
+ JERRY_ASSERT (ecma_object_class_is (result_capability_obj_p, ECMA_OBJECT_CLASS_PROMISE_CAPABILITY));
+
+ ecma_promise_capabality_t *capability_p = (ecma_promise_capabality_t *) result_capability_obj_p;
+
+ /* 3. boolean true indicates "indentity" */
+ if (!ecma_op_is_callable (on_fulfilled))
+ {
+ on_fulfilled = ECMA_VALUE_TRUE;
+ }
+
+ /* 4. boolean false indicates "thrower" */
+ if (!ecma_op_is_callable (on_rejected))
+ {
+ on_rejected = ECMA_VALUE_FALSE;
+ }
+
+ ecma_object_t *promise_obj_p = ecma_get_object_from_value (promise);
+ ecma_promise_object_t *promise_p = (ecma_promise_object_t *) promise_obj_p;
+
+ uint16_t flags = ecma_promise_get_flags (promise_obj_p);
+
+ if (flags & ECMA_PROMISE_IS_PENDING)
+ {
+ /* 7. */
+ /* [ capability, (on_fulfilled), (on_rejected) ] */
+ ecma_value_t reaction_values[3];
+ ecma_value_t *reactions_p = reaction_values + 1;
+
+ uint8_t tag = 0;
+
+ if (on_fulfilled != ECMA_VALUE_TRUE)
+ {
+ tag |= JMEM_FIRST_TAG_BIT_MASK;
+ *reactions_p++ = on_fulfilled;
+ }
+
+ if (on_rejected != ECMA_VALUE_FALSE)
+ {
+ tag |= JMEM_SECOND_TAG_BIT_MASK;
+ *reactions_p++ = on_rejected;
+ }
+
+ ECMA_SET_NON_NULL_POINTER_TAG (reaction_values[0], result_capability_obj_p, tag);
+
+ uint32_t value_count = (uint32_t) (reactions_p - reaction_values);
+ ecma_collection_append (promise_p->reactions, reaction_values, value_count);
+ }
+ else if (flags & ECMA_PROMISE_IS_FULFILLED)
+ {
+ /* 8. */
+ ecma_value_t value = ecma_promise_get_result (promise_obj_p);
+ ecma_enqueue_promise_reaction_job (ecma_make_object_value (result_capability_obj_p), on_fulfilled, value);
+ ecma_free_value (value);
+ }
+ else
+ {
+ /* 9. */
+ ecma_value_t reason = ecma_promise_get_result (promise_obj_p);
+ ecma_enqueue_promise_reaction_job (ecma_make_object_value (result_capability_obj_p), on_rejected, reason);
+ ecma_free_value (reason);
+
+#if JERRY_PROMISE_CALLBACK
+ if (ecma_promise_get_flags (promise_obj_p) & ECMA_PROMISE_UNHANDLED_REJECT)
+ {
+ promise_p->header.u.cls.u1.promise_flags &= (uint8_t) ~ECMA_PROMISE_UNHANDLED_REJECT;
+
+ if (JERRY_UNLIKELY (JERRY_CONTEXT (promise_callback_filters) & JERRY_PROMISE_EVENT_FILTER_ERROR))
+ {
+ JERRY_ASSERT (JERRY_CONTEXT (promise_callback) != NULL);
+ JERRY_CONTEXT (promise_callback) (JERRY_PROMISE_EVENT_CATCH_HANDLER_ADDED,
+ promise,
+ ECMA_VALUE_UNDEFINED,
+ JERRY_CONTEXT (promise_callback_user_p));
+ }
+ }
+#endif /* JERRY_PROMISE_CALLBACK */
+ }
+
+ /* 10. */
+ return ecma_copy_value (capability_p->header.u.cls.u3.promise);
+} /* ecma_promise_perform_then */
+
+/**
* @}
* @}
*/
diff --git a/jerry-core/ecma/operations/ecma-promise-object.h b/jerry-core/ecma/operations/ecma-promise-object.h
index 852f474f..df9cb2ce 100644
--- a/jerry-core/ecma/operations/ecma-promise-object.h
+++ b/jerry-core/ecma/operations/ecma-promise-object.h
@@ -129,9 +129,15 @@ ecma_value_t ecma_promise_finally (ecma_value_t promise, ecma_value_t on_finally
void ecma_promise_async_then (ecma_value_t promise, ecma_value_t executable_object);
ecma_value_t ecma_promise_async_await (ecma_extended_object_t *async_generator_object_p, ecma_value_t value);
ecma_value_t ecma_promise_run_executor (ecma_object_t *promise_p, ecma_value_t executor, ecma_value_t this_value);
+ecma_value_t ecma_op_if_abrupt_reject_promise (ecma_value_t *value_p, ecma_object_t *capability_obj_p);
uint32_t ecma_promise_remaining_inc_or_dec (ecma_value_t remaining, bool is_inc);
+ecma_value_t ecma_promise_perform_then (ecma_value_t promise,
+ ecma_value_t on_fulfilled,
+ ecma_value_t on_rejected,
+ ecma_object_t *result_capability_obj_p);
+
/**
* @}
* @}
diff --git a/tests/jerry/es.next/async-from-sync-iterator.js b/tests/jerry/es.next/async-from-sync-iterator.js
new file mode 100644
index 00000000..97d2b269
--- /dev/null
+++ b/tests/jerry/es.next/async-from-sync-iterator.js
@@ -0,0 +1,210 @@
+/* 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.
+ */
+
+/* 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.
+ */
+
+async function f() {
+ let arr_idx = 0;
+ for await (let a of [0, 1, 2, 3]) {
+ assert(arr_idx++ == a);
+ }
+
+ let char_code = "a".charCodeAt(0);
+ for await (let a of "abc") {
+ assert(char_code++ == a.charCodeAt(0));
+ }
+
+ let set_idx = 0;
+ for await (let a of new Set([0, 1, 2, 3])) {
+ assert(set_idx++ == a);
+ }
+
+ let map_idx = 0;
+ for await (let [key, value] of new Map([0, 1, 2, 3].entries())) {
+ assert(map_idx++ == value);
+ }
+}
+
+async function* asyncg(obj) {
+ yield* obj;
+}
+
+async function f1() {
+ var caught = false;
+ var iter = asyncg({
+ get [Symbol.iterator]() {
+ throw "Symbol.iteratorError"
+ },
+ });
+
+ iter.next().catch(e => {
+ caught = true;
+ assert(e === "Symbol.iteratorError")
+ }).then(e => {
+ assert(caught)
+ });
+}
+
+async function f2() {
+ var caught = false;
+ var iter = asyncg({
+ [Symbol.iterator]() {
+ return {
+ next() {
+ throw "nextError";
+ },
+ };
+ },
+ });
+
+ iter.next().catch(e => {
+ caught = true;
+ assert(e === "nextError")
+ }).then(e => {
+ assert(caught)
+ });
+}
+
+async function f3() {
+ var caught = false;
+ var iter = asyncg({
+ [Symbol.iterator]() {
+ return {
+ next() {
+ return {
+ get value() {
+ throw "valueError"
+ },
+ done: false
+ };
+ },
+ };
+ },
+ });
+
+ iter.next().catch(e => {
+ caught = true;
+ assert(e === "valueError")
+ }).then(e => {
+ assert(caught)
+ });
+}
+
+async function f4() {
+ var caught = false;
+ var iter = asyncg({
+ [Symbol.iterator]() {
+ return {
+ next() {
+ return {
+ value: "value",
+ get done() {
+ throw "doneError"
+ },
+ };
+ },
+ };
+ },
+ });
+
+ iter.next().catch(e => {
+ caught = true;
+ assert(e === "doneError")
+ }).then(e => {
+ assert(caught)
+ });
+}
+
+async function f5() {
+ var caught = false;
+
+ var iter = asyncg({
+ [Symbol.iterator]() {
+ return {
+ next() {
+ return {
+ value: 1,
+ done: false
+ };
+ },
+ get return () {
+ throw "returnError"
+ }
+ };
+ }
+ });
+
+ iter.next().then(function (res) {
+ assert(res.value === 1);
+ assert(!res.done);
+ iter.return().catch(e => {
+ caught = true;
+ assert(e == "returnError");
+ }).then(e => {
+ assert(caught);
+ });
+ });
+}
+
+async function f6() {
+ var caught = false;
+
+ var iter = asyncg({
+ [Symbol.iterator]() {
+ return {
+ next() {
+ return {
+ value: 1,
+ done: false
+ };
+ },
+ get throw () {
+ throw "throwError"
+ }
+ };
+ }
+ });
+
+ iter.next().then(function (res) {
+ assert(res.value === 1);
+ assert(!res.done);
+ iter.throw().catch(e => {
+ caught = true;
+ assert(e == "throwError");
+ }).then(e => {
+ assert(caught);
+ });
+ });
+}
+
+const tests = [f, f1, f2, f3, f4, f5, f6];
+
+for (let t of tests) {
+ t();
+}
+
diff --git a/tests/jerry/es.next/promise-all-iterator.js b/tests/jerry/es.next/promise-all-iterator.js
index 773aabea..eaae9f94 100644
--- a/tests/jerry/es.next/promise-all-iterator.js
+++ b/tests/jerry/es.next/promise-all-iterator.js
@@ -78,7 +78,7 @@ rejects.catch(result => { assert (result === "baz"); });
var closed = true;
delete Promise.resolve;
Promise.all(createIterable([1,2,3], {'return': function () { closed = false; }}));
-assert (closed);
+assert (!closed);
var arr = [];
Object.defineProperty(arr, Symbol.species, { get: function () { assert(false) }});
diff --git a/tests/jerry/es.next/promise-all-settled.js b/tests/jerry/es.next/promise-all-settled.js
index 1ad71012..896545bd 100644
--- a/tests/jerry/es.next/promise-all-settled.js
+++ b/tests/jerry/es.next/promise-all-settled.js
@@ -100,7 +100,7 @@ rejects.then(result => {
var closed = true;
delete Promise.resolve;
Promise.allSettled(createIterable([1,2,3], {'return': function () { closed = false; }}));
-assert (closed);
+assert (!closed);
var arr = [];
Object.defineProperty(arr, Symbol.species, { get: function () { assert(false) }});
diff --git a/tests/jerry/es.next/promise-any.js b/tests/jerry/es.next/promise-any.js
index 238ac152..8b313136 100644
--- a/tests/jerry/es.next/promise-any.js
+++ b/tests/jerry/es.next/promise-any.js
@@ -82,7 +82,7 @@ rejects.catch(result => { assert (result == "AggregateError"); });
var closed = true;
delete Promise.resolve;
Promise.any(createIterable([1,2,3], {'return': function () { closed = false; }}));
-assert (closed);
+assert (!closed);
var arr = [];
Object.defineProperty(arr, Symbol.species, { get: function () { assert(false) }});
diff --git a/tests/jerry/es.next/promise-race-iterator.js b/tests/jerry/es.next/promise-race-iterator.js
index 61f3a2f2..36f6d09a 100644
--- a/tests/jerry/es.next/promise-race-iterator.js
+++ b/tests/jerry/es.next/promise-race-iterator.js
@@ -66,7 +66,7 @@ rejects.catch(result => { assert (result === "baz"); });
var closed = true;
delete Promise.resolve;
Promise.race(createIterable([1,2,3], {'return': function () { closed = false; }}));
-assert (closed);
+assert (!closed);
var arr = [];
Object.defineProperty(arr, Symbol.species, { get: function () { assert(false) }});
diff --git a/tests/test262-esnext-excludelist.xml b/tests/test262-esnext-excludelist.xml
index aaa42b9f..637564d2 100644
--- a/tests/test262-esnext-excludelist.xml
+++ b/tests/test262-esnext-excludelist.xml
@@ -6476,31 +6476,6 @@
features: [async-iteration]
https://github.com/tc39/proposal-async-iteration
-->
- <test id="built-ins/AsyncFromSyncIteratorPrototype/next/absent-value-not-passed.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/next/iterator-result-poisoned-done.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/next/iterator-result-poisoned-value.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/next/iterator-result-prototype.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/next/iterator-result-rejected.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/next/iterator-result-unwrap-promise.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/return/absent-value-not-passed.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/return/iterator-result-poisoned-done.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/return/iterator-result-poisoned-value.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/return/iterator-result-unwrap-promise.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/return/iterator-result.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/return/poisoned-get-return.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/return/poisoned-return.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/return/result-object-error.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/return/return-null.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/return/return-undefined.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/throw/iterator-result-poisoned-done.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/throw/iterator-result-poisoned-value.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/throw/iterator-result-unwrap-promise.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/throw/iterator-result.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/throw/poisoned-get-throw.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/throw/poisoned-throw.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/throw/result-object-error.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/throw/throw-null.js"><reason></reason></test>
- <test id="built-ins/AsyncFromSyncIteratorPrototype/throw/throw-undefined.js"><reason></reason></test>
<test id="built-ins/AsyncGeneratorFunction/instance-await-expr-in-param.js"><reason></reason></test>
<test id="built-ins/AsyncGeneratorFunction/instance-yield-expr-in-param.js"><reason></reason></test>
<test id="built-ins/AsyncGeneratorPrototype/next/request-queue-await-order.js"><reason></reason></test>
@@ -6547,57 +6522,21 @@
<test id="language/expressions/async-generator/named-eval-var-scope-syntax-err.js"><reason></reason></test>
<test id="language/expressions/async-generator/named-yield-promise-reject-next-catch.js"><reason></reason></test>
<test id="language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-async-iterator.js"><reason></reason></test>
- <test id="language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-sync-iterator.js"><reason></reason></test>
- <test id="language/expressions/async-generator/named-yield-promise-reject-next-yield-star-sync-iterator.js"><reason></reason></test>
<test id="language/expressions/async-generator/named-yield-promise-reject-next.js"><reason></reason></test>
- <test id="language/expressions/async-generator/named-yield-star-getiter-async-null-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/async-generator/named-yield-star-getiter-async-undefined-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/async-generator/named-yield-star-getiter-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/async-generator/named-yield-star-getiter-sync-returns-abrupt.js"><reason></reason></test>
- <test id="language/expressions/async-generator/named-yield-star-sync-next.js"><reason></reason></test>
- <test id="language/expressions/async-generator/named-yield-star-sync-return.js"><reason></reason></test>
- <test id="language/expressions/async-generator/named-yield-star-sync-throw.js"><reason></reason></test>
<test id="language/expressions/async-generator/yield-promise-reject-next-catch.js"><reason></reason></test>
<test id="language/expressions/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js"><reason></reason></test>
- <test id="language/expressions/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js"><reason></reason></test>
- <test id="language/expressions/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js"><reason></reason></test>
<test id="language/expressions/async-generator/yield-promise-reject-next.js"><reason></reason></test>
- <test id="language/expressions/async-generator/yield-star-getiter-async-null-sync-get-abrupt.js"><reason></reason></test>
<test id="language/expressions/async-generator/yield-star-getiter-async-return-method-is-null.js"><reason></reason></test>
<test id="language/expressions/async-generator/yield-star-getiter-async-throw-method-is-null.js"><reason></reason></test>
- <test id="language/expressions/async-generator/yield-star-getiter-async-undefined-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/async-generator/yield-star-getiter-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/async-generator/yield-star-getiter-sync-returns-abrupt.js"><reason></reason></test>
- <test id="language/expressions/async-generator/yield-star-sync-next.js"><reason></reason></test>
- <test id="language/expressions/async-generator/yield-star-sync-return.js"><reason></reason></test>
- <test id="language/expressions/async-generator/yield-star-sync-throw.js"><reason></reason></test>
<test id="language/expressions/async-generator/yield-thenable-create-resolving-functions-reject.js"><reason></reason></test>
<test id="language/expressions/async-generator/yield-thenable-create-resolving-functions-resolve.js"><reason></reason></test>
<test id="language/expressions/await/for-await-of-interleaved.js"><reason></reason></test>
<test id="language/expressions/class/async-gen-method-static/yield-promise-reject-next-catch.js"><reason></reason></test>
<test id="language/expressions/class/async-gen-method-static/yield-promise-reject-next-for-await-of-async-iterator.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method-static/yield-promise-reject-next-for-await-of-sync-iterator.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method-static/yield-promise-reject-next-yield-star-sync-iterator.js"><reason></reason></test>
<test id="language/expressions/class/async-gen-method-static/yield-promise-reject-next.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method-static/yield-star-getiter-async-null-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method-static/yield-star-getiter-async-undefined-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method-static/yield-star-getiter-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method-static/yield-star-getiter-sync-returns-abrupt.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method-static/yield-star-sync-next.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method-static/yield-star-sync-return.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method-static/yield-star-sync-throw.js"><reason></reason></test>
<test id="language/expressions/class/async-gen-method/yield-promise-reject-next-catch.js"><reason></reason></test>
<test id="language/expressions/class/async-gen-method/yield-promise-reject-next-for-await-of-async-iterator.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method/yield-promise-reject-next-for-await-of-sync-iterator.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method/yield-promise-reject-next-yield-star-sync-iterator.js"><reason></reason></test>
<test id="language/expressions/class/async-gen-method/yield-promise-reject-next.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method/yield-star-getiter-async-null-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method/yield-star-getiter-async-undefined-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method/yield-star-getiter-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method/yield-star-getiter-sync-returns-abrupt.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method/yield-star-sync-next.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method/yield-star-sync-return.js"><reason></reason></test>
- <test id="language/expressions/class/async-gen-method/yield-star-sync-throw.js"><reason></reason></test>
<test id="language/expressions/class/dstr/async-private-gen-meth-ary-init-iter-close.js"><reason></reason></test>
<test id="language/expressions/class/dstr/async-private-gen-meth-ary-init-iter-no-close.js"><reason></reason></test>
<test id="language/expressions/class/dstr/async-private-gen-meth-ary-name-iter-val.js"><reason></reason></test>
@@ -7059,16 +6998,7 @@
<test id="language/expressions/object/method-definition/async-gen-meth-eval-var-scope-syntax-err.js"><reason></reason></test>
<test id="language/expressions/object/method-definition/async-gen-yield-promise-reject-next-catch.js"><reason></reason></test>
<test id="language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-async-iterator.js"><reason></reason></test>
- <test id="language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-sync-iterator.js"><reason></reason></test>
- <test id="language/expressions/object/method-definition/async-gen-yield-promise-reject-next-yield-star-sync-iterator.js"><reason></reason></test>
<test id="language/expressions/object/method-definition/async-gen-yield-promise-reject-next.js"><reason></reason></test>
- <test id="language/expressions/object/method-definition/async-gen-yield-star-getiter-async-null-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/object/method-definition/async-gen-yield-star-getiter-async-undefined-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/object/method-definition/async-gen-yield-star-getiter-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/expressions/object/method-definition/async-gen-yield-star-getiter-sync-returns-abrupt.js"><reason></reason></test>
- <test id="language/expressions/object/method-definition/async-gen-yield-star-sync-next.js"><reason></reason></test>
- <test id="language/expressions/object/method-definition/async-gen-yield-star-sync-return.js"><reason></reason></test>
- <test id="language/expressions/object/method-definition/async-gen-yield-star-sync-throw.js"><reason></reason></test>
<test id="language/module-code/top-level-await/syntax/for-await-await-expr-array-literal.js"><reason></reason></test>
<test id="language/module-code/top-level-await/syntax/for-await-await-expr-func-expression.js"><reason></reason></test>
<test id="language/module-code/top-level-await/syntax/for-await-await-expr-identifier.js"><reason></reason></test>
@@ -7085,43 +7015,15 @@
<test id="language/statements/async-generator/return-undefined-implicit-and-explicit.js"><reason></reason></test>
<test id="language/statements/async-generator/yield-promise-reject-next-catch.js"><reason></reason></test>
<test id="language/statements/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js"><reason></reason></test>
- <test id="language/statements/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js"><reason></reason></test>
- <test id="language/statements/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js"><reason></reason></test>
<test id="language/statements/async-generator/yield-promise-reject-next.js"><reason></reason></test>
<test id="language/statements/async-generator/yield-return-then-getter-ticks.js"><reason></reason></test>
- <test id="language/statements/async-generator/yield-star-async-from-sync-iterator-inaccessible.js"><reason></reason></test>
- <test id="language/statements/async-generator/yield-star-getiter-async-null-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/statements/async-generator/yield-star-getiter-async-undefined-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/statements/async-generator/yield-star-getiter-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/statements/async-generator/yield-star-getiter-sync-returns-abrupt.js"><reason></reason></test>
<test id="language/statements/async-generator/yield-star-return-then-getter-ticks.js"><reason></reason></test>
- <test id="language/statements/async-generator/yield-star-sync-next.js"><reason></reason></test>
- <test id="language/statements/async-generator/yield-star-sync-return.js"><reason></reason></test>
- <test id="language/statements/async-generator/yield-star-sync-throw.js"><reason></reason></test>
<test id="language/statements/class/async-gen-method-static/yield-promise-reject-next-catch.js"><reason></reason></test>
<test id="language/statements/class/async-gen-method-static/yield-promise-reject-next-for-await-of-async-iterator.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method-static/yield-promise-reject-next-for-await-of-sync-iterator.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method-static/yield-promise-reject-next-yield-star-sync-iterator.js"><reason></reason></test>
<test id="language/statements/class/async-gen-method-static/yield-promise-reject-next.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method-static/yield-star-getiter-async-null-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method-static/yield-star-getiter-async-undefined-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method-static/yield-star-getiter-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method-static/yield-star-getiter-sync-returns-abrupt.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method-static/yield-star-sync-next.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method-static/yield-star-sync-return.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method-static/yield-star-sync-throw.js"><reason></reason></test>
<test id="language/statements/class/async-gen-method/yield-promise-reject-next-catch.js"><reason></reason></test>
<test id="language/statements/class/async-gen-method/yield-promise-reject-next-for-await-of-async-iterator.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method/yield-promise-reject-next-for-await-of-sync-iterator.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method/yield-promise-reject-next-yield-star-sync-iterator.js"><reason></reason></test>
<test id="language/statements/class/async-gen-method/yield-promise-reject-next.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method/yield-star-getiter-async-null-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method/yield-star-getiter-async-undefined-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method/yield-star-getiter-sync-get-abrupt.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method/yield-star-getiter-sync-returns-abrupt.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method/yield-star-sync-next.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method/yield-star-sync-return.js"><reason></reason></test>
- <test id="language/statements/class/async-gen-method/yield-star-sync-throw.js"><reason></reason></test>
<test id="language/statements/class/dstr/async-private-gen-meth-ary-init-iter-close.js"><reason></reason></test>
<test id="language/statements/class/dstr/async-private-gen-meth-ary-init-iter-no-close.js"><reason></reason></test>
<test id="language/statements/class/dstr/async-private-gen-meth-ary-name-iter-val.js"><reason></reason></test>
@@ -7556,152 +7458,8 @@
<test id="language/statements/class/elements/same-line-async-gen-static-private-methods-with-fields.js"><reason></reason></test>
<test id="language/statements/class/elements/same-line-async-gen-static-private-methods.js"><reason></reason></test>
<test id="language/statements/class/elements/syntax/valid/grammar-static-private-async-gen-meth-prototype.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-decl-dstr-array-elem-put-prop-ref-user-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-decl-dstr-array-elem-put-unresolvable-strict.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-decl-dstr-array-elem-trlg-iter-elision-iter-nrml-close-null.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-ary-init-iter-get-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-iter-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-iter-val-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elision-iter-close.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elision-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-id-elision-next-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-id-iter-close.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-id-iter-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-id-iter-val-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-get-value-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-obj-ptrn-list-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-eval-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-id-get-value-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-ary-init-iter-get-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-iter-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-iter-val-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elision-iter-close.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elision-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-id-elision-next-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-id-iter-close.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-id-iter-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-id-iter-val-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-get-value-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-obj-ptrn-list-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-eval-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-id-get-value-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-ary-init-iter-get-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-iter-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-iter-val-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elision-iter-close.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elision-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-id-elision-next-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-id-iter-close.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-id-iter-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-id-iter-val-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-get-value-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-obj-ptrn-list-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-eval-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-id-get-value-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-yield-expr.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-get-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-nrml-close-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-nrml-close-null.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-nrml-close-skip.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-rtrn-close-null.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-thrw-close-skip.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-array-yield-expr.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-obj-yield-expr.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-prop-ref-user-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-unresolvable-strict.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-target-yield-expr.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-elision-iter-nrml-close-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-elision-iter-nrml-close-null.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-list-nrml-close-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-list-thrw-close-skip.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-rest-nrml-close-skip.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-array-yield-expr.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-yield-expr.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-array-rest-yield-expr.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-yield-expr.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-yield-expr.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-target-yield-expr.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-obj-prop-nested-array-yield-expr.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-decl-dstr-obj-prop-nested-obj-yield-expr.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-ary-init-iter-get-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-iter-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-iter-val-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elision-iter-close.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elision-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-id-elision-next-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-id-iter-close.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-id-iter-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-id-iter-val-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-get-value-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-list-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-eval-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-id-get-value-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-ary-init-iter-get-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-iter-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-iter-val-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elision-iter-close.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elision-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-id-elision-next-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-id-iter-close.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-id-iter-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-id-iter-val-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-get-value-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-list-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-eval-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-id-get-value-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-ary-init-iter-get-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-iter-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-iter-val-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elision-iter-close.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elision-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-id-elision-next-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-id-iter-close.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-id-iter-step-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-id-iter-val-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-get-value-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-unresolvable.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-list-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-eval-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-id-get-value-err.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-id-init-throws.js"><reason></reason></test>
- <test id="language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-id-init-unresolvable.js"><reason></reason></test>
<test id="language/statements/for-await-of/let-block-with-newline.js"><reason></reason></test>
<test id="language/statements/for-await-of/let-identifier-with-newline.js"><reason></reason></test>
- <test id="language/statements/for-await-of/ticks-with-sync-iter-resolved-promise-and-constructor-lookup.js"><reason></reason></test>
<test id="language/statements/switch/syntax/redeclaration/async-function-name-redeclaration-attempt-with-async-generator.js"><reason></reason></test>
<test id="language/statements/switch/syntax/redeclaration/async-generator-name-redeclaration-attempt-with-async-function.js"><reason></reason></test>
<test id="language/statements/switch/syntax/redeclaration/async-generator-name-redeclaration-attempt-with-async-generator.js"><reason></reason></test>
@@ -7876,6 +7634,18 @@
<test id="language/global-code/script-decl-var-err.js"><reason></reason></test>
<!-- Missing test262 support in JerryScript REPL - missing $262 object -->
+ <!-- No longer valid tests: since ECMAScript v11 GetIterator operator should be performed
+ before accessing "resolve" property
+ -->
+ <test id="built-ins/Promise/all/invoke-resolve-get-error.js"><reason></reason></test>
+ <test id="built-ins/Promise/all/resolve-non-callable.js"><reason></reason></test>
+ <test id="built-ins/Promise/allSettled/invoke-resolve-get-error.js"><reason></reason></test>
+ <test id="built-ins/Promise/allSettled/resolve-non-callable.js"><reason></reason></test>
+ <test id="built-ins/Promise/any/invoke-resolve-get-error.js"><reason></reason></test>
+ <test id="built-ins/Promise/any/resolve-non-callable.js"><reason></reason></test>
+ <test id="built-ins/Promise/race/invoke-resolve-get-error.js"><reason></reason></test>
+ <test id="built-ins/Promise/race/resolve-non-callable.js"><reason></reason></test>
+
<!-- Missing test262 support in JerryScript REPL - missing $262.detachArrayBuffer function
https://github.com/tc39/test262/blob/main/INTERPRETING.md#host-defined-functions
-->
@@ -7886,4 +7656,9 @@
<test id="built-ins/Atomics/waitAsync/bigint/null-bufferdata-throws.js"><reason></reason></test>
<test id="built-ins/Atomics/waitAsync/null-bufferdata-throws.js"><reason></reason></test>
<!-- END - Missing test262 support in JerryScript REPL - missing $262.detachArrayBuffer function -->
+
+ <!-- Missing $test262.IsHTMLDDA support
+ -->
+ <test id="annexB/language/statements/for-await-of/iterator-close-return-emulates-undefined-throws-when-called.js"><reason></reason></test>
+ <!-- END - Missing $test262.IsHTMLDDA support -->
</excludeList>