Implement CreateAsyncFromSyncIterator (#4802)
JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik robert.fancsik@h-lab.eu
This commit is contained in:
@@ -160,6 +160,7 @@ set(SOURCE_CORE_FILES
|
|||||||
ecma/builtin-objects/ecma-builtin-array.c
|
ecma/builtin-objects/ecma-builtin-array.c
|
||||||
ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.c
|
ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.c
|
||||||
ecma/builtin-objects/ecma-builtin-arraybuffer.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-prototype.c
|
||||||
ecma/builtin-objects/ecma-builtin-async-function.c
|
ecma/builtin-objects/ecma-builtin-async-function.c
|
||||||
ecma/builtin-objects/ecma-builtin-async-generator-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-array.inc.h
|
||||||
ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.inc.h
|
ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.inc.h
|
||||||
ecma/builtin-objects/ecma-builtin-arraybuffer.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-prototype.inc.h
|
||||||
ecma/builtin-objects/ecma-builtin-async-function.inc.h
|
ecma/builtin-objects/ecma-builtin-async-function.inc.h
|
||||||
ecma/builtin-objects/ecma-builtin-async-generator-function.inc.h
|
ecma/builtin-objects/ecma-builtin-async-generator-function.inc.h
|
||||||
|
|||||||
@@ -1542,6 +1542,7 @@ static const uint8_t jerry_class_object_type[] =
|
|||||||
#if JERRY_ESNEXT
|
#if JERRY_ESNEXT
|
||||||
JERRY_OBJECT_TYPE_PROMISE, /**< type of ECMA_OBJECT_CLASS_PROMISE */
|
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_PROMISE_CAPABILITY */
|
||||||
|
JERRY_OBJECT_TYPE_GENERIC, /**< type of ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR */
|
||||||
#endif /* JERRY_ESNEXT */
|
#endif /* JERRY_ESNEXT */
|
||||||
#if JERRY_BUILTIN_DATAVIEW
|
#if JERRY_BUILTIN_DATAVIEW
|
||||||
JERRY_OBJECT_TYPE_DATAVIEW, /**< type of ECMA_OBJECT_CLASS_DATAVIEW */
|
JERRY_OBJECT_TYPE_DATAVIEW, /**< type of ECMA_OBJECT_CLASS_DATAVIEW */
|
||||||
|
|||||||
@@ -129,6 +129,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";
|
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
|
* Error message, argument is not a Proxy object
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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_cannot_convert_to_object;
|
||||||
extern const char * const ecma_error_class_is_non_configurable;
|
extern const char * const ecma_error_class_is_non_configurable;
|
||||||
extern const char * const ecma_error_argument_is_not_an_object;
|
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_argument_is_not_a_proxy;
|
||||||
extern const char * const ecma_error_target_is_not_a_constructor;
|
extern const char * const ecma_error_target_is_not_a_constructor;
|
||||||
extern const char * const ecma_error_argument_is_not_an_regexp;
|
extern const char * const ecma_error_argument_is_not_an_regexp;
|
||||||
|
|||||||
@@ -1013,6 +1013,19 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
|
|||||||
}
|
}
|
||||||
break;
|
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_ARRAY_ITERATOR:
|
||||||
case ECMA_OBJECT_CLASS_SET_ITERATOR:
|
case ECMA_OBJECT_CLASS_SET_ITERATOR:
|
||||||
case ECMA_OBJECT_CLASS_MAP_ITERATOR:
|
case ECMA_OBJECT_CLASS_MAP_ITERATOR:
|
||||||
@@ -1208,6 +1221,10 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ECMA_NATIVE_HANDLER_ASYNC_FROM_SYNC_ITERATOR_UNWRAP:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
JERRY_UNREACHABLE ();
|
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);
|
ext_object_size = sizeof (ecma_promise_capabality_t);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR:
|
||||||
|
{
|
||||||
|
ext_object_size = sizeof (ecma_async_from_sync_iterator_object_t);
|
||||||
|
break;
|
||||||
|
}
|
||||||
#endif /* JERRY_ESNEXT */
|
#endif /* JERRY_ESNEXT */
|
||||||
#if JERRY_MODULE_SYSTEM
|
#if JERRY_MODULE_SYSTEM
|
||||||
case ECMA_OBJECT_CLASS_MODULE:
|
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);
|
ext_object_size = sizeof (ecma_promise_value_thunk_t);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ECMA_NATIVE_HANDLER_ASYNC_FROM_SYNC_ITERATOR_UNWRAP:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
JERRY_UNREACHABLE ();
|
JERRY_UNREACHABLE ();
|
||||||
|
|||||||
@@ -772,6 +772,7 @@ typedef enum
|
|||||||
#if JERRY_ESNEXT
|
#if JERRY_ESNEXT
|
||||||
ECMA_OBJECT_CLASS_PROMISE, /**< Promise (ECMAScript v6, 25.4) */
|
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_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 */
|
#endif /* JERRY_ESNEXT */
|
||||||
#if JERRY_BUILTIN_DATAVIEW
|
#if JERRY_BUILTIN_DATAVIEW
|
||||||
ECMA_OBJECT_CLASS_DATAVIEW, /**< DataView (ECMAScript v6, 24.2) */
|
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 head; /**< points to the async generator task queue head item */
|
||||||
ecma_value_t iterated_value; /**< for %Iterator%: [[IteratedObject]] property */
|
ecma_value_t iterated_value; /**< for %Iterator%: [[IteratedObject]] property */
|
||||||
ecma_value_t promise; /**< PromiseCapability[[Promise]] internal slot */
|
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 */
|
ecma_value_t spread_value; /**< for spread object: spreaded element */
|
||||||
int32_t tza; /**< TimeZone adjustment for date objects */
|
int32_t tza; /**< TimeZone adjustment for date objects */
|
||||||
#endif /* JERRY_ESNEXT */
|
#endif /* JERRY_ESNEXT */
|
||||||
@@ -2507,6 +2509,14 @@ typedef enum
|
|||||||
ECMA_CONSTRUCTOR_FUNCTION_HAS_HERITAGE = (1 << 0), /**< heritage object is present */
|
ECMA_CONSTRUCTOR_FUNCTION_HAS_HERITAGE = (1 << 0), /**< heritage object is present */
|
||||||
} ecma_constructor_function_flags_t;
|
} 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 */
|
#endif /* JERRY_ESNEXT */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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 */
|
||||||
@@ -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"
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include "ecma-builtin-handlers.h"
|
#include "ecma-builtin-handlers.h"
|
||||||
#include "ecma-promise-object.h"
|
#include "ecma-promise-object.h"
|
||||||
|
#include "ecma-iterator-object.h"
|
||||||
|
|
||||||
static const ecma_builtin_handler_t ecma_native_handlers[] =
|
static const ecma_builtin_handler_t ecma_native_handlers[] =
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ typedef enum
|
|||||||
/**
|
/**
|
||||||
* Shift for Promise helper handler function.
|
* 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_t
|
||||||
ecma_builtin_handler_get (ecma_native_handler_id_t id);
|
ecma_builtin_handler_get (ecma_native_handler_id_t id);
|
||||||
|
|||||||
@@ -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_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_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_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
|
#if JERRY_BUILTIN_PROXY
|
||||||
ECMA_NATIVE_HANDLER (ECMA_NATIVE_HANDLER_PROXY_REVOKE, ecma_proxy_revoke_cb, 0)
|
ECMA_NATIVE_HANDLER (ECMA_NATIVE_HANDLER_PROXY_REVOKE, ecma_proxy_revoke_cb, 0)
|
||||||
#endif /* JERRY_BUILTIN_PROXY */
|
#endif /* JERRY_BUILTIN_PROXY */
|
||||||
|
|||||||
@@ -65,45 +65,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.
|
* Runtime Semantics: PerformPromiseRace.
|
||||||
*
|
*
|
||||||
@@ -118,7 +79,6 @@ ecma_builtin_promise_perform_race (ecma_value_t iterator, /**< the iterator for
|
|||||||
ecma_value_t next_method, /**< next method */
|
ecma_value_t next_method, /**< next method */
|
||||||
ecma_object_t *capability_obj_p, /**< PromiseCapability record */
|
ecma_object_t *capability_obj_p, /**< PromiseCapability record */
|
||||||
ecma_value_t ctor, /**< Constructor value */
|
ecma_value_t ctor, /**< Constructor value */
|
||||||
ecma_value_t resolve, /** the resolve of Promise.all */
|
|
||||||
bool *done_p) /**< [out] iteratorRecord[[done]] */
|
bool *done_p) /**< [out] iteratorRecord[[done]] */
|
||||||
{
|
{
|
||||||
JERRY_ASSERT (ecma_is_value_object (iterator));
|
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_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_object_t *resolve_func_p = ecma_get_object_from_value (resolve);
|
||||||
ecma_value_t ret_value = ECMA_VALUE_ERROR;
|
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:
|
||||||
*done_p = true;
|
*done_p = true;
|
||||||
exit:
|
exit:
|
||||||
|
ecma_deref_object (resolve_func_p);
|
||||||
|
|
||||||
return ret_value;
|
return ret_value;
|
||||||
} /* ecma_builtin_promise_perform_race */
|
} /* 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_value_t next_method, /**< next method */
|
||||||
ecma_object_t *capability_obj_p, /**< PromiseCapability record */
|
ecma_object_t *capability_obj_p, /**< PromiseCapability record */
|
||||||
ecma_value_t ctor, /**< the caller of Promise.all */
|
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 */
|
uint8_t builtin_routine_id, /**< built-in wide routine identifier */
|
||||||
bool *done_p) /**< [out] iteratorRecord[[done]] */
|
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_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_object_t *resolve_func_p = ecma_get_object_from_value (resolve);
|
||||||
|
|
||||||
/* 3. */
|
/* 3. */
|
||||||
@@ -321,11 +310,11 @@ ecma_builtin_promise_perform (ecma_value_t iterator, /**< iteratorRecord */
|
|||||||
/* p. */
|
/* p. */
|
||||||
executor_p->remaining_elements = remaining;
|
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)
|
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;
|
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)
|
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)
|
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,
|
ecma_object_t *reject_func_p = ecma_op_create_native_handler (ECMA_NATIVE_HANDLER_PROMISE_ALL_HELPER,
|
||||||
@@ -390,6 +379,8 @@ done:
|
|||||||
exit:
|
exit:
|
||||||
ecma_free_value (remaining);
|
ecma_free_value (remaining);
|
||||||
ecma_deref_object (values_array_obj_p);
|
ecma_deref_object (values_array_obj_p);
|
||||||
|
ecma_deref_object (resolve_func_p);
|
||||||
|
|
||||||
return ret_value;
|
return ret_value;
|
||||||
} /* ecma_builtin_promise_perform */
|
} /* ecma_builtin_promise_perform */
|
||||||
|
|
||||||
@@ -411,41 +402,22 @@ ecma_builtin_promise_helper (ecma_value_t this_arg, /**< 'this' argument */
|
|||||||
return ECMA_VALUE_ERROR;
|
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 next_method;
|
||||||
ecma_value_t iterator = ecma_op_get_iterator (iterable, ECMA_VALUE_SYNC_ITERATOR, &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);
|
ecma_deref_object (capability_obj_p);
|
||||||
return iterator;
|
return iterator;
|
||||||
}
|
}
|
||||||
|
|
||||||
ecma_value_t ret = ECMA_VALUE_EMPTY;
|
|
||||||
bool is_done = false;
|
bool is_done = false;
|
||||||
|
|
||||||
if (builtin_routine_id == ECMA_PROMISE_ROUTINE_RACE)
|
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
|
else
|
||||||
{
|
{
|
||||||
@@ -453,7 +425,6 @@ ecma_builtin_promise_helper (ecma_value_t this_arg, /**< 'this' argument */
|
|||||||
next_method,
|
next_method,
|
||||||
capability_obj_p,
|
capability_obj_p,
|
||||||
this_arg,
|
this_arg,
|
||||||
resolve,
|
|
||||||
builtin_routine_id,
|
builtin_routine_id,
|
||||||
&is_done);
|
&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_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 (iterator);
|
||||||
ecma_free_value (next_method);
|
ecma_free_value (next_method);
|
||||||
ecma_free_value (resolve);
|
|
||||||
ecma_deref_object (capability_obj_p);
|
ecma_deref_object (capability_obj_p);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -701,6 +701,13 @@ BUILTIN (ECMA_BUILTIN_ID_ASYNC_ITERATOR_PROTOTYPE,
|
|||||||
true,
|
true,
|
||||||
async_iterator_prototype)
|
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 */
|
/* The %(GeneratorFunction)% object */
|
||||||
BUILTIN_ROUTINE (ECMA_BUILTIN_ID_GENERATOR_FUNCTION,
|
BUILTIN_ROUTINE (ECMA_BUILTIN_ID_GENERATOR_FUNCTION,
|
||||||
ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION,
|
ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION,
|
||||||
|
|||||||
@@ -202,16 +202,49 @@ ecma_op_get_iterator (ecma_value_t value, /**< value to get iterator from */
|
|||||||
return method;
|
return method;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* 3.a */
|
||||||
else if (method == ECMA_VALUE_ASYNC_ITERATOR)
|
else if (method == ECMA_VALUE_ASYNC_ITERATOR)
|
||||||
{
|
{
|
||||||
/* TODO: CreateAsyncFromSyncIterator should be supported. */
|
|
||||||
use_default_method = true;
|
use_default_method = true;
|
||||||
|
|
||||||
|
/* 3.a.i */
|
||||||
method = ecma_op_get_method_by_symbol_id (value, LIT_GLOBAL_SYMBOL_ASYNC_ITERATOR);
|
method = ecma_op_get_method_by_symbol_id (value, LIT_GLOBAL_SYMBOL_ASYNC_ITERATOR);
|
||||||
|
|
||||||
if (ECMA_IS_VALUE_ERROR (method))
|
if (ECMA_IS_VALUE_ERROR (method))
|
||||||
{
|
{
|
||||||
return 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. */
|
/* 3. */
|
||||||
@@ -396,6 +429,35 @@ ecma_op_iterator_throw (ecma_value_t iterator, /**< iterator value */
|
|||||||
return result;
|
return result;
|
||||||
} /* ecma_op_iterator_throw */
|
} /* 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
|
* IteratorValue operation
|
||||||
*
|
*
|
||||||
@@ -623,6 +685,66 @@ ecma_op_iterator_do (ecma_iterator_command_type_t command, /**< command to be ex
|
|||||||
return result;
|
return result;
|
||||||
} /* ecma_op_iterator_do */
|
} /* 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 */
|
#endif /* JERRY_ESNEXT */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -58,6 +58,9 @@ ecma_create_array_from_iter_element (ecma_value_t value, ecma_value_t index_valu
|
|||||||
ecma_value_t
|
ecma_value_t
|
||||||
ecma_op_get_iterator (ecma_value_t value, ecma_value_t method, ecma_value_t *next_method_p);
|
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_value_t
|
||||||
ecma_op_iterator_value (ecma_value_t iter_result);
|
ecma_op_iterator_value (ecma_value_t iter_result);
|
||||||
|
|
||||||
@@ -74,6 +77,15 @@ ecma_value_t
|
|||||||
ecma_op_iterator_do (ecma_iterator_command_type_t command, ecma_value_t iterator,
|
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 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 */
|
#endif /* JERRY_ESNEXT */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2937,6 +2937,7 @@ static const uint16_t ecma_class_object_magic_string_id[] =
|
|||||||
#if JERRY_ESNEXT
|
#if JERRY_ESNEXT
|
||||||
LIT_MAGIC_STRING_PROMISE_UL, /**< magic string id of ECMA_OBJECT_CLASS_PROMISE */
|
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_PROMISE_CAPABILITY */
|
||||||
|
LIT_MAGIC_STRING_OBJECT_UL, /**< magic string id of ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR */
|
||||||
#endif /* JERRY_ESNEXT */
|
#endif /* JERRY_ESNEXT */
|
||||||
#if JERRY_BUILTIN_DATAVIEW
|
#if JERRY_BUILTIN_DATAVIEW
|
||||||
LIT_MAGIC_STRING_DATAVIEW_UL, /**< magic string id of ECMA_OBJECT_CLASS_DATAVIEW */
|
LIT_MAGIC_STRING_DATAVIEW_UL, /**< magic string id of ECMA_OBJECT_CLASS_DATAVIEW */
|
||||||
|
|||||||
@@ -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;
|
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;
|
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. */
|
/* 1 - 2. */
|
||||||
if (executor_p->index == 0)
|
if (executor_p->index == 0)
|
||||||
@@ -894,103 +894,6 @@ ecma_promise_reject_or_resolve (ecma_value_t this_arg, /**< "this" argument */
|
|||||||
return promise;
|
return promise;
|
||||||
} /* ecma_promise_reject_or_resolve */
|
} /* 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
|
* The common function for ecma_builtin_promise_prototype_then
|
||||||
* and ecma_builtin_promise_prototype_catch.
|
* 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;
|
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);
|
ecma_deref_object (result_capability_obj_p);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@@ -1326,6 +1229,144 @@ ecma_promise_async_await (ecma_extended_object_t *async_generator_object_p, /**<
|
|||||||
return ECMA_VALUE_UNDEFINED;
|
return ECMA_VALUE_UNDEFINED;
|
||||||
} /* ecma_promise_async_await */
|
} /* 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 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
* @}
|
* @}
|
||||||
|
|||||||
@@ -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);
|
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_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_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);
|
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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
* @}
|
* @}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ rejects.catch(result => { assert (result === "baz"); });
|
|||||||
var closed = true;
|
var closed = true;
|
||||||
delete Promise.resolve;
|
delete Promise.resolve;
|
||||||
Promise.all(createIterable([1,2,3], {'return': function () { closed = false; }}));
|
Promise.all(createIterable([1,2,3], {'return': function () { closed = false; }}));
|
||||||
assert (closed);
|
assert (!closed);
|
||||||
|
|
||||||
var arr = [];
|
var arr = [];
|
||||||
Object.defineProperty(arr, Symbol.species, { get: function () { assert(false) }});
|
Object.defineProperty(arr, Symbol.species, { get: function () { assert(false) }});
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ rejects.then(result => {
|
|||||||
var closed = true;
|
var closed = true;
|
||||||
delete Promise.resolve;
|
delete Promise.resolve;
|
||||||
Promise.allSettled(createIterable([1,2,3], {'return': function () { closed = false; }}));
|
Promise.allSettled(createIterable([1,2,3], {'return': function () { closed = false; }}));
|
||||||
assert (closed);
|
assert (!closed);
|
||||||
|
|
||||||
var arr = [];
|
var arr = [];
|
||||||
Object.defineProperty(arr, Symbol.species, { get: function () { assert(false) }});
|
Object.defineProperty(arr, Symbol.species, { get: function () { assert(false) }});
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ rejects.catch(result => { assert (result == "AggregateError"); });
|
|||||||
var closed = true;
|
var closed = true;
|
||||||
delete Promise.resolve;
|
delete Promise.resolve;
|
||||||
Promise.any(createIterable([1,2,3], {'return': function () { closed = false; }}));
|
Promise.any(createIterable([1,2,3], {'return': function () { closed = false; }}));
|
||||||
assert (closed);
|
assert (!closed);
|
||||||
|
|
||||||
var arr = [];
|
var arr = [];
|
||||||
Object.defineProperty(arr, Symbol.species, { get: function () { assert(false) }});
|
Object.defineProperty(arr, Symbol.species, { get: function () { assert(false) }});
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ rejects.catch(result => { assert (result === "baz"); });
|
|||||||
var closed = true;
|
var closed = true;
|
||||||
delete Promise.resolve;
|
delete Promise.resolve;
|
||||||
Promise.race(createIterable([1,2,3], {'return': function () { closed = false; }}));
|
Promise.race(createIterable([1,2,3], {'return': function () { closed = false; }}));
|
||||||
assert (closed);
|
assert (!closed);
|
||||||
|
|
||||||
var arr = [];
|
var arr = [];
|
||||||
Object.defineProperty(arr, Symbol.species, { get: function () { assert(false) }});
|
Object.defineProperty(arr, Symbol.species, { get: function () { assert(false) }});
|
||||||
|
|||||||
@@ -6476,31 +6476,6 @@
|
|||||||
features: [async-iteration]
|
features: [async-iteration]
|
||||||
https://github.com/tc39/proposal-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-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/AsyncGeneratorFunction/instance-yield-expr-in-param.js"><reason></reason></test>
|
||||||
<test id="built-ins/AsyncGeneratorPrototype/next/request-queue-await-order.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-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-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-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-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-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-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-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-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-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-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/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/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-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-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-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-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-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-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-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-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>
|
<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-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-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-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-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-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-func-expression.js"><reason></reason></test>
|
||||||
<test id="language/module-code/top-level-await/syntax/for-await-await-expr-identifier.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/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-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-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-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-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-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-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-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-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-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-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-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-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-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>
|
<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-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/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/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-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/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-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-function.js"><reason></reason></test>
|
||||||
<test id="language/statements/switch/syntax/redeclaration/async-generator-name-redeclaration-attempt-with-async-generator.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>
|
<test id="language/global-code/script-decl-var-err.js"><reason></reason></test>
|
||||||
<!-- Missing test262 support in JerryScript REPL - missing $262 object -->
|
<!-- 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
|
<!-- Missing test262 support in JerryScript REPL - missing $262.detachArrayBuffer function
|
||||||
https://github.com/tc39/test262/blob/main/INTERPRETING.md#host-defined-functions
|
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/bigint/null-bufferdata-throws.js"><reason></reason></test>
|
||||||
<test id="built-ins/Atomics/waitAsync/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 -->
|
<!-- 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>
|
</excludeList>
|
||||||
|
|||||||
Reference in New Issue
Block a user