| Index: pkg/kernel/lib/transformations/continuation.dart
 | 
| diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/kernel/lib/transformations/continuation.dart
 | 
| index 025ed52613b50f2199ae0bcb0225935f9080bd9a..0b7afca5fe5e0040fd7087ebdf4deb8026ec6ae5 100644
 | 
| --- a/pkg/kernel/lib/transformations/continuation.dart
 | 
| +++ b/pkg/kernel/lib/transformations/continuation.dart
 | 
| @@ -893,85 +893,22 @@ class HelperNodes {
 | 
|        this.coreTypes);
 | 
|  
 | 
|    factory HelperNodes.fromProgram(Program program) {
 | 
| -    Library findLibrary(String name) {
 | 
| -      Uri uri = Uri.parse(name);
 | 
| -      for (var library in program.libraries) {
 | 
| -        if (library.importUri == uri) return library;
 | 
| -      }
 | 
| -      throw 'Library "$name" not found';
 | 
| -    }
 | 
| -
 | 
| -    Class findClass(Library library, String name) {
 | 
| -      for (var klass in library.classes) {
 | 
| -        if (klass.name == name) return klass;
 | 
| -      }
 | 
| -      throw 'Class "$name" not found';
 | 
| -    }
 | 
| -
 | 
| -    Procedure findFactoryConstructor(Class klass, String name) {
 | 
| -      for (var procedure in klass.procedures) {
 | 
| -        if (procedure.isStatic && procedure.name.name == name) return procedure;
 | 
| -      }
 | 
| -      throw 'Factory constructor "$klass.$name" not found';
 | 
| -    }
 | 
| -
 | 
| -    Constructor findConstructor(Class klass, String name) {
 | 
| -      for (var constructor in klass.constructors) {
 | 
| -        if (constructor.name.name == name) return constructor;
 | 
| -      }
 | 
| -      throw 'Constructor "$klass.$name" not found';
 | 
| -    }
 | 
| -
 | 
| -    Procedure findProcedure(Library library, String name) {
 | 
| -      for (var procedure in library.procedures) {
 | 
| -        if (procedure.name.name == name ||
 | 
| -            procedure.name.name == '${library.name}::${name}') {
 | 
| -          return procedure;
 | 
| -        }
 | 
| -      }
 | 
| -      throw 'Procedure "$name" not found';
 | 
| -    }
 | 
| -
 | 
| -    var asyncLibrary = findLibrary('dart:async');
 | 
| -    var coreLibrary = findLibrary('dart:core');
 | 
| -
 | 
| -    var completerClass = findClass(asyncLibrary, 'Completer');
 | 
| -    var futureClass = findClass(asyncLibrary, 'Future');
 | 
| -    var iteratorClass = findClass(coreLibrary, 'Iterator');
 | 
| -
 | 
| -    // The VM's dart:async implementation has renamed _StreamIteratorImpl to
 | 
| -    // _StreamIterator.  To support both old and new library implementations we
 | 
| -    // look for the old name first and then the new name.
 | 
| -    var streamIteratorClass;
 | 
| -    try {
 | 
| -      streamIteratorClass = findClass(asyncLibrary, '_StreamIteratorImpl');
 | 
| -    } catch (e) {
 | 
| -      if (e == 'Class "_StreamIteratorImpl" not found') {
 | 
| -        streamIteratorClass = findClass(asyncLibrary, '_StreamIterator');
 | 
| -      } else {
 | 
| -        rethrow;
 | 
| -      }
 | 
| -    }
 | 
| -
 | 
| -    var syncIterableClass = findClass(coreLibrary, '_SyncIterable');
 | 
| -    var streamControllerClass =
 | 
| -        findClass(asyncLibrary, '_AsyncStarStreamController');
 | 
| -
 | 
| +    var coreTypes = new CoreTypes(program);
 | 
|      return new HelperNodes(
 | 
| -        asyncLibrary,
 | 
| -        coreLibrary,
 | 
| -        iteratorClass,
 | 
| -        futureClass,
 | 
| -        completerClass,
 | 
| -        findProcedure(coreLibrary, 'print'),
 | 
| -        findFactoryConstructor(completerClass, 'sync'),
 | 
| -        findConstructor(syncIterableClass, ''),
 | 
| -        findConstructor(streamIteratorClass, ''),
 | 
| -        findFactoryConstructor(futureClass, 'microtask'),
 | 
| -        findConstructor(streamControllerClass, ''),
 | 
| -        findProcedure(asyncLibrary, '_asyncThenWrapperHelper'),
 | 
| -        findProcedure(asyncLibrary, '_asyncErrorWrapperHelper'),
 | 
| -        findProcedure(asyncLibrary, '_awaitHelper'),
 | 
| -        new CoreTypes(program));
 | 
| +        coreTypes.getLibrary('dart:async'),
 | 
| +        coreTypes.getLibrary('dart:core'),
 | 
| +        coreTypes.getClass('dart:core', 'Iterator'),
 | 
| +        coreTypes.getClass('dart:async', 'Future'),
 | 
| +        coreTypes.getClass('dart:async', 'Completer'),
 | 
| +        coreTypes.getTopLevelMember('dart:core', 'print'),
 | 
| +        coreTypes.getMember('dart:async', 'Completer', 'sync'),
 | 
| +        coreTypes.getMember('dart:core', '_SyncIterable', ''),
 | 
| +        coreTypes.getMember('dart:async', '_StreamIterator', ''),
 | 
| +        coreTypes.getMember('dart:async', 'Future', 'microtask'),
 | 
| +        coreTypes.getMember('dart:async', '_AsyncStarStreamController', ''),
 | 
| +        coreTypes.getTopLevelMember('dart:async', '_asyncThenWrapperHelper'),
 | 
| +        coreTypes.getTopLevelMember('dart:async', '_asyncErrorWrapperHelper'),
 | 
| +        coreTypes.getTopLevelMember('dart:async', '_awaitHelper'),
 | 
| +        coreTypes);
 | 
|    }
 | 
|  }
 | 
| 
 |