Skip to content

Commit

Permalink
[Refactor] use IteratorStepValue
Browse files Browse the repository at this point in the history
  • Loading branch information
ljharb committed Jan 31, 2024
1 parent 6aeee43 commit aa62d72
Show file tree
Hide file tree
Showing 14 changed files with 116 additions and 103 deletions.
2 changes: 1 addition & 1 deletion .eslintrc
Expand Up @@ -38,8 +38,8 @@
"IteratorClose",
"IteratorComplete",
"IteratorNext",
"IteratorStepValue",
"IteratorStep",
"IteratorValue",
"NormalCompletion",
"OrdinaryHasInstance",
"OrdinaryObjectCreate",
Expand Down
14 changes: 6 additions & 8 deletions Iterator.prototype.drop/implementation.js
Expand Up @@ -10,7 +10,7 @@ var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure');
var GetIteratorDirect = require('../aos/GetIteratorDirect');
var IteratorClose = require('../aos/IteratorClose');
var IteratorStep = require('es-abstract/2023/IteratorStep');
var IteratorValue = require('es-abstract/2023/IteratorValue');
var IteratorStepValue = require('../aos/IteratorStepValue');
var ThrowCompletion = require('es-abstract/2023/ThrowCompletion');
var ToIntegerOrInfinity = require('es-abstract/2023/ToIntegerOrInfinity');
var ToNumber = require('es-abstract/2023/ToNumber');
Expand Down Expand Up @@ -70,14 +70,12 @@ module.exports = function drop(limit) {
}
}
// while (true) { // step 6.c
next = IteratorStep(iterated); // step 6.c.i
if (!next) {
// return void undefined; // step 6.c.ii
return sentinel;
}
try {
var value = IteratorValue(next); // step 6.c.iii
return value; // step 6.c.iii
var value = IteratorStepValue(iterated); // step 6.b.i
if (iterated['[[Done]]']) {
return sentinel; // step 6.b.ii
}
return value;
} catch (e) {
// close iterator // step 6.c.icv
closeIfAbrupt(ThrowCompletion(e));
Expand Down
16 changes: 7 additions & 9 deletions Iterator.prototype.every/implementation.js
Expand Up @@ -8,8 +8,7 @@ var Call = require('es-abstract/2023/Call');
var GetIteratorDirect = require('../aos/GetIteratorDirect');
var IsCallable = require('es-abstract/2023/IsCallable');
var IteratorClose = require('../aos/IteratorClose');
var IteratorStep = require('es-abstract/2023/IteratorStep');
var IteratorValue = require('es-abstract/2023/IteratorValue');
var IteratorStepValue = require('../aos/IteratorStepValue');
var NormalCompletion = require('es-abstract/2023/NormalCompletion');
var ThrowCompletion = require('es-abstract/2023/ThrowCompletion');
var ToBoolean = require('es-abstract/2023/ToBoolean');
Expand All @@ -35,28 +34,27 @@ module.exports = function every(predicate) {

// eslint-disable-next-line no-constant-condition
while (true) { // step 6
var next = IteratorStep(iterated); // step 6.a
if (!next) {
var value = IteratorStepValue(iterated); // step 6.a
if (iterated['[[Done]]']) {
return true; // step 6.b
}
var value = IteratorValue(next); // step 6.c
var result;
try {
result = Call(predicate, void undefined, [value, counter]); // step 6.d
result = Call(predicate, void undefined, [value, counter]); // step 6.c
} catch (e) {
// close iterator // step 6.e
// close iterator // step 6.d
IteratorClose(
iterated,
ThrowCompletion(e)
);
} finally {
counter += 1; // step 6.g
counter += 1; // step 6.f
}
if (!ToBoolean(result)) {
return IteratorClose(
iterated,
NormalCompletion(false)
); // step 6.f
); // step 6.e
}
}
};
12 changes: 5 additions & 7 deletions Iterator.prototype.filter/implementation.js
Expand Up @@ -10,8 +10,7 @@ var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure');
var GetIteratorDirect = require('../aos/GetIteratorDirect');
var IsCallable = require('es-abstract/2023/IsCallable');
var IteratorClose = require('../aos/IteratorClose');
var IteratorStep = require('es-abstract/2023/IteratorStep');
var IteratorValue = require('es-abstract/2023/IteratorValue');
var IteratorStepValue = require('../aos/IteratorStepValue');
var ThrowCompletion = require('es-abstract/2023/ThrowCompletion');
var ToBoolean = require('es-abstract/2023/ToBoolean');
var Type = require('es-abstract/2023/Type');
Expand Down Expand Up @@ -51,12 +50,11 @@ module.exports = function filter(predicate) {
var closure = function () {
// eslint-disable-next-line no-constant-condition
while (true) { // step 6.b
var next = IteratorStep(iterated); // step 6.b.i
if (!next) {
// return void undefined; // step 6.b.ii
return sentinel;
var value = IteratorStepValue(iterated); // step 6.b.i
if (iterated['[[Done]]']) {
return sentinel; // step 6.b.ii
}
var value = IteratorValue(next); // step 6.b.iii

var selected;
try {
selected = Call(predicate, void undefined, [value, counter]); // step 6.b.iv
Expand Down
16 changes: 7 additions & 9 deletions Iterator.prototype.find/implementation.js
Expand Up @@ -8,8 +8,7 @@ var Call = require('es-abstract/2023/Call');
var GetIteratorDirect = require('../aos/GetIteratorDirect');
var IsCallable = require('es-abstract/2023/IsCallable');
var IteratorClose = require('../aos/IteratorClose');
var IteratorStep = require('es-abstract/2023/IteratorStep');
var IteratorValue = require('es-abstract/2023/IteratorValue');
var IteratorStepValue = require('../aos/IteratorStepValue');
var NormalCompletion = require('es-abstract/2023/NormalCompletion');
var ThrowCompletion = require('es-abstract/2023/ThrowCompletion');
var ToBoolean = require('es-abstract/2023/ToBoolean');
Expand All @@ -36,28 +35,27 @@ module.exports = function find(predicate) {

// eslint-disable-next-line no-constant-condition
while (true) { // step 6
var next = IteratorStep(iterated); // step 6.a
if (!next) {
var value = IteratorStepValue(iterated); // step 6.a
if (iterated['[[Done]]']) {
return void undefined; // step 6.b
}
var value = IteratorValue(next); // step 6.c
var result;
try {
result = Call(predicate, void undefined, [value, counter]); // step 6.d
result = Call(predicate, void undefined, [value, counter]); // step 6.c
} catch (e) {
// close iterator // step 6.e
// close iterator // step 6.d
IteratorClose(
iterated,
ThrowCompletion(e)
);
} finally {
counter += 1; // step 6.g
counter += 1; // step 6.f
}
if (ToBoolean(result)) {
return IteratorClose(
iterated,
NormalCompletion(value)
); // step 6.f
); // step 6.e
}
}
};
27 changes: 9 additions & 18 deletions Iterator.prototype.flatMap/implementation.js
Expand Up @@ -11,8 +11,7 @@ var GetIteratorDirect = require('../aos/GetIteratorDirect');
var GetIteratorFlattenable = require('../aos/GetIteratorFlattenable');
var IsCallable = require('es-abstract/2023/IsCallable');
var IteratorClose = require('../aos/IteratorClose');
var IteratorStep = require('es-abstract/2023/IteratorStep');
var IteratorValue = require('es-abstract/2023/IteratorValue');
var IteratorStepValue = require('../aos/IteratorStepValue');
var ThrowCompletion = require('es-abstract/2023/ThrowCompletion');
var Type = require('es-abstract/2023/Type');

Expand Down Expand Up @@ -65,14 +64,13 @@ module.exports = function flatMap(mapper) {
var closure = function () {
// while (true) { // step 5.b
if (innerIterator === sentinel) {
var next = IteratorStep(iterated); // step 5.b.i
if (!next) {
var value = IteratorStepValue(iterated); // step 5.b.i
if (iterated['[[Done]]']) {
innerAlive = false;
innerIterator = sentinel;
// return void undefined; // step 5.b.ii
return sentinel;
}
var value = IteratorValue(next); // step 5.b.iii
}

if (innerIterator === sentinel) {
Expand All @@ -91,27 +89,20 @@ module.exports = function flatMap(mapper) {
}
// while (innerAlive) { // step 5.b.ix
if (innerAlive) {
var innerNext;
try {
innerNext = IteratorStep(innerIterator); // step 5.b.ix.1
} catch (e) {
innerIterator = sentinel;
closeIfAbrupt(ThrowCompletion(e)); // step 5.b.ix.2
}
if (!innerNext) {
innerAlive = false; // step 5.b.ix.3.a
innerIterator = sentinel;
return closure();
}
// step 5.b.ix.4
var innerValue;
try {
innerValue = IteratorValue(innerNext); // step 5.b.ix.4.a
innerValue = IteratorStepValue(innerIterator); // step 5.b.ix.4.a
} catch (e) {
innerAlive = false;
innerIterator = sentinel;
closeIfAbrupt(ThrowCompletion(e)); // step 5.b.ix.4.b
}
if (innerIterator['[[Done]]']) {
innerAlive = false;
innerIterator = sentinel;
return closure();
}
return innerValue; // step 5.b.ix.4.c
}
// }
Expand Down
14 changes: 6 additions & 8 deletions Iterator.prototype.forEach/implementation.js
Expand Up @@ -8,8 +8,7 @@ var Call = require('es-abstract/2023/Call');
var GetIteratorDirect = require('../aos/GetIteratorDirect');
var IsCallable = require('es-abstract/2023/IsCallable');
var IteratorClose = require('../aos/IteratorClose');
var IteratorStep = require('es-abstract/2023/IteratorStep');
var IteratorValue = require('es-abstract/2023/IteratorValue');
var IteratorStepValue = require('../aos/IteratorStepValue');
var ThrowCompletion = require('es-abstract/2023/ThrowCompletion');
var Type = require('es-abstract/2023/Type');

Expand All @@ -33,21 +32,20 @@ module.exports = function forEach(fn) {

// eslint-disable-next-line no-constant-condition
while (true) { // step 6
var next = IteratorStep(iterated); // step 6.a
if (!next) {
var value = IteratorStepValue(iterated); // step 6.a
if (iterated['[[Done]]']) {
return void undefined; // step 6.b
}
var value = IteratorValue(next); // step 6.c
try {
Call(fn, void undefined, [value, counter]); // step 6.d
Call(fn, void undefined, [value, counter]); // step 6.c
} catch (e) {
IteratorClose(
iterated,
ThrowCompletion(e)
); // steps 6.e
); // steps 6.d
throw e;
} finally {
counter += 1; // step 6.f
counter += 1; // step 6.e
}
}
};
15 changes: 6 additions & 9 deletions Iterator.prototype.map/implementation.js
Expand Up @@ -10,8 +10,7 @@ var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure');
var GetIteratorDirect = require('../aos/GetIteratorDirect');
var IsCallable = require('es-abstract/2023/IsCallable');
var IteratorClose = require('../aos/IteratorClose');
var IteratorStep = require('es-abstract/2023/IteratorStep');
var IteratorValue = require('es-abstract/2023/IteratorValue');
var IteratorStepValue = require('../aos/IteratorStepValue');
var ThrowCompletion = require('es-abstract/2023/ThrowCompletion');
var Type = require('es-abstract/2023/Type');

Expand Down Expand Up @@ -49,16 +48,14 @@ module.exports = function map(mapper) {
var counter = 0; // step 6.a
var closure = function () {
// while (true) { // step 6.b
var next = IteratorStep(iterated); // step 6.b.i

if (!next) {
// return void undefined; // step 6.b.ii
return sentinel;
var value = IteratorStepValue(iterated); // step 6.b.i
if (iterated['[[Done]]']) {
return sentinel; // step 6.b.ii
}
var value = IteratorValue(next); // step 6.b.iii

var mapped;
try {
mapped = Call(mapper, void undefined, [value, counter]); // step 6.b.iv
mapped = Call(mapper, void undefined, [value, counter]); // step 6.b.iii
// yield mapped // step 6.b.vi
return mapped;
} catch (e) {
Expand Down
16 changes: 6 additions & 10 deletions Iterator.prototype.reduce/implementation.js
Expand Up @@ -8,8 +8,7 @@ var Call = require('es-abstract/2023/Call');
var GetIteratorDirect = require('../aos/GetIteratorDirect');
var IsCallable = require('es-abstract/2023/IsCallable');
var IteratorClose = require('../aos/IteratorClose');
var IteratorStep = require('es-abstract/2023/IteratorStep');
var IteratorValue = require('es-abstract/2023/IteratorValue');
var IteratorStepValue = require('../aos/IteratorStepValue');
var ThrowCompletion = require('es-abstract/2023/ThrowCompletion');
var Type = require('es-abstract/2023/Type');

Expand All @@ -31,13 +30,11 @@ module.exports = function reduce(reducer) {

var accumulator;
var counter;
var next;
if (arguments.length < 2) { // step 6
next = IteratorStep(iterated); // step 6.a
if (!next) {
throw new $TypeError('Reduce of empty iterator with no initial value'); // step 6.b
accumulator = IteratorStepValue(iterated); // step 6.a
if (iterated['[[Done]]']) {
throw new $TypeError('Reduce of empty iterator with no initial value');
}
accumulator = IteratorValue(next); // step 6.c
counter = 1;
} else { // step 7
accumulator = arguments[1]; // step 7.a
Expand All @@ -46,11 +43,10 @@ module.exports = function reduce(reducer) {

// eslint-disable-next-line no-constant-condition
while (true) { // step 8
next = IteratorStep(iterated); // step 8.a
if (!next) {
var value = IteratorStepValue(iterated); // step 8.a
if (iterated['[[Done]]']) {
return accumulator; // step 8.b
}
var value = IteratorValue(next); // step 8.c
try {
var result = Call(reducer, void undefined, [accumulator, value, counter]); // step 8.d
accumulator = result; // step 8.f
Expand Down
16 changes: 7 additions & 9 deletions Iterator.prototype.some/implementation.js
Expand Up @@ -8,8 +8,7 @@ var Call = require('es-abstract/2023/Call');
var GetIteratorDirect = require('../aos/GetIteratorDirect');
var IsCallable = require('es-abstract/2023/IsCallable');
var IteratorClose = require('../aos/IteratorClose');
var IteratorStep = require('es-abstract/2023/IteratorStep');
var IteratorValue = require('es-abstract/2023/IteratorValue');
var IteratorStepValue = require('../aos/IteratorStepValue');
var NormalCompletion = require('es-abstract/2023/NormalCompletion');
var ThrowCompletion = require('es-abstract/2023/ThrowCompletion');
var ToBoolean = require('es-abstract/2023/ToBoolean');
Expand All @@ -35,28 +34,27 @@ module.exports = function some(predicate) {

// eslint-disable-next-line no-constant-condition
while (true) { // step 6
var next = IteratorStep(iterated); // step 6.a
if (!next) {
var value = IteratorStepValue(iterated); // step 6.a
if (iterated['[[Done]]']) {
return false; // step 6.b
}
var value = IteratorValue(next); // step 6.c
var result;
try {
result = Call(predicate, void undefined, [value, counter]); // step 6.d
result = Call(predicate, void undefined, [value, counter]); // step 6.c
} catch (e) {
// close iterator // step 6.e
// close iterator // step 6.d
IteratorClose(
iterated,
ThrowCompletion(e)
);
} finally {
counter += 1; // step 6.g
counter += 1; // step 6.f
}
if (ToBoolean(result)) {
return IteratorClose(
iterated,
NormalCompletion(true)
); // step 6.f
); // step 6.e
}
}
};
11 changes: 4 additions & 7 deletions Iterator.prototype.take/implementation.js
Expand Up @@ -9,8 +9,7 @@ var CompletionRecord = require('es-abstract/2023/CompletionRecord');
var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure');
var GetIteratorDirect = require('../aos/GetIteratorDirect');
var IteratorClose = require('../aos/IteratorClose');
var IteratorStep = require('es-abstract/2023/IteratorStep');
var IteratorValue = require('es-abstract/2023/IteratorValue');
var IteratorStepValue = require('../aos/IteratorStepValue');
var NormalCompletion = require('es-abstract/2023/NormalCompletion');
var ToIntegerOrInfinity = require('es-abstract/2023/ToIntegerOrInfinity');
var ToNumber = require('es-abstract/2023/ToNumber');
Expand Down Expand Up @@ -68,13 +67,11 @@ module.exports = function take(limit) {
remaining -= 1; // step 9.b.ii.1
}

var next = IteratorStep(iterated); // step 9.b.iii
if (!next) {
// return void undefined; // step 9.b.iv
return sentinel;
var value = IteratorStepValue(iterated); // step 6.b.i
if (iterated['[[Done]]']) {
return sentinel; // step 6.b.ii
}

var value = IteratorValue(next); // step 9.b.iii
return value; // step 9.b.iv
// }
};
Expand Down

0 comments on commit aa62d72

Please sign in to comment.