From c7d752185141e2617284d3a2e1a30e5e0db7ce27 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Tue, 12 Nov 2024 15:47:27 -0800 Subject: [PATCH] [Fix] `ES2024`+: Iterator Records can now have non-functions in `[[NextMethod]]` --- .gitattributes | 6 ------ 2018/AsyncIteratorClose.js | 2 +- 2018/CreateAsyncFromSyncIterator.js | 2 +- 2019/AsyncIteratorClose.js | 2 +- 2019/CreateAsyncFromSyncIterator.js | 2 +- 2020/AsyncIteratorClose.js | 2 +- 2020/CreateAsyncFromSyncIterator.js | 2 +- 2021/AsyncIteratorClose.js | 2 +- 2021/CreateAsyncFromSyncIterator.js | 2 +- 2022/AsyncIteratorClose.js | 2 +- 2022/CreateAsyncFromSyncIterator.js | 2 +- 2023/AsyncIteratorClose.js | 2 +- 2023/CreateAsyncFromSyncIterator.js | 2 +- 2023/IteratorClose.js | 2 +- 2023/IteratorNext.js | 2 +- 2023/IteratorStep.js | 2 +- 2023/IteratorToList.js | 2 +- 2024/AsyncIteratorClose.js | 2 +- 2024/CreateAsyncFromSyncIterator.js | 2 +- 2024/IteratorClose.js | 2 +- 2024/IteratorNext.js | 2 +- 2024/IteratorStep.js | 2 +- 2024/IteratorToList.js | 2 +- helpers/assertRecord.js | 2 +- helpers/records/iterator-record-2023.js | 7 +++++++ helpers/records/iterator-record.js | 1 - 26 files changed, 30 insertions(+), 30 deletions(-) create mode 100644 helpers/records/iterator-record-2023.js diff --git a/.gitattributes b/.gitattributes index 3736f327..34620f09 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1379,7 +1379,6 @@ /2024/ArraySetLength.js spackled linguist-generated=true /2024/ArraySpeciesCreate.js spackled linguist-generated=true /2024/AsyncFromSyncIteratorContinuation.js spackled linguist-generated=true -/2024/AsyncIteratorClose.js spackled linguist-generated=true /2024/BigInt/add.js spackled linguist-generated=true /2024/BigInt/bitwiseAND.js spackled linguist-generated=true /2024/BigInt/bitwiseNOT.js spackled linguist-generated=true @@ -1418,7 +1417,6 @@ /2024/CompletePropertyDescriptor.js spackled linguist-generated=true /2024/CompletionRecord.js spackled linguist-generated=true /2024/CopyDataProperties.js spackled linguist-generated=true -/2024/CreateAsyncFromSyncIterator.js spackled linguist-generated=true /2024/CreateDataProperty.js spackled linguist-generated=true /2024/CreateDataPropertyOrThrow.js spackled linguist-generated=true /2024/CreateHTML.js spackled linguist-generated=true @@ -1477,11 +1475,7 @@ /2024/IsStrictlyEqual.js spackled linguist-generated=true /2024/IsStringWellFormedUnicode.js spackled linguist-generated=true /2024/IsWordChar.js spackled linguist-generated=true -/2024/IteratorClose.js spackled linguist-generated=true /2024/IteratorComplete.js spackled linguist-generated=true -/2024/IteratorNext.js spackled linguist-generated=true -/2024/IteratorStep.js spackled linguist-generated=true -/2024/IteratorToList.js spackled linguist-generated=true /2024/IteratorValue.js spackled linguist-generated=true /2024/KeyForSymbol.js spackled linguist-generated=true /2024/LengthOfArrayLike.js spackled linguist-generated=true diff --git a/2018/AsyncIteratorClose.js b/2018/AsyncIteratorClose.js index c92d265e..a906ddf7 100644 --- a/2018/AsyncIteratorClose.js +++ b/2018/AsyncIteratorClose.js @@ -11,7 +11,7 @@ var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var Type = require('./Type'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var callBound = require('call-bind/callBound'); diff --git a/2018/CreateAsyncFromSyncIterator.js b/2018/CreateAsyncFromSyncIterator.js index 20d785ea..279ae66b 100644 --- a/2018/CreateAsyncFromSyncIterator.js +++ b/2018/CreateAsyncFromSyncIterator.js @@ -17,7 +17,7 @@ var ObjectCreate = require('./ObjectCreate'); var PromiseResolve = require('./PromiseResolve'); var Type = require('./Type'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var SLOT = require('internal-slot'); diff --git a/2019/AsyncIteratorClose.js b/2019/AsyncIteratorClose.js index c92d265e..a906ddf7 100644 --- a/2019/AsyncIteratorClose.js +++ b/2019/AsyncIteratorClose.js @@ -11,7 +11,7 @@ var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var Type = require('./Type'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var callBound = require('call-bind/callBound'); diff --git a/2019/CreateAsyncFromSyncIterator.js b/2019/CreateAsyncFromSyncIterator.js index d7821354..0eb3a658 100644 --- a/2019/CreateAsyncFromSyncIterator.js +++ b/2019/CreateAsyncFromSyncIterator.js @@ -15,7 +15,7 @@ var IteratorNext = require('./IteratorNext'); var ObjectCreate = require('./ObjectCreate'); var Type = require('./Type'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var SLOT = require('internal-slot'); diff --git a/2020/AsyncIteratorClose.js b/2020/AsyncIteratorClose.js index c92d265e..a906ddf7 100644 --- a/2020/AsyncIteratorClose.js +++ b/2020/AsyncIteratorClose.js @@ -11,7 +11,7 @@ var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var Type = require('./Type'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var callBound = require('call-bind/callBound'); diff --git a/2020/CreateAsyncFromSyncIterator.js b/2020/CreateAsyncFromSyncIterator.js index 8e9e103f..a46c98ec 100644 --- a/2020/CreateAsyncFromSyncIterator.js +++ b/2020/CreateAsyncFromSyncIterator.js @@ -15,7 +15,7 @@ var IteratorNext = require('./IteratorNext'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var Type = require('./Type'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var SLOT = require('internal-slot'); diff --git a/2021/AsyncIteratorClose.js b/2021/AsyncIteratorClose.js index 0a7d9e03..1f2b83df 100644 --- a/2021/AsyncIteratorClose.js +++ b/2021/AsyncIteratorClose.js @@ -11,7 +11,7 @@ var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var Type = require('./Type'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var callBound = require('call-bind/callBound'); diff --git a/2021/CreateAsyncFromSyncIterator.js b/2021/CreateAsyncFromSyncIterator.js index 8e9e103f..a46c98ec 100644 --- a/2021/CreateAsyncFromSyncIterator.js +++ b/2021/CreateAsyncFromSyncIterator.js @@ -15,7 +15,7 @@ var IteratorNext = require('./IteratorNext'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var Type = require('./Type'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var SLOT = require('internal-slot'); diff --git a/2022/AsyncIteratorClose.js b/2022/AsyncIteratorClose.js index 0a7d9e03..1f2b83df 100644 --- a/2022/AsyncIteratorClose.js +++ b/2022/AsyncIteratorClose.js @@ -11,7 +11,7 @@ var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var Type = require('./Type'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var callBound = require('call-bind/callBound'); diff --git a/2022/CreateAsyncFromSyncIterator.js b/2022/CreateAsyncFromSyncIterator.js index 8e9e103f..a46c98ec 100644 --- a/2022/CreateAsyncFromSyncIterator.js +++ b/2022/CreateAsyncFromSyncIterator.js @@ -15,7 +15,7 @@ var IteratorNext = require('./IteratorNext'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var Type = require('./Type'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var SLOT = require('internal-slot'); diff --git a/2023/AsyncIteratorClose.js b/2023/AsyncIteratorClose.js index 0a7d9e03..1f2b83df 100644 --- a/2023/AsyncIteratorClose.js +++ b/2023/AsyncIteratorClose.js @@ -11,7 +11,7 @@ var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var Type = require('./Type'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var callBound = require('call-bind/callBound'); diff --git a/2023/CreateAsyncFromSyncIterator.js b/2023/CreateAsyncFromSyncIterator.js index 96a84e2e..dbb221c4 100644 --- a/2023/CreateAsyncFromSyncIterator.js +++ b/2023/CreateAsyncFromSyncIterator.js @@ -17,7 +17,7 @@ var Type = require('./Type'); var SLOT = require('internal-slot'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorPrototype%', true) || { next: function next(value) { diff --git a/2023/IteratorClose.js b/2023/IteratorClose.js index 295ca9f7..c0e1f351 100644 --- a/2023/IteratorClose.js +++ b/2023/IteratorClose.js @@ -8,7 +8,7 @@ var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var Type = require('./Type'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); // https://262.ecma-international.org/14.0/#sec-iteratorclose diff --git a/2023/IteratorNext.js b/2023/IteratorNext.js index 205e56bc..de41e94a 100644 --- a/2023/IteratorNext.js +++ b/2023/IteratorNext.js @@ -5,7 +5,7 @@ var $TypeError = require('es-errors/type'); var Call = require('./Call'); var Type = require('./Type'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); // https://262.ecma-international.org/14.0/#sec-iteratornext diff --git a/2023/IteratorStep.js b/2023/IteratorStep.js index 83339da1..28a7f95a 100644 --- a/2023/IteratorStep.js +++ b/2023/IteratorStep.js @@ -5,7 +5,7 @@ var $TypeError = require('es-errors/type'); var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); // https://262.ecma-international.org/14.0/#sec-iteratorstep diff --git a/2023/IteratorToList.js b/2023/IteratorToList.js index 6794eb0c..80d4278b 100644 --- a/2023/IteratorToList.js +++ b/2023/IteratorToList.js @@ -9,7 +9,7 @@ var $arrayPush = callBound('Array.prototype.push'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); -var isIteratorRecord = require('../helpers/records/iterator-record'); +var isIteratorRecord = require('../helpers/records/iterator-record-2023'); // https://262.ecma-international.org/14.0/#sec-iteratortolist diff --git a/2024/AsyncIteratorClose.js b/2024/AsyncIteratorClose.js index 0a7d9e03..0e22df0a 100644 --- a/2024/AsyncIteratorClose.js +++ b/2024/AsyncIteratorClose.js @@ -17,7 +17,7 @@ var callBound = require('call-bind/callBound'); var $then = callBound('Promise.prototype.then', true); -// https://262.ecma-international.org/12.0/#sec-asynciteratorclose +// https://262.ecma-international.org/15.0/#sec-asynciteratorclose module.exports = function AsyncIteratorClose(iteratorRecord, completion) { if (!isIteratorRecord(iteratorRecord)) { diff --git a/2024/CreateAsyncFromSyncIterator.js b/2024/CreateAsyncFromSyncIterator.js index 96a84e2e..39bfa352 100644 --- a/2024/CreateAsyncFromSyncIterator.js +++ b/2024/CreateAsyncFromSyncIterator.js @@ -115,7 +115,7 @@ var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorProtot } }; -// https://262.ecma-international.org/14.0/#sec-createasyncfromsynciterator +// https://262.ecma-international.org/15.0/#sec-createasyncfromsynciterator module.exports = function CreateAsyncFromSyncIterator(syncIteratorRecord) { if (!isIteratorRecord(syncIteratorRecord)) { diff --git a/2024/IteratorClose.js b/2024/IteratorClose.js index 295ca9f7..e32f7fcc 100644 --- a/2024/IteratorClose.js +++ b/2024/IteratorClose.js @@ -10,7 +10,7 @@ var Type = require('./Type'); var isIteratorRecord = require('../helpers/records/iterator-record'); -// https://262.ecma-international.org/14.0/#sec-iteratorclose +// https://262.ecma-international.org/15.0/#sec-iteratorclose module.exports = function IteratorClose(iteratorRecord, completion) { if (!isIteratorRecord(iteratorRecord)) { diff --git a/2024/IteratorNext.js b/2024/IteratorNext.js index 205e56bc..6984eceb 100644 --- a/2024/IteratorNext.js +++ b/2024/IteratorNext.js @@ -7,7 +7,7 @@ var Type = require('./Type'); var isIteratorRecord = require('../helpers/records/iterator-record'); -// https://262.ecma-international.org/14.0/#sec-iteratornext +// https://262.ecma-international.org/15.0/#sec-iteratornext module.exports = function IteratorNext(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { diff --git a/2024/IteratorStep.js b/2024/IteratorStep.js index 83339da1..e076fb3f 100644 --- a/2024/IteratorStep.js +++ b/2024/IteratorStep.js @@ -7,7 +7,7 @@ var IteratorNext = require('./IteratorNext'); var isIteratorRecord = require('../helpers/records/iterator-record'); -// https://262.ecma-international.org/14.0/#sec-iteratorstep +// https://262.ecma-international.org/15.0/#sec-iteratorstep module.exports = function IteratorStep(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { diff --git a/2024/IteratorToList.js b/2024/IteratorToList.js index 6794eb0c..e32e404a 100644 --- a/2024/IteratorToList.js +++ b/2024/IteratorToList.js @@ -11,7 +11,7 @@ var IteratorValue = require('./IteratorValue'); var isIteratorRecord = require('../helpers/records/iterator-record'); -// https://262.ecma-international.org/14.0/#sec-iteratortolist +// https://262.ecma-international.org/15.0/#sec-iteratortolist module.exports = function IteratorToList(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { diff --git a/helpers/assertRecord.js b/helpers/assertRecord.js index 0cfa33a3..a8232680 100644 --- a/helpers/assertRecord.js +++ b/helpers/assertRecord.js @@ -7,7 +7,7 @@ var $SyntaxError = require('es-errors/syntax'); var isMatchRecord = require('./records/match-record'); var isPropertyDescriptor = require('./records/property-descriptor'); -var isIteratorRecord = require('./records/iterator-record'); +var isIteratorRecord = require('./records/iterator-record-2023'); var isPromiseCapabilityRecord = require('./records/promise-capability-record'); var isAsyncGeneratorRequestRecord = require('./records/async-generator-request-record'); var isRegExpRecord = require('./records/regexp-record'); diff --git a/helpers/records/iterator-record-2023.js b/helpers/records/iterator-record-2023.js new file mode 100644 index 00000000..cd04a894 --- /dev/null +++ b/helpers/records/iterator-record-2023.js @@ -0,0 +1,7 @@ +'use strict'; + +var isIteratorRecordNew = require('./iterator-record'); + +module.exports = function isIteratorRecord(value) { + return isIteratorRecordNew(value) && typeof value['[[NextMethod]]'] === 'function'; +}; diff --git a/helpers/records/iterator-record.js b/helpers/records/iterator-record.js index 920051ef..66cd7492 100644 --- a/helpers/records/iterator-record.js +++ b/helpers/records/iterator-record.js @@ -7,7 +7,6 @@ module.exports = function isIteratorRecord(value) { && typeof value === 'object' && hasOwn(value, '[[Iterator]]') && hasOwn(value, '[[NextMethod]]') - && typeof value['[[NextMethod]]'] === 'function' && hasOwn(value, '[[Done]]') && typeof value['[[Done]]'] === 'boolean'; };