Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1476)

Unified Diff: utils/kernel-service/kernel-service.dart

Issue 2684943003: [Kernel] Enable Kernel Isolate to use Fasta instead of DartK. (Closed)
Patch Set: Done Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/testing/dart/test_options.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.
« no previous file with comments | « tools/testing/dart/test_options.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698