Skip to content

Commit

Permalink
[Refactor] GetIteratorFlattenable: remove hint
Browse files Browse the repository at this point in the history
  • Loading branch information
ljharb committed Apr 1, 2023
1 parent 96db183 commit 781fc7c
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 34 deletions.
2 changes: 1 addition & 1 deletion Iterator.from/implementation.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ module.exports = function from(O) {
O = ToObject(O); // step 1
}

var iteratorRecord = GetIteratorFlattenable(O, 'sync'); // step 2
var iteratorRecord = GetIteratorFlattenable(O); // step 2

var hasInstance = OrdinaryHasInstance($Iterator, iteratorRecord['[[Iterator]]']); // step 3

Expand Down
2 changes: 1 addition & 1 deletion Iterator.prototype.flatMap/implementation.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ module.exports = function flatMap(mapper) {
try {
mapped = Call(mapper, void undefined, [value, counter]); // step 6.b.iv
// yield mapped // step 6.b.vi
innerIterator = GetIteratorFlattenable(mapped, 'sync'); // step 6.b.vi
innerIterator = GetIteratorFlattenable(mapped); // step 6.b.vi
} catch (e) {
closeIfAbrupt(ThrowCompletion(e)); // steps 6.b.v, 6.b.vii
}
Expand Down
46 changes: 14 additions & 32 deletions aos/GetIteratorFlattenable.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,58 +5,40 @@ var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');

var Call = require('es-abstract/2022/Call');
// var CreateAsyncFromSyncIterator = require('es-abstract/2022/CreateAsyncFromSyncIterator');
var Get = require('es-abstract/2022/Get');
var GetIterator = require('es-abstract/2022/GetIterator');
var IsCallable = require('es-abstract/2022/IsCallable');
var Type = require('es-abstract/2022/Type');

var hasSymbols = require('has-symbols/shams')();

module.exports = function GetIteratorFlattenable(obj, hint) {
module.exports = function GetIteratorFlattenable(obj) {
if (Type(obj) !== 'Object') {
throw new $TypeError('obj must be an Object'); // step 1
}

var alreadyAsync = false; // step 2

var method = void undefined; // step 3
var method = void undefined; // step 2

if (hint === 'async') { // step 4
method = hasSymbols && Symbol.asyncIterator && obj[Symbol.asyncIterator]; // step 4.a
alreadyAsync = true; // step 4.b
}

if (!IsCallable(method)) { // step 5
// method = Get(obj, Symbol.iterator); // step 5.a
method = function () {
return GetIterator(obj);
};
alreadyAsync = false; // step 5.b
}
// method = Get(obj, Symbol.iterator); // step 5.a
method = function () {
return GetIterator(obj);
};

var iterator;
if (!IsCallable(method)) { // step 6
iterator = obj; // step 6.a
alreadyAsync = true; // step 6.b
} else { // step 7
iterator = Call(method, obj); // step 7.a
if (!IsCallable(method)) { // step 3
iterator = obj; // step 3.a
} else { // step 4
iterator = Call(method, obj); // step 4.a
}

if (Type(iterator) !== 'Object') {
throw new $TypeError('iterator must be an Object'); // step 8
throw new $TypeError('iterator must be an Object'); // step 5
}
var nextMethod = Get(iterator, 'next'); // step 9
var nextMethod = Get(iterator, 'next'); // step 6

if (!IsCallable(nextMethod)) {
throw new $TypeError('nextMethod must be a function'); // step 10
throw new $TypeError('nextMethod must be a function'); // step 7
}

var iteratorRecord = { '[[Iterator]]': iterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; // step 11

if (hint === 'async' && !alreadyAsync) { // step 12
// return CreateAsyncFromSyncIterator(iteratorRecord); // step 12.a
}
var iteratorRecord = { '[[Iterator]]': iterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; // step 8

return iteratorRecord;
};

0 comments on commit 781fc7c

Please sign in to comment.