whole_func_string: function PromiseAll(iterable) {
    if (!IS_RECEIVER(this)) {
      throw MakeTypeError(kCalledOnNonObject, "Promise.all");
    }
  
    var deferred = NewPromiseCapability(this);
    var resolutions = new InternalArray();
    var count;
  
    function CreateResolveElementFunction(index, values, promiseCapability) {
      var alreadyCalled = false;
      return (x) => {
        if (alreadyCalled === true) return;
        alreadyCalled = true;
        values[index] = x;
        if (--count === 0) {
          var valuesArray = [];
          %MoveArrayContents(values, valuesArray);
          %_Call(promiseCapability.resolve, UNDEFINED, valuesArray);
        }
      };
    }
  
    try {
      var i = 0;
      count = 1;
      for (var value of iterable) {
        var nextPromise = this.resolve(value);
        ++count;
        nextPromise.then(
            CreateResolveElementFunction(i, resolutions, deferred),
            deferred.reject);
        SET_PRIVATE(deferred.reject, promiseCombinedDeferredSymbol, deferred);
        ++i;
      }
  
      // 6.d
      if (--count === 0) {
        var valuesArray = [];
        %MoveArrayContents(resolutions, valuesArray);
        %_Call(deferred.resolve, UNDEFINED, valuesArray);
      }
  
    } catch (e) {
      %_Call(deferred.reject, UNDEFINED, e);
    }
    return deferred.promise;
  }
func_code_string: function PromiseAll(iterable) {
    if (!IS_RECEIVER(this)) {
      throw MakeTypeError(kCalledOnNonObject, "Promise.all");
    }
  
    var deferred = NewPromiseCapability(this);
    var resolutions = new InternalArray();
    var count;
  
    function CreateResolveElementFunction(index, values, promiseCapability) {
      var alreadyCalled = false;
      return (x) => {
        if (alreadyCalled === true) return;
        alreadyCalled = true;
        values[index] = x;
        if (--count === 0) {
          var valuesArray = [];
          %MoveArrayContents(values, valuesArray);
          %_Call(promiseCapability.resolve, UNDEFINED, valuesArray);
        }
      };
    }
  
    try {
      var i = 0;
      count = 1;
      for (var value of iterable) {
        var nextPromise = this.resolve(value);
        ++count;
        nextPromise.then(
            CreateResolveElementFunction(i, resolutions, deferred),
            deferred.reject);
        SET_PRIVATE(deferred.reject, promiseCombinedDeferredSymbol, deferred);
        ++i;
      }
  
      // 6.d
      if (--count === 0) {
        var valuesArray = [];
        %MoveArrayContents(resolutions, valuesArray);
        %_Call(deferred.resolve, UNDEFINED, valuesArray);
      }
  
    } catch (e) {
      %_Call(deferred.reject, UNDEFINED, e);
    }
    return deferred.promise;
  }
func_documentation_string: ES#sec-promise.all Promise.all ( iterable )