'use strict'; 
 | 
var call = require('../internals/function-call'); 
 | 
var anObject = require('../internals/an-object'); 
 | 
var getMethod = require('../internals/get-method'); 
 | 
  
 | 
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; 
 | 
}; 
 |