var SomePromiseArray = (function() {
// the PromiseArray to use with Promise.some method

function SomePromiseArray( values, caller ) {
    this.constructor$( values, caller );
}
inherits( SomePromiseArray, PromiseArray );

SomePromiseArray.prototype._init = function SomePromiseArray$_init() {
    this._init$( void 0, [] );
    this._howMany = 0;
    this._rejected = 0;
    this._rejectionValues = new Array( this.length() );
    this._resolutionValues = new Array( this.length() );
    if( this._isResolved() ) return;

    if( this._howMany > this._canPossiblyFulfill()  ) {
        this._reject( [] );
    }
};

SomePromiseArray.prototype._canPossiblyFulfill =
function SomePromiseArray$_canPossiblyFulfill() {
            //fulfilled already
    return this._totalResolved - this._rejected +
        //could fulfill
        ( this.length() - this._totalResolved );
};

//override
SomePromiseArray.prototype._promiseFulfilled =
function SomePromiseArray$_promiseFulfilled( value ) {
    if( this._isResolved() ) return;

    var totalResolved = this._totalResolved;
    this._resolutionValues[ totalResolved ] = value;
    this._totalResolved = totalResolved + 1;
    if( totalResolved + 1 === this._howMany ) {
        this._resolutionValues.length = this._howMany;
        this._fulfill( this._resolutionValues );
        this._resolutionValues =
            this._rejectionValues = null;
    }

};
//override
SomePromiseArray.prototype._promiseRejected =
function SomePromiseArray$_promiseRejected( reason ) {
    if( this._isResolved() ) return;

    this._rejectionValues[ this._rejected ] = reason;
    this._rejected++;
    this._totalResolved++;

    if( this._howMany > this._canPossiblyFulfill() ) {
        this._rejectionValues.length = this._rejected;
        this._reject( this._rejectionValues );
        this._resolutionValues =
            this._rejectionValues = null;
    }
};

return SomePromiseArray;})();

@@ -362,127 +362,60 @@
 ject
-ed = 0;%0A    this._rejectionValues = new Array( this.length() );%0A    this._resolutionValues = new Array( this.length() )
+ionValues = null;%0A    this._fulfillmentValues = null
 ;%0A  
@@ -548,266 +548,8 @@
 %7D;%0A%0A
-SomePromiseArray.prototype._canPossiblyFulfill =%0Afunction SomePromiseArray$_canPossiblyFulfill() %7B%0A            //fulfilled already%0A    return this._totalResolved - this._rejected +%0A        //could fulfill%0A        ( this.length() - this._totalResolved );%0A%7D;%0A%0A
 //ov
@@ -754,49 +754,29 @@
 is._
-resolutionValues%5B totalResolved %5D =
+addFulfilled(
  value
+ )
 ;%0A  
@@ -876,34 +876,35 @@
       this._
-resolution
+fulfillment
 Values.lengt
@@ -947,34 +947,35 @@
 fill( this._
-resolution
+fulfillment
 Values );%0A  
@@ -982,34 +982,35 @@
       this._
-resolution
+fulfillment
 Values =%0A   
@@ -1222,72 +1222,29 @@
 is._
-rejectionValues%5B this._r
+addR
 ejected
- %5D =
+(
  reason
-;%0A    this._rejected++
+ )
 ;%0A  
@@ -1328,63 +1328,8 @@
 ) %7B%0A
-        this._rejectionValues.length = this._rejected;%0A
     
@@ -1389,18 +1389,19 @@
 is._
-resolution
+fulfillment
 Valu
@@ -1457,16 +1457,959 @@
   %7D%0A%7D;%0A%0A
+SomePromiseArray.prototype._rejected = function SomePromiseArray$_rejected() %7B%0A    return this._rejectionValues === null%0A        ? 0%0A        : this._rejectionValues.length;%0A%7D;%0A%0ASomePromiseArray.prototype._addRejected =%0Afunction SomePromiseArray$_addRejected( reason ) %7B%0A    if( this._rejectionValues === null ) %7B%0A        this._rejectionValues = %5Breason%5D;%0A    %7D%0A    else %7B%0A        this._rejectionValues.push( reason );%0A    %7D%0A%7D;%0A%0ASomePromiseArray.prototype._addFulfilled =%0Afunction SomePromiseArray$_addFulfilled( value ) %7B%0A    if( this._fulfillmentValues === null ) %7B%0A        this._fulfillmentValues = %5Bvalue%5D;%0A    %7D%0A    else %7B%0A        this._fulfillmentValues.push( value );%0A    %7D%0A%7D;%0A%0ASomePromiseArray.prototype._canPossiblyFulfill =%0Afunction SomePromiseArray$_canPossiblyFulfill() %7B%0A            //fulfilled already%0A    return this._totalResolved - this._rejected() +%0A        //could fulfill%0A        ( this.length() - this._totalResolved );%0A%7D;%0A
 return S

Improve perf of Promise.some by not eagerly allocating and not storing redundant rejection count.