| Index: src/promise.js
 | 
| diff --git a/src/promise.js b/src/promise.js
 | 
| index db7863f8098f686cab2fc4545eab1429165797fc..552ce3df30a6ae2cf0d7e2f78195a58334972cd1 100644
 | 
| --- a/src/promise.js
 | 
| +++ b/src/promise.js
 | 
| @@ -173,37 +173,29 @@ function PromiseCatch(onReject) {
 | 
|  }
 | 
|  
 | 
|  function PromiseEnqueue(value, tasks) {
 | 
| -  promiseEvents.push(value, tasks);
 | 
| +  RunMicrotasks.queue.push(function() {
 | 
| +    for (var i = 0; i < tasks.length; i += 2) {
 | 
| +      PromiseHandle(value, tasks[i], tasks[i + 1])
 | 
| +    }
 | 
| +  });
 | 
| +
 | 
|    %SetMicrotaskPending(true);
 | 
|  }
 | 
|  
 | 
| -function PromiseMicrotaskRunner() {
 | 
| -  var events = promiseEvents;
 | 
| -  if (events.length > 0) {
 | 
| -    promiseEvents = new InternalArray;
 | 
| -    for (var i = 0; i < events.length; i += 2) {
 | 
| -      var value = events[i];
 | 
| -      var tasks = events[i + 1];
 | 
| -      for (var j = 0; j < tasks.length; j += 2) {
 | 
| -        var handler = tasks[j];
 | 
| -        var deferred = tasks[j + 1];
 | 
| -        try {
 | 
| -          var result = handler(value);
 | 
| -          if (result === deferred.promise)
 | 
| -            throw MakeTypeError('promise_cyclic', [result]);
 | 
| -          else if (IsPromise(result))
 | 
| -            result.chain(deferred.resolve, deferred.reject);
 | 
| -          else
 | 
| -            deferred.resolve(result);
 | 
| -        } catch(e) {
 | 
| -          // TODO(rossberg): perhaps log uncaught exceptions below.
 | 
| -          try { deferred.reject(e) } catch(e) {}
 | 
| -        }
 | 
| -      }
 | 
| -    }
 | 
| +function PromiseHandle(value, handler, deferred) {
 | 
| +  try {
 | 
| +    var result = handler(value);
 | 
| +    if (result === deferred.promise)
 | 
| +      throw MakeTypeError('promise_cyclic', [result]);
 | 
| +    else if (IsPromise(result))
 | 
| +      result.chain(deferred.resolve, deferred.reject);
 | 
| +    else
 | 
| +      deferred.resolve(result);
 | 
| +  } catch(e) {
 | 
| +    // TODO(rossberg): perhaps log uncaught exceptions below.
 | 
| +    try { deferred.reject(e) } catch(e) {}
 | 
|    }
 | 
|  }
 | 
| -RunMicrotasks.runners.push(PromiseMicrotaskRunner);
 | 
|  
 | 
|  
 | 
|  // Multi-unwrapped chaining with thenable coercion.
 | 
| 
 |