| Index: utils/kernel-service/kernel-service.dart
 | 
| diff --git a/utils/kernel-service/kernel-service.dart b/utils/kernel-service/kernel-service.dart
 | 
| index 072697b961e0216f5ab3563863070a7d2f173847..ec7e2aa2ae1a022c1b83d3433b516790f3980d4d 100644
 | 
| --- a/utils/kernel-service/kernel-service.dart
 | 
| +++ b/utils/kernel-service/kernel-service.dart
 | 
| @@ -24,14 +24,17 @@ import 'dart:async';
 | 
|  import 'dart:io';
 | 
|  import 'dart:isolate';
 | 
|  
 | 
| +import 'package:front_end/memory_file_system.dart';
 | 
| +import 'package:front_end/physical_file_system.dart';
 | 
|  import 'package:front_end/src/fasta/vm.dart'
 | 
| -    show CompilationResult, Status, parseScript;
 | 
| +    show CompilationResult, Status, parseScriptInFileSystem;
 | 
|  
 | 
|  const bool verbose = const bool.fromEnvironment('DFE_VERBOSE');
 | 
|  
 | 
|  const bool strongMode = const bool.fromEnvironment('DFE_STRONG_MODE');
 | 
|  
 | 
| -Future<CompilationResult> _processLoadRequestImpl(String inputFilePathOrUri) {
 | 
| +Future<CompilationResult> _processLoadRequestImpl(
 | 
| +    String inputFilePathOrUri, FileSystem fileSystem) {
 | 
|    Uri scriptUri = Uri.parse(inputFilePathOrUri);
 | 
|  
 | 
|    // Because we serve both Loader and bootstrapping requests we need to
 | 
| @@ -48,8 +51,8 @@ Future<CompilationResult> _processLoadRequestImpl(String inputFilePathOrUri) {
 | 
|      return new Future<CompilationResult>.value(new CompilationResult.error(
 | 
|          "Expected 'file' scheme for a script uri: got ${scriptUri.scheme}"));
 | 
|    }
 | 
| -
 | 
| -  return parseScript(scriptUri, verbose: verbose, strongMode: strongMode);
 | 
| +  return parseScriptInFileSystem(scriptUri, fileSystem,
 | 
| +      verbose: verbose, strongMode: strongMode);
 | 
|  }
 | 
|  
 | 
|  // Process a request from the runtime. See KernelIsolate::CompileToKernel in
 | 
| @@ -64,10 +67,13 @@ Future _processLoadRequest(request) async {
 | 
|    int tag = request[0];
 | 
|    final SendPort port = request[1];
 | 
|    final String inputFileUrl = request[2];
 | 
| +  FileSystem fileSystem = request.length > 3
 | 
| +      ? _buildMemoryFileSystem(request[3])
 | 
| +      : PhysicalFileSystem.instance;
 | 
|  
 | 
|    CompilationResult result;
 | 
|    try {
 | 
| -    result = await _processLoadRequestImpl(inputFileUrl);
 | 
| +    result = await _processLoadRequestImpl(inputFileUrl, fileSystem);
 | 
|    } catch (error, stack) {
 | 
|      result = new CompilationResult.crash(error, stack);
 | 
|    }
 | 
| @@ -90,6 +96,20 @@ Future _processLoadRequest(request) async {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| +// Given namedSources list of interleaved file name string and
 | 
| +// raw file content Uint8List this function builds up and returns
 | 
| +// MemoryFileSystem instance that can be used instead of
 | 
| +// PhysicalFileSystem.instance by the frontend.
 | 
| +FileSystem _buildMemoryFileSystem(List namedSources) {
 | 
| +  FileSystem fileSystem = new MemoryFileSystem(Uri.parse('file:///'));
 | 
| +  for (int i = 0; i < namedSources.length ~/ 2; i++) {
 | 
| +    fileSystem
 | 
| +        .entityForUri(Uri.parse(namedSources[i * 2]))
 | 
| +        .writeAsBytesSync(namedSources[i * 2 + 1]);
 | 
| +  }
 | 
| +  return fileSystem;
 | 
| +}
 | 
| +
 | 
|  train(String scriptUri) {
 | 
|    // TODO(28532): Enable on Windows.
 | 
|    if (Platform.isWindows) return;
 | 
| 
 |