anchor.diff:  library observe.src.microtask;
   
   import 'dart:async' show Completer, runZonedExperimental;
  +import 'dart:collection';
   import 'package:observe/observe.dart' show Observable;
   
   // TODO(jmesserly): remove "microtask" from these names and instead import
  
positive.code:  * performing [Observable.dirtyCheck], until there are no more pending events.
   * It will always dirty check at least once.
   */
  void performMicrotaskCheckpoint() {
    Observable.dirtyCheck();
  
    while (_pending.length > 0) {
      var pending = _pending;
      _pending = [];
  
      for (var callback in pending) {
        try {
          callback();
        } catch (e, s) {
  
negative.code:   }
  }
  
  final Queue<Function> _pending = new Queue<Function>();
  
  /**
   * Wraps the [body] in a zone that supports [performMicrotaskCheckpoint],
   * and returns the body.
   */
  // TODO(jmesserly): deprecate? this doesn't add much over runMicrotask.
  wrapMicrotask(body()) => () => runMicrotask(body);
  
  /**
   * Runs the [body] in a zone that supports [performMicrotaskCheckpoint],
   * and returns the result.
   */
  runMicrotask(body()) => runZonedExperimental(() {
    try {
      return body();
    } finally {
      performMicrotaskCheckpoint();
    }
  }, onRunAsync: (callback) => _pending.add(callback));
  