56 lines
1.9 KiB
Plaintext
56 lines
1.9 KiB
Plaintext
'use strict';
|
|
|
|
var setToStringTag = require('es-set-tostringtag');
|
|
var hasProto = require('has-proto')();
|
|
var iterProto = require('../Iterator.prototype/implementation');
|
|
var SLOT = require('internal-slot');
|
|
|
|
var CompletionRecord = require('es-abstract/2023/CompletionRecord');
|
|
var CreateIterResultObject = require('es-abstract/2023/CreateIterResultObject');
|
|
var GeneratorResume = require('../aos/GeneratorResume');
|
|
var GeneratorResumeAbrupt = require('../aos/GeneratorResumeAbrupt');
|
|
var IteratorClose = require('../aos/IteratorClose');
|
|
var NormalCompletion = require('es-abstract/2023/NormalCompletion');
|
|
|
|
var implementation;
|
|
if (hasProto) {
|
|
implementation = {
|
|
__proto__: iterProto,
|
|
next: function next() {
|
|
return GeneratorResume(this, void undefined, 'Iterator Helper');
|
|
},
|
|
'return': function () {
|
|
var O = this; // step 1
|
|
|
|
SLOT.assert(O, '[[UnderlyingIterator]]'); // step 2
|
|
|
|
SLOT.assert(O, '[[GeneratorState]]'); // step 3
|
|
|
|
if (SLOT.get(O, '[[GeneratorState]]') === 'suspendedStart') { // step 4
|
|
SLOT.set(O, '[[GeneratorState]]', 'completed'); // step 4.a
|
|
IteratorClose(SLOT.get(O, '[[UnderlyingIterator]]'), NormalCompletion('unused')); // step 4.c
|
|
return CreateIterResultObject(void undefined, true); // step 4.d
|
|
}
|
|
|
|
var C = new CompletionRecord('return', void undefined); // step 5
|
|
|
|
return GeneratorResumeAbrupt(O, C, 'Iterator Helper'); // step 6
|
|
}
|
|
};
|
|
setToStringTag(implementation, 'Iterator Helper');
|
|
} else {
|
|
var IteratorHelper = function IteratorHelper() {};
|
|
IteratorHelper.prototype = iterProto;
|
|
implementation = new IteratorHelper();
|
|
delete implementation.constructor;
|
|
implementation.next = function next() {
|
|
return GeneratorResume(this, void undefined, 'Iterator Helper');
|
|
};
|
|
implementation['return'] = function () {
|
|
var C = new CompletionRecord('return', void undefined); // step 1
|
|
return GeneratorResumeAbrupt(this, C, 'Iterator Helper');
|
|
};
|
|
}
|
|
|
|
module.exports = implementation;
|