anchor.diff:  
         return Future
             .wait(reusedLibrariesFuture)
  -          .then((List<LibraryElement> reusedLibraries) {
  +          .then((Iterable<LibraryElement> reusedLibraries) {
           resetImplementation(reusedLibraries.where((e) => e != null));
  +      });
  +    });
  +  }
  +
  +  Future<Null> resetLibraries(
  +      Future<Iterable<LibraryElement>> reuseLibraries(
  +          Iterable<LibraryElement> libraries)) {
  +    assert(currentHandler == null);
  +    return compiler.reuseLibraryTask.measure(() {
  +      return new Future<Iterable<LibraryElement>>(() {
  +        // Wrap in Future to shield against errors in user code.
  +        return reuseLibraries(libraryCanonicalUriMap.values);
  +      }).catchError((exception, StackTrace trace) {
  +        compiler.reportCrashInUserCode(
  +            'Uncaught exception in reuseLibraries', exception, trace);
  +        throw exception; // Async rethrow.
  +      }).then((Iterable<LibraryElement> reusedLibraries) {
  +        measure(() {
  +          resetImplementation(reusedLibraries);
  +        });
         });
       });
     }
  
positive.code: 
    /// Asynchronous version of [reset].
    Future resetAsync(Future<bool> reuseLibrary(LibraryElement library));
  }
  
  /// Handle for creating synthesized/patch libraries during library loading.
  
negative.code: import 'tree/tree.dart';
  import 'util/util.dart' show Link, LinkBuilder;
  
  typedef Future<Iterable<LibraryElement>> ReuseLibrariesFunction(
      Iterable<LibraryElement> libraries);
  
  /**
   * [CompilerTask] for loading libraries and setting up the import/export scopes.
   *
  