Added test to ensure that release notes are parsed properly Updated to latest dependencies to fix security vulnerability Updated GH Actions Workflow to run test before updating tag Updated README.md to reflect proper whatsnew documentation.
51 lines
1.4 KiB
JavaScript
51 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
var GetIntrinsic = require('../GetIntrinsic');
|
|
|
|
var $TypeError = GetIntrinsic('%TypeError%');
|
|
|
|
var Call = require('./Call');
|
|
var GetMethod = require('./GetMethod');
|
|
var IsCallable = require('./IsCallable');
|
|
var Type = require('./Type');
|
|
|
|
// https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose
|
|
|
|
module.exports = function IteratorClose(iterator, completion) {
|
|
if (Type(iterator) !== 'Object') {
|
|
throw new $TypeError('Assertion failed: Type(iterator) is not Object');
|
|
}
|
|
if (!IsCallable(completion)) {
|
|
throw new $TypeError('Assertion failed: completion is not a thunk for a Completion Record');
|
|
}
|
|
var completionThunk = completion;
|
|
|
|
var iteratorReturn = GetMethod(iterator, 'return');
|
|
|
|
if (typeof iteratorReturn === 'undefined') {
|
|
return completionThunk();
|
|
}
|
|
|
|
var completionRecord;
|
|
try {
|
|
var innerResult = Call(iteratorReturn, iterator, []);
|
|
} catch (e) {
|
|
// if we hit here, then "e" is the innerResult completion that needs re-throwing
|
|
|
|
// if the completion is of type "throw", this will throw.
|
|
completionThunk();
|
|
completionThunk = null; // ensure it's not called twice.
|
|
|
|
// if not, then return the innerResult completion
|
|
throw e;
|
|
}
|
|
completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
|
|
completionThunk = null; // ensure it's not called twice.
|
|
|
|
if (Type(innerResult) !== 'Object') {
|
|
throw new $TypeError('iterator .return must return an object');
|
|
}
|
|
|
|
return completionRecord;
|
|
};
|