@@ -424,13 +424,15 @@ class Interface {
424
424
}
425
425
426
426
if ( iterable . isAsync ) {
427
+ this . requires . addRaw ( "newObjectInRealm" , "utils.newObjectInRealm" ) ;
427
428
this . str += `
428
- ctorRegistry["${ this . name } AsyncIterator"] = Object.create(utils.AsyncIteratorPrototype, {
429
- [Symbol.toStringTag]: {
430
- value: "${ this . name } AsyncIterator",
431
- configurable: true
432
- }
433
- });
429
+ ctorRegistry["${ this . name } AsyncIterator"] =
430
+ Object.create(ctorRegistry["%AsyncIteratorPrototype%"], {
431
+ [Symbol.toStringTag]: {
432
+ value: "${ this . name } AsyncIterator",
433
+ configurable: true
434
+ }
435
+ });
434
436
utils.define(ctorRegistry["${ this . name } AsyncIterator"], {
435
437
next() {
436
438
const internal = this && this[utils.iterInternalSymbol];
@@ -440,7 +442,7 @@ class Interface {
440
442
441
443
const nextSteps = () => {
442
444
if (internal.isFinished) {
443
- return Promise.resolve({ value: undefined, done: true });
445
+ return Promise.resolve(newObjectInRealm(globalObject, { value: undefined, done: true }) );
444
446
}
445
447
446
448
const nextPromise = internal.target[implSymbol][utils.asyncIteratorNext](this);
@@ -449,15 +451,15 @@ class Interface {
449
451
internal.ongoingPromise = null;
450
452
if (next === utils.asyncIteratorEOI) {
451
453
internal.isFinished = true;
452
- return { value: undefined, done: true };
454
+ return newObjectInRealm(globalObject, { value: undefined, done: true }) ;
453
455
}` ;
454
456
if ( iterable . isPair ) {
455
457
this . str += `
456
- return utils.iteratorResult(next.map(utils.tryWrapperForImpl), kind);
458
+ return newObjectInRealm(globalObject, utils.iteratorResult(next.map(utils.tryWrapperForImpl), kind) );
457
459
` ;
458
460
} else {
459
461
this . str += `
460
- return { value: utils.tryWrapperForImpl(next), done: false };
462
+ return newObjectInRealm(globalObject, { value: utils.tryWrapperForImpl(next), done: false }) ;
461
463
` ;
462
464
}
463
465
this . str += `
@@ -487,7 +489,7 @@ class Interface {
487
489
488
490
const returnSteps = () => {
489
491
if (internal.isFinished) {
490
- return Promise.resolve({ value, done: true });
492
+ return Promise.resolve(newObjectInRealm(globalObject, { value, done: true }) );
491
493
}
492
494
internal.isFinished = true;
493
495
@@ -497,14 +499,15 @@ class Interface {
497
499
const returnPromise = internal.ongoingPromise ?
498
500
internal.ongoingPromise.then(returnSteps, returnSteps) :
499
501
returnSteps();
500
- return returnPromise.then(() => ( { value, done: true }));
502
+ return returnPromise.then(() => newObjectInRealm(globalObject, { value, done: true }));
501
503
}
502
504
` ;
503
505
}
504
506
this . str += `
505
507
});
506
508
` ;
507
509
} else if ( iterable . isPair ) {
510
+ this . requires . addRaw ( "newObjectInRealm" , "utils.newObjectInRealm" ) ;
508
511
this . str += `
509
512
ctorRegistry["${ this . name } Iterator"] =
510
513
Object.create(ctorRegistry["%IteratorPrototype%"], {
@@ -526,12 +529,12 @@ class Interface {
526
529
const values = Array.from(target[implSymbol]);
527
530
const len = values.length;
528
531
if (index >= len) {
529
- return { value: undefined, done: true };
532
+ return newObjectInRealm(globalObject, { value: undefined, done: true }) ;
530
533
}
531
534
532
535
const pair = values[index];
533
536
internal.index = index + 1;
534
- return utils.iteratorResult(pair.map(utils.tryWrapperForImpl), kind);
537
+ return newObjectInRealm(globalObject, utils.iteratorResult(pair.map(utils.tryWrapperForImpl), kind) );
535
538
}
536
539
}
537
540
);
0 commit comments