@@ -424,13 +424,15 @@ class Interface {
424424 }
425425
426426 if ( iterable . isAsync ) {
427+ this . requires . addRaw ( "newObjectInRealm" , "utils.newObjectInRealm" ) ;
427428 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+ });
434436 utils.define(ctorRegistry["${ this . name } AsyncIterator"], {
435437 next() {
436438 const internal = this && this[utils.iterInternalSymbol];
@@ -440,7 +442,7 @@ class Interface {
440442
441443 const nextSteps = () => {
442444 if (internal.isFinished) {
443- return Promise.resolve({ value: undefined, done: true });
445+ return Promise.resolve(newObjectInRealm(globalObject, { value: undefined, done: true }) );
444446 }
445447
446448 const nextPromise = internal.target[implSymbol][utils.asyncIteratorNext](this);
@@ -449,15 +451,15 @@ class Interface {
449451 internal.ongoingPromise = null;
450452 if (next === utils.asyncIteratorEOI) {
451453 internal.isFinished = true;
452- return { value: undefined, done: true };
454+ return newObjectInRealm(globalObject, { value: undefined, done: true }) ;
453455 }` ;
454456 if ( iterable . isPair ) {
455457 this . str += `
456- return utils.iteratorResult(next.map(utils.tryWrapperForImpl), kind);
458+ return newObjectInRealm(globalObject, utils.iteratorResult(next.map(utils.tryWrapperForImpl), kind) );
457459 ` ;
458460 } else {
459461 this . str += `
460- return { value: utils.tryWrapperForImpl(next), done: false };
462+ return newObjectInRealm(globalObject, { value: utils.tryWrapperForImpl(next), done: false }) ;
461463 ` ;
462464 }
463465 this . str += `
@@ -487,7 +489,7 @@ class Interface {
487489
488490 const returnSteps = () => {
489491 if (internal.isFinished) {
490- return Promise.resolve({ value, done: true });
492+ return Promise.resolve(newObjectInRealm(globalObject, { value, done: true }) );
491493 }
492494 internal.isFinished = true;
493495
@@ -497,14 +499,15 @@ class Interface {
497499 const returnPromise = internal.ongoingPromise ?
498500 internal.ongoingPromise.then(returnSteps, returnSteps) :
499501 returnSteps();
500- return returnPromise.then(() => ( { value, done: true }));
502+ return returnPromise.then(() => newObjectInRealm(globalObject, { value, done: true }));
501503 }
502504 ` ;
503505 }
504506 this . str += `
505507 });
506508 ` ;
507509 } else if ( iterable . isPair ) {
510+ this . requires . addRaw ( "newObjectInRealm" , "utils.newObjectInRealm" ) ;
508511 this . str += `
509512 ctorRegistry["${ this . name } Iterator"] =
510513 Object.create(ctorRegistry["%IteratorPrototype%"], {
@@ -526,12 +529,12 @@ class Interface {
526529 const values = Array.from(target[implSymbol]);
527530 const len = values.length;
528531 if (index >= len) {
529- return { value: undefined, done: true };
532+ return newObjectInRealm(globalObject, { value: undefined, done: true }) ;
530533 }
531534
532535 const pair = values[index];
533536 internal.index = index + 1;
534- return utils.iteratorResult(pair.map(utils.tryWrapperForImpl), kind);
537+ return newObjectInRealm(globalObject, utils.iteratorResult(pair.map(utils.tryWrapperForImpl), kind) );
535538 }
536539 }
537540 );
0 commit comments