@@ -72,9 +72,7 @@ JS_DEFINE_NATIVE_FUNCTION(IteratorPrototype::map)
72
72
auto iterated = TRY (get_iterator_direct (vm, object));
73
73
74
74
// 5. Let closure be a new Abstract Closure with no parameters that captures iterated and mapper and performs the following steps when called:
75
- IteratorHelper::Closure closure = [mapper = NonnullGCPtr { mapper.as_function () }](auto & iterator) -> ThrowCompletionOr<Value> {
76
- auto & vm = iterator.vm ();
77
-
75
+ IteratorHelper::Closure closure = [mapper = NonnullGCPtr { mapper.as_function () }](auto & vm, auto & iterator) -> ThrowCompletionOr<Value> {
78
76
auto const & iterated = iterator.underlying_iterator ();
79
77
80
78
// a. Let counter be 0.
@@ -95,7 +93,7 @@ JS_DEFINE_NATIVE_FUNCTION(IteratorPrototype::map)
95
93
96
94
// v. IfAbruptCloseIterator(mapped, iterated).
97
95
if (mapped.is_error ())
98
- return iterator.close_result (mapped.release_error ());
96
+ return iterator.close_result (vm, mapped.release_error ());
99
97
100
98
// viii. Set counter to counter + 1.
101
99
// NOTE: We do this step early to ensure it occurs before returning.
@@ -133,9 +131,7 @@ JS_DEFINE_NATIVE_FUNCTION(IteratorPrototype::filter)
133
131
auto iterated = TRY (get_iterator_direct (vm, object));
134
132
135
133
// 5. Let closure be a new Abstract Closure with no parameters that captures iterated and predicate and performs the following steps when called:
136
- IteratorHelper::Closure closure = [predicate = NonnullGCPtr { predicate.as_function () }](auto & iterator) -> ThrowCompletionOr<Value> {
137
- auto & vm = iterator.vm ();
138
-
134
+ IteratorHelper::Closure closure = [predicate = NonnullGCPtr { predicate.as_function () }](auto & vm, auto & iterator) -> ThrowCompletionOr<Value> {
139
135
auto const & iterated = iterator.underlying_iterator ();
140
136
141
137
// a. Let counter be 0.
@@ -157,7 +153,7 @@ JS_DEFINE_NATIVE_FUNCTION(IteratorPrototype::filter)
157
153
158
154
// v. IfAbruptCloseIterator(selected, iterated).
159
155
if (selected.is_error ())
160
- return iterator.close_result (selected.release_error ());
156
+ return iterator.close_result (vm, selected.release_error ());
161
157
162
158
// vii. Set counter to counter + 1.
163
159
// NOTE: We do this step early to ensure it occurs before returning.
@@ -209,9 +205,7 @@ JS_DEFINE_NATIVE_FUNCTION(IteratorPrototype::take)
209
205
auto iterated = TRY (get_iterator_direct (vm, object));
210
206
211
207
// 8. Let closure be a new Abstract Closure with no parameters that captures iterated and integerLimit and performs the following steps when called:
212
- IteratorHelper::Closure closure = [integer_limit](auto & iterator) -> ThrowCompletionOr<Value> {
213
- auto & vm = iterator.vm ();
214
-
208
+ IteratorHelper::Closure closure = [integer_limit](auto & vm, auto & iterator) -> ThrowCompletionOr<Value> {
215
209
auto const & iterated = iterator.underlying_iterator ();
216
210
217
211
// a. Let remaining be integerLimit.
@@ -220,7 +214,7 @@ JS_DEFINE_NATIVE_FUNCTION(IteratorPrototype::take)
220
214
// i. If remaining is 0, then
221
215
if (iterator.counter () >= integer_limit) {
222
216
// 1. Return ? IteratorClose(iterated, NormalCompletion(undefined)).
223
- return iterator.close_result (normal_completion (js_undefined ()));
217
+ return iterator.close_result (vm, normal_completion (js_undefined ()));
224
218
}
225
219
226
220
// ii. If remaining is not +∞, then
@@ -276,9 +270,7 @@ JS_DEFINE_NATIVE_FUNCTION(IteratorPrototype::drop)
276
270
auto iterated = TRY (get_iterator_direct (vm, object));
277
271
278
272
// 8. Let closure be a new Abstract Closure with no parameters that captures iterated and integerLimit and performs the following steps when called:
279
- IteratorHelper::Closure closure = [integer_limit](auto & iterator) -> ThrowCompletionOr<Value> {
280
- auto & vm = iterator.vm ();
281
-
273
+ IteratorHelper::Closure closure = [integer_limit](auto & vm, auto & iterator) -> ThrowCompletionOr<Value> {
282
274
auto const & iterated = iterator.underlying_iterator ();
283
275
284
276
// a. Let remaining be integerLimit.
@@ -357,14 +349,14 @@ class FlatMapIterator : public Cell {
357
349
358
350
// v. IfAbruptCloseIterator(mapped, iterated).
359
351
if (mapped.is_error ())
360
- return iterator.close_result (mapped.release_error ());
352
+ return iterator.close_result (vm, mapped.release_error ());
361
353
362
354
// vi. Let innerIterator be Completion(GetIteratorFlattenable(mapped, reject-strings)).
363
355
auto inner_iterator = get_iterator_flattenable (vm, mapped.release_value (), StringHandling::RejectStrings);
364
356
365
357
// vii. IfAbruptCloseIterator(innerIterator, iterated).
366
358
if (inner_iterator.is_error ())
367
- return iterator.close_result (inner_iterator.release_error ());
359
+ return iterator.close_result (vm, inner_iterator.release_error ());
368
360
369
361
// viii. Let innerAlive be true.
370
362
m_inner_iterator = inner_iterator.release_value ();
@@ -386,7 +378,7 @@ class FlatMapIterator : public Cell {
386
378
387
379
// 2. IfAbruptCloseIterator(innerNext, iterated).
388
380
if (inner_next.is_error ())
389
- return iterator.close_result (inner_next.release_error ());
381
+ return iterator.close_result (vm, inner_next.release_error ());
390
382
391
383
// 3. If innerNext is false, then
392
384
if (!inner_next.value ()) {
@@ -402,7 +394,7 @@ class FlatMapIterator : public Cell {
402
394
403
395
// b. IfAbruptCloseIterator(innerValue, iterated).
404
396
if (inner_value.is_error ())
405
- return iterator.close_result (inner_value.release_error ());
397
+ return iterator.close_result (vm, inner_value.release_error ());
406
398
407
399
// c. Let completion be Completion(Yield(innerValue)).
408
400
// d. If completion is an abrupt completion, then
@@ -437,9 +429,7 @@ JS_DEFINE_NATIVE_FUNCTION(IteratorPrototype::flat_map)
437
429
auto flat_map_iterator = MUST_OR_THROW_OOM (vm.heap ().allocate <FlatMapIterator>(realm));
438
430
439
431
// 5. Let closure be a new Abstract Closure with no parameters that captures iterated and mapper and performs the following steps when called:
440
- IteratorHelper::Closure closure = [flat_map_iterator, mapper = NonnullGCPtr { mapper.as_function () }](auto & iterator) mutable -> ThrowCompletionOr<Value> {
441
- auto & vm = iterator.vm ();
442
-
432
+ IteratorHelper::Closure closure = [flat_map_iterator, mapper = NonnullGCPtr { mapper.as_function () }](auto & vm, auto & iterator) mutable -> ThrowCompletionOr<Value> {
443
433
auto const & iterated = iterator.underlying_iterator ();
444
434
return flat_map_iterator->next (vm, iterated, iterator, *mapper);
445
435
};
0 commit comments