+var call = require('../internals/function-call');
var anObject = require('../internals/an-object');
+var getMethod = require('../internals/get-method');
-module.exports = function (iterator) {
- var returnMethod = iterator['return'];
- if (returnMethod !== undefined) {
- return anObject(returnMethod.call(iterator)).value;
+module.exports = function (iterator, kind, value) {
+ var innerResult, innerError;
+ anObject(iterator);
+ try {
+ innerResult = getMethod(iterator, 'return');
+ if (!innerResult) {
+ if (kind === 'throw') throw value;
+ return value;
+ }
+ innerResult = call(innerResult, iterator);
+ } catch (error) {
+ innerError = true;
+ innerResult = error;
}
+ if (kind === 'throw') throw value;
+ if (innerError) throw innerResult;
+ anObject(innerResult);
+ return value;
};