Skip to content

Commit d2388e9

Browse files
author
Robert Fancsik
authored
Implement CreateAsyncFromSyncIterator (#4802)
JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik [email protected]
1 parent dd77ec9 commit d2388e9

24 files changed

+1015
-418
lines changed

jerry-core/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ set(SOURCE_CORE_FILES
160160
ecma/builtin-objects/ecma-builtin-array.c
161161
ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.c
162162
ecma/builtin-objects/ecma-builtin-arraybuffer.c
163+
ecma/builtin-objects/ecma-builtin-async-from-sync-iterator-prototype.c
163164
ecma/builtin-objects/ecma-builtin-async-function-prototype.c
164165
ecma/builtin-objects/ecma-builtin-async-function.c
165166
ecma/builtin-objects/ecma-builtin-async-generator-function.c
@@ -358,6 +359,7 @@ if(ENABLE_AMALGAM)
358359
ecma/builtin-objects/ecma-builtin-array.inc.h
359360
ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.inc.h
360361
ecma/builtin-objects/ecma-builtin-arraybuffer.inc.h
362+
ecma/builtin-objects/ecma-builtin-async-from-sync-iterator-prototype.inc.h
361363
ecma/builtin-objects/ecma-builtin-async-function-prototype.inc.h
362364
ecma/builtin-objects/ecma-builtin-async-function.inc.h
363365
ecma/builtin-objects/ecma-builtin-async-generator-function.inc.h

jerry-core/api/jerry.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1542,6 +1542,7 @@ static const uint8_t jerry_class_object_type[] =
15421542
#if JERRY_ESNEXT
15431543
JERRY_OBJECT_TYPE_PROMISE, /**< type of ECMA_OBJECT_CLASS_PROMISE */
15441544
JERRY_OBJECT_TYPE_GENERIC, /**< type of ECMA_OBJECT_CLASS_PROMISE_CAPABILITY */
1545+
JERRY_OBJECT_TYPE_GENERIC, /**< type of ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR */
15451546
#endif /* JERRY_ESNEXT */
15461547
#if JERRY_BUILTIN_DATAVIEW
15471548
JERRY_OBJECT_TYPE_DATAVIEW, /**< type of ECMA_OBJECT_CLASS_DATAVIEW */

jerry-core/ecma/base/ecma-errors.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ const char * const ecma_error_class_is_non_configurable = "Prototype property of
129129
*/
130130
const char * const ecma_error_argument_is_not_an_object = "Argument is not an object";
131131

132+
/**
133+
* Error message length of 'ecma_error_argument_is_not_an_object'
134+
*/
135+
const int ecma_error_argument_is_not_an_object_length = 25;
136+
132137
/**
133138
* Error message, argument is not a Proxy object
134139
*/

jerry-core/ecma/base/ecma-errors.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ extern const char * const ecma_error_arraybuffer_is_detached;
6969
extern const char * const ecma_error_cannot_convert_to_object;
7070
extern const char * const ecma_error_class_is_non_configurable;
7171
extern const char * const ecma_error_argument_is_not_an_object;
72+
extern const int ecma_error_argument_is_not_an_object_length;
7273
extern const char * const ecma_error_argument_is_not_a_proxy;
7374
extern const char * const ecma_error_target_is_not_a_constructor;
7475
extern const char * const ecma_error_argument_is_not_an_regexp;

jerry-core/ecma/base/ecma-gc.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1013,6 +1013,19 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
10131013
}
10141014
break;
10151015
}
1016+
case ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR:
1017+
{
1018+
ecma_async_from_sync_iterator_object_t *iter_p = (ecma_async_from_sync_iterator_object_t *) ext_object_p;
1019+
1020+
ecma_gc_set_object_visited (ecma_get_object_from_value (iter_p->header.u.cls.u3.sync_iterator));
1021+
1022+
if (!ecma_is_value_undefined (iter_p->sync_next_method))
1023+
{
1024+
ecma_gc_set_object_visited (ecma_get_object_from_value (iter_p->sync_next_method));
1025+
}
1026+
1027+
break;
1028+
}
10161029
case ECMA_OBJECT_CLASS_ARRAY_ITERATOR:
10171030
case ECMA_OBJECT_CLASS_SET_ITERATOR:
10181031
case ECMA_OBJECT_CLASS_MAP_ITERATOR:
@@ -1208,6 +1221,10 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
12081221
}
12091222
break;
12101223
}
1224+
case ECMA_NATIVE_HANDLER_ASYNC_FROM_SYNC_ITERATOR_UNWRAP:
1225+
{
1226+
break;
1227+
}
12111228
default:
12121229
{
12131230
JERRY_UNREACHABLE ();
@@ -1911,6 +1928,11 @@ ecma_gc_free_object (ecma_object_t *object_p) /**< object to free */
19111928
ext_object_size = sizeof (ecma_promise_capabality_t);
19121929
break;
19131930
}
1931+
case ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR:
1932+
{
1933+
ext_object_size = sizeof (ecma_async_from_sync_iterator_object_t);
1934+
break;
1935+
}
19141936
#endif /* JERRY_ESNEXT */
19151937
#if JERRY_MODULE_SYSTEM
19161938
case ECMA_OBJECT_CLASS_MODULE:
@@ -2039,6 +2061,10 @@ ecma_gc_free_object (ecma_object_t *object_p) /**< object to free */
20392061
ext_object_size = sizeof (ecma_promise_value_thunk_t);
20402062
break;
20412063
}
2064+
case ECMA_NATIVE_HANDLER_ASYNC_FROM_SYNC_ITERATOR_UNWRAP:
2065+
{
2066+
break;
2067+
}
20422068
default:
20432069
{
20442070
JERRY_UNREACHABLE ();

jerry-core/ecma/base/ecma-globals.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,7 @@ typedef enum
772772
#if JERRY_ESNEXT
773773
ECMA_OBJECT_CLASS_PROMISE, /**< Promise (ECMAScript v6, 25.4) */
774774
ECMA_OBJECT_CLASS_PROMISE_CAPABILITY, /**< Promise capability (ECMAScript v6, 25.4.1.1) */
775+
ECMA_OBJECT_CLASS_ASYNC_FROM_SYNC_ITERATOR, /**< AsyncFromSyncIterator (ECMAScript v11, 25.1.4) */
775776
#endif /* JERRY_ESNEXT */
776777
#if JERRY_BUILTIN_DATAVIEW
777778
ECMA_OBJECT_CLASS_DATAVIEW, /**< DataView (ECMAScript v6, 24.2) */
@@ -1124,6 +1125,7 @@ typedef struct
11241125
ecma_value_t head; /**< points to the async generator task queue head item */
11251126
ecma_value_t iterated_value; /**< for %Iterator%: [[IteratedObject]] property */
11261127
ecma_value_t promise; /**< PromiseCapability[[Promise]] internal slot */
1128+
ecma_value_t sync_iterator; /**< IteratorRecord [[Iterator]] internal slot for AsyncFromSyncIterator */
11271129
ecma_value_t spread_value; /**< for spread object: spreaded element */
11281130
int32_t tza; /**< TimeZone adjustment for date objects */
11291131
#endif /* JERRY_ESNEXT */
@@ -2507,6 +2509,14 @@ typedef enum
25072509
ECMA_CONSTRUCTOR_FUNCTION_HAS_HERITAGE = (1 << 0), /**< heritage object is present */
25082510
} ecma_constructor_function_flags_t;
25092511

2512+
/**
2513+
* Description of AsyncFromSyncIterator objects.
2514+
*/
2515+
typedef struct
2516+
{
2517+
ecma_extended_object_t header; /**< header part */
2518+
ecma_value_t sync_next_method; /**< IteratorRecord [[NextMethod]] internal slot */
2519+
} ecma_async_from_sync_iterator_object_t;
25102520
#endif /* JERRY_ESNEXT */
25112521

25122522
/**

0 commit comments

Comments
 (0)