'use strict'; 
 | 
var $ = require('../internals/export'); 
 | 
var aCallable = require('../internals/a-callable'); 
 | 
var aSet = require('../internals/a-set'); 
 | 
var iterate = require('../internals/set-iterate'); 
 | 
  
 | 
var $TypeError = TypeError; 
 | 
  
 | 
// `Set.prototype.reduce` method 
 | 
// https://github.com/tc39/proposal-collection-methods 
 | 
$({ target: 'Set', proto: true, real: true, forced: true }, { 
 | 
  reduce: function reduce(callbackfn /* , initialValue */) { 
 | 
    var set = aSet(this); 
 | 
    var noInitial = arguments.length < 2; 
 | 
    var accumulator = noInitial ? undefined : arguments[1]; 
 | 
    aCallable(callbackfn); 
 | 
    iterate(set, function (value) { 
 | 
      if (noInitial) { 
 | 
        noInitial = false; 
 | 
        accumulator = value; 
 | 
      } else { 
 | 
        accumulator = callbackfn(accumulator, value, value, set); 
 | 
      } 
 | 
    }); 
 | 
    if (noInitial) throw new $TypeError('Reduce of empty set with no initial value'); 
 | 
    return accumulator; 
 | 
  } 
 | 
}); 
 |