Chromium Code Reviews| Index: utils/kernel-service/kernel-service.dart |
| diff --git a/utils/kernel-service/kernel-service.dart b/utils/kernel-service/kernel-service.dart |
| index f0d1c4d7b5c184fc9d4d8802de3e152d363d33b6..ebd8c199fdb8d6cb00c8f00a17f54c9f13f49243 100644 |
| --- a/utils/kernel-service/kernel-service.dart |
| +++ b/utils/kernel-service/kernel-service.dart |
| @@ -27,6 +27,15 @@ library runtime.tools.kernel_service; |
| // is set to non-zero value then Kernel isolate will forward all compilation |
| // requests it receives to the batch worker on the given port. |
| // |
| +// Set DFE_USE_FASTA environment declaration to true to use fasta front-end |
| +// instead of dartk. Note: we expect patched_sdk folder to contain |
| +// platform.dill file that contains patched SDK in the Kernel binary form. |
| +// This file can be created using the following command line: |
| +// |
| +// export DART_AOT_SDK=<path-to-patched_sdk> |
| +// dart pkg/front_end/lib/src/fasta/bin/compile_platform.dart \ |
| +// ${DART_AOT_SDK}/platform.dill |
| +// |
|
ahe
2017/02/08 14:13:08
Nit: this comment should probably be documentation
Vyacheslav Egorov (Google)
2017/02/08 15:46:19
Done.
|
| import 'dart:async'; |
| import 'dart:convert'; |
| @@ -39,8 +48,16 @@ import 'package:kernel/binary/ast_to_binary.dart'; |
| import 'package:kernel/kernel.dart'; |
| import 'package:kernel/target/targets.dart'; |
| +import 'package:front_end/src/fasta/dill/dill_target.dart' show DillTarget; |
| +import 'package:front_end/src/fasta/translate_uri.dart' show TranslateUri; |
| +import 'package:front_end/src/fasta/ticker.dart' show Ticker; |
| +import 'package:front_end/src/fasta/kernel/kernel_target.dart' show KernelSourceTarget; |
|
ahe
2017/02/08 14:13:08
Long line.
Vyacheslav Egorov (Google)
2017/02/08 15:46:18
Done.
|
| +import 'package:front_end/src/fasta/ast_kind.dart' show AstKind; |
| +import 'package:front_end/src/fasta/errors.dart' show InputError; |
| + |
| const bool verbose = const bool.fromEnvironment('DFE_VERBOSE') ?? false; |
| const int workerPort = const int.fromEnvironment('DFE_WORKER_PORT') ?? 0; |
| +const bool useFasta = const bool.fromEnvironment('DFE_USE_FASTA') ?? false; |
|
ahe
2017/02/08 14:13:08
Don't need ?? here as "false" is the default.
Vyacheslav Egorov (Google)
2017/02/08 15:46:18
Done.
|
| class DataSink implements Sink<List<int>> { |
| final BytesBuilder builder = new BytesBuilder(); |
| @@ -84,6 +101,8 @@ abstract class CompilationFail extends CompilationResult { |
| return new CompilationError(m['errors']); |
| case STATUS_CRASH: |
| return new CompilationCrash(m['exception'], m['stack']); |
| + default: |
| + throw "can't deserialize CompilationFail from ${m}"; |
|
ahe
2017/02/08 14:13:08
Start with uppercase and end with a period.
Vyacheslav Egorov (Google)
2017/02/08 15:46:18
Done.
|
| } |
| } |
| } |
| @@ -124,6 +143,7 @@ class CompilationCrash extends CompilationFail { |
| String toString() => "CompilationCrash(${errorString})"; |
| } |
| + |
|
ahe
2017/02/08 14:13:08
Extra line.
kustermann
2017/02/08 15:10:40
no 2 line requirement here :)
Vyacheslav Egorov (Google)
2017/02/08 15:46:18
Done.
|
| Future<CompilationResult> parseScriptImpl(DartLoaderBatch batch_loader, |
| Uri fileName, String packageConfig, String sdkPath) async { |
| if (!FileSystemEntity.isFileSync(fileName.path)) { |
| @@ -135,20 +155,43 @@ Future<CompilationResult> parseScriptImpl(DartLoaderBatch batch_loader, |
| } |
| Target target = getTarget("vm", new TargetFlags(strongMode: false)); |
| - DartOptions dartOptions = new DartOptions( |
| - strongMode: false, |
| - strongModeSdk: false, |
| - sdk: sdkPath, |
| - packagePath: packageConfig, |
| - customUriMappings: const {}, |
| - declaredVariables: const {}); |
| - DartLoader loader = |
| - await batch_loader.getLoader(new Repository(), dartOptions); |
| - var program = loader.loadProgram(fileName, target: target); |
| - |
| - var errors = loader.errors; |
| - if (errors.isNotEmpty) { |
| - return new CompilationError(loader.errors.toList()); |
| + |
| + Program program; |
| + if (useFasta) { |
| + final uriTranslator = await TranslateUri.parse(new Uri.file(packageConfig)); |
| + Ticker ticker = new Ticker(isVerbose: false); |
|
kustermann
2017/02/08 15:10:41
final
Not sure what [Ticker] is but you could pas
Vyacheslav Egorov (Google)
2017/02/08 15:46:18
This is for Fasta own diagnostic messages. Great i
|
| + DillTarget dillTarget = new DillTarget(ticker, uriTranslator); |
|
kustermann
2017/02/08 15:10:40
final
Vyacheslav Egorov (Google)
2017/02/08 15:46:18
Done.
|
| + dillTarget.read(new Uri.directory(sdkPath).resolve('platform.dill')); |
| + KernelSourceTarget sourceTarget = |
| + new KernelSourceTarget(dillTarget, uriTranslator); |
|
ahe
2017/02/08 14:13:08
Indentation.
Vyacheslav Egorov (Google)
2017/02/08 15:46:18
Done.
|
| + try { |
| + sourceTarget.read(fileName); |
| + await dillTarget.writeOutline(null); |
| + program = await sourceTarget.writeOutline(null); |
| + program = await sourceTarget.writeProgram(null, AstKind.Kernel); |
| + if (sourceTarget.errors.isNotEmpty) { |
| + return new CompilationError(sourceTarget.errors |
| + .map((err) => err.toString()).toList(growable: false)); |
| + } |
| + } on InputError catch (e) { |
| + return new CompilationError(<String>[e.error]); |
| + } |
|
ahe
2017/02/08 14:13:08
We need a better API for this. I think Paul and Si
Vyacheslav Egorov (Google)
2017/02/08 15:46:18
Yeah, they are working on this. But in the mean wh
|
| + } else { |
| + DartOptions dartOptions = new DartOptions( |
| + strongMode: false, |
| + strongModeSdk: false, |
| + sdk: sdkPath, |
| + packagePath: packageConfig, |
| + customUriMappings: const {}, |
| + declaredVariables: const {}); |
| + DartLoader loader = |
| + await batch_loader.getLoader(new Repository(), dartOptions); |
|
kustermann
2017/02/08 15:10:41
maybe run dartfmt on this file?
Vyacheslav Egorov (Google)
2017/02/08 15:46:18
Done.
|
| + program = loader.loadProgram(fileName, target: target); |
| + |
| + var errors = loader.errors; |
|
kustermann
2017/02/08 15:10:41
final
Vyacheslav Egorov (Google)
2017/02/08 15:46:18
Done.
|
| + if (errors.isNotEmpty) { |
| + return new CompilationError(loader.errors.toList()); |
| + } |
| } |
| // Perform target-specific transformations. |