| Index: utils/kernel-service/kernel-service.dart
|
| diff --git a/utils/kernel-service/kernel-service.dart b/utils/kernel-service/kernel-service.dart
|
| index 129fc7650633eeee03a801e8e45a65d36371b2c4..957613bee19664e17fb17e0e295639227e5dc70a 100644
|
| --- a/utils/kernel-service/kernel-service.dart
|
| +++ b/utils/kernel-service/kernel-service.dart
|
| @@ -20,91 +20,21 @@
|
| ///
|
| library runtime.tools.kernel_service;
|
|
|
| -import 'dart:async' show Future;
|
| -import 'dart:io' show File, Platform hide FileSystemEntity;
|
| +import 'dart:async';
|
| +import 'dart:io' hide FileSystemEntity;
|
| import 'dart:isolate';
|
| -import 'dart:typed_data' show Uint8List;
|
|
|
| import 'package:front_end/file_system.dart';
|
| -import 'package:front_end/front_end.dart';
|
| import 'package:front_end/memory_file_system.dart';
|
| import 'package:front_end/physical_file_system.dart';
|
| -import 'package:front_end/src/fasta/kernel/utils.dart';
|
| +import 'package:front_end/src/fasta/vm.dart'
|
| + show CompilationResult, Status, parseScriptInFileSystem;
|
| import 'package:front_end/src/testing/hybrid_file_system.dart';
|
| -import 'package:kernel/kernel.dart' show Program;
|
| -import 'package:kernel/target/targets.dart' show TargetFlags;
|
| -import 'package:kernel/target/vm_fasta.dart' show VmFastaTarget;
|
|
|
| const bool verbose = const bool.fromEnvironment('DFE_VERBOSE');
|
|
|
| const bool strongMode = const bool.fromEnvironment('DFE_STRONG_MODE');
|
|
|
| -Future<CompilationResult> _parseScriptInFileSystem(
|
| - Uri script, FileSystem fileSystem,
|
| - {bool verbose: false, bool strongMode: false}) async {
|
| - final Uri packagesUri = (Platform.packageConfig != null)
|
| - ? Uri.parse(Platform.packageConfig)
|
| - : await _findPackagesFile(fileSystem, script);
|
| - if (packagesUri == null) {
|
| - throw "Could not find .packages";
|
| - }
|
| -
|
| - final Uri patchedSdk = Uri.base
|
| - .resolveUri(new Uri.file(Platform.resolvedExecutable))
|
| - .resolveUri(new Uri.directory("patched_sdk"));
|
| -
|
| - if (verbose) {
|
| - print("""DFE: Requesting compilation {
|
| - scriptUri: ${script}
|
| - packagesUri: ${packagesUri}
|
| - patchedSdk: ${patchedSdk}
|
| -}""");
|
| - }
|
| -
|
| - try {
|
| - var errors = <String>[];
|
| - var options = new CompilerOptions()
|
| - ..strongMode = strongMode
|
| - ..fileSystem = fileSystem
|
| - ..target = new VmFastaTarget(new TargetFlags(strongMode: strongMode))
|
| - ..packagesFileUri = packagesUri
|
| - // TODO(sigmund): use outline.dill when the mixin transformer is modular.
|
| - ..sdkSummary = patchedSdk.resolve('platform.dill')
|
| - ..verbose = verbose
|
| - ..onError = (CompilationError e) => errors.add(e.message);
|
| -
|
| - Program program = await kernelForProgram(script, options);
|
| - if (errors.isNotEmpty) return new CompilationResult.errors(errors);
|
| -
|
| - // We serialize the program excluding platform.dill because the VM has these
|
| - // sources built-in. Everything loaded as a summary in [kernelForProgram] is
|
| - // marked `external`, so we can use that bit to decide what to excluce.
|
| - return new CompilationResult.ok(
|
| - serializeProgram(program, filter: (lib) => !lib.isExternal));
|
| - } catch (err, stack) {
|
| - return new CompilationResult.crash(err, stack);
|
| - }
|
| -}
|
| -
|
| -/// This duplicates functionality from the Loader which we can't easily
|
| -/// access from here.
|
| -// TODO(sigmund): delete, this should be supported by the default options in
|
| -// package:front_end.
|
| -Future<Uri> _findPackagesFile(FileSystem fileSystem, Uri base) async {
|
| - var dir = new File.fromUri(base).parent;
|
| - while (true) {
|
| - final packagesFile = dir.uri.resolve(".packages");
|
| - if (await fileSystem.entityForUri(packagesFile).exists()) {
|
| - return packagesFile;
|
| - }
|
| - if (dir.parent.path == dir.path) {
|
| - break;
|
| - }
|
| - dir = dir.parent;
|
| - }
|
| - return null;
|
| -}
|
| -
|
| Future<CompilationResult> _processLoadRequestImpl(
|
| String inputFilePathOrUri, FileSystem fileSystem) {
|
| Uri scriptUri = Uri.parse(inputFilePathOrUri);
|
| @@ -120,10 +50,10 @@ Future<CompilationResult> _processLoadRequestImpl(
|
|
|
| if (!scriptUri.isScheme('file')) {
|
| // TODO(vegorov): Reuse loader code to support other schemes.
|
| - return new Future<CompilationResult>.value(new CompilationResult.errors(
|
| - ["Expected 'file' scheme for a script uri: got ${scriptUri.scheme}"]));
|
| + return new Future<CompilationResult>.value(new CompilationResult.error(
|
| + "Expected 'file' scheme for a script uri: got ${scriptUri.scheme}"));
|
| }
|
| - return _parseScriptInFileSystem(scriptUri, fileSystem,
|
| + return parseScriptInFileSystem(scriptUri, fileSystem,
|
| verbose: verbose, strongMode: strongMode);
|
| }
|
|
|
| @@ -216,88 +146,3 @@ main([args]) {
|
| return new RawReceivePort()..handler = _processLoadRequest;
|
| }
|
| }
|
| -
|
| -/// Compilation status codes.
|
| -///
|
| -/// Note: The [index] property of these constants must match
|
| -/// `Dart_KernelCompilationStatus` in
|
| -/// [dart_api.h](../../../../runtime/include/dart_api.h).
|
| -enum Status {
|
| - /// Compilation was successful.
|
| - ok,
|
| -
|
| - /// Compilation failed with a compile time error.
|
| - error,
|
| -
|
| - /// Compiler crashed.
|
| - crash,
|
| -}
|
| -
|
| -abstract class CompilationResult {
|
| - CompilationResult._();
|
| -
|
| - factory CompilationResult.ok(Uint8List bytes) = _CompilationOk;
|
| -
|
| - factory CompilationResult.errors(List<String> errors) = _CompilationError;
|
| -
|
| - factory CompilationResult.crash(Object exception, StackTrace stack) =
|
| - _CompilationCrash;
|
| -
|
| - Status get status;
|
| -
|
| - get payload;
|
| -
|
| - List toResponse() => [status.index, payload];
|
| -}
|
| -
|
| -class _CompilationOk extends CompilationResult {
|
| - final Uint8List bytes;
|
| -
|
| - _CompilationOk(this.bytes) : super._();
|
| -
|
| - @override
|
| - Status get status => Status.ok;
|
| -
|
| - @override
|
| - get payload => bytes;
|
| -
|
| - String toString() => "_CompilationOk(${bytes.length} bytes)";
|
| -}
|
| -
|
| -abstract class _CompilationFail extends CompilationResult {
|
| - _CompilationFail() : super._();
|
| -
|
| - String get errorString;
|
| -
|
| - @override
|
| - get payload => errorString;
|
| -}
|
| -
|
| -class _CompilationError extends _CompilationFail {
|
| - final List<String> errors;
|
| -
|
| - _CompilationError(this.errors);
|
| -
|
| - @override
|
| - Status get status => Status.error;
|
| -
|
| - @override
|
| - String get errorString => errors.take(10).join('\n');
|
| -
|
| - String toString() => "_CompilationError(${errorString})";
|
| -}
|
| -
|
| -class _CompilationCrash extends _CompilationFail {
|
| - final Object exception;
|
| - final StackTrace stack;
|
| -
|
| - _CompilationCrash(this.exception, this.stack);
|
| -
|
| - @override
|
| - Status get status => Status.crash;
|
| -
|
| - @override
|
| - String get errorString => "${exception}\n${stack}";
|
| -
|
| - String toString() => "_CompilationCrash(${errorString})";
|
| -}
|
|
|