| Index: pkg/front_end/lib/src/fasta/fasta.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/fasta.dart b/pkg/front_end/lib/src/fasta/fasta.dart
|
| index 97d155c45ef47fe48737c21df3cb5c3ad3d86dbd..424cfcc58cca473debf697d6f30133dd23b3f72a 100644
|
| --- a/pkg/front_end/lib/src/fasta/fasta.dart
|
| +++ b/pkg/front_end/lib/src/fasta/fasta.dart
|
| @@ -8,7 +8,7 @@ import 'dart:async' show Future;
|
|
|
| import 'dart:convert' show JSON;
|
|
|
| -import 'dart:io' show BytesBuilder, FileSystemEntity, exitCode;
|
| +import 'dart:io' show BytesBuilder, Directory, File, exitCode;
|
|
|
| import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter;
|
|
|
| @@ -22,7 +22,7 @@ import 'compiler_command_line.dart' show CompilerCommandLine;
|
|
|
| import 'compiler_context.dart' show CompilerContext;
|
|
|
| -import 'errors.dart' show InputError, inputError;
|
| +import 'errors.dart' show InputError, formatUnexpected, inputError, reportCrash;
|
|
|
| import 'kernel/kernel_target.dart' show KernelTarget;
|
|
|
| @@ -166,44 +166,50 @@ class CompileTask {
|
|
|
| Future<CompilationResult> parseScript(
|
| Uri fileName, Uri packages, Uri patchedSdk, bool verbose) async {
|
| - if (!FileSystemEntity.isFileSync(fileName.toFilePath())) {
|
| - throw "Input file '${fileName.toFilePath()}' does not exist.";
|
| - }
|
| -
|
| - if (!FileSystemEntity.isDirectorySync(patchedSdk.toFilePath())) {
|
| - throw "Patched sdk directory not found at ${patchedSdk.toFilePath()}";
|
| - }
|
| -
|
| - Target target = getTarget("vm", new TargetFlags(strongMode: false));
|
| -
|
| - Program program;
|
| - final uriTranslator = await TranslateUri.parse(null, packages);
|
| - final Ticker ticker = new Ticker(isVerbose: verbose);
|
| - final DillTarget dillTarget = new DillTarget(ticker, uriTranslator);
|
| - dillTarget.read(patchedSdk.resolve('platform.dill'));
|
| - final KernelTarget kernelTarget = new KernelTarget(dillTarget, uriTranslator);
|
| try {
|
| - kernelTarget.read(fileName);
|
| - await dillTarget.writeOutline(null);
|
| - program = await kernelTarget.writeOutline(null);
|
| - program = await kernelTarget.writeProgram(null);
|
| - if (kernelTarget.errors.isNotEmpty) {
|
| - return new CompilationResult.errors(kernelTarget.errors
|
| - .map((err) => err.toString())
|
| - .toList(growable: false));
|
| + if (!await new File.fromUri(fileName).exists()) {
|
| + return new CompilationResult.error(
|
| + formatUnexpected(fileName, -1, "No such file."));
|
| + }
|
| + if (!await new Directory.fromUri(patchedSdk).exists()) {
|
| + return new CompilationResult.error(
|
| + formatUnexpected(patchedSdk, -1, "Patched sdk directory not found."));
|
| + }
|
| +
|
| + Target target = getTarget("vm", new TargetFlags(strongMode: false));
|
| +
|
| + Program program;
|
| + final uriTranslator = await TranslateUri.parse(null, packages);
|
| + final Ticker ticker = new Ticker(isVerbose: verbose);
|
| + final DillTarget dillTarget = new DillTarget(ticker, uriTranslator);
|
| + dillTarget.read(patchedSdk.resolve('platform.dill'));
|
| + final KernelTarget kernelTarget =
|
| + new KernelTarget(dillTarget, uriTranslator);
|
| + try {
|
| + kernelTarget.read(fileName);
|
| + await dillTarget.writeOutline(null);
|
| + program = await kernelTarget.writeOutline(null);
|
| + program = await kernelTarget.writeProgram(null);
|
| + if (kernelTarget.errors.isNotEmpty) {
|
| + return new CompilationResult.errors(kernelTarget.errors
|
| + .map((err) => err.toString())
|
| + .toList(growable: false));
|
| + }
|
| + } on InputError catch (e) {
|
| + return new CompilationResult.error(e.format());
|
| }
|
| - } on InputError catch (e) {
|
| - return new CompilationResult.error(e.format());
|
| - }
|
|
|
| - // Perform target-specific transformations.
|
| - target.performModularTransformations(program);
|
| - target.performGlobalTransformations(program);
|
| + // Perform target-specific transformations.
|
| + target.performModularTransformations(program);
|
| + target.performGlobalTransformations(program);
|
|
|
| - // Write the program to a list of bytes and return it.
|
| - var sink = new ByteSink();
|
| - new BinaryPrinter(sink).writeProgramFile(program);
|
| - return new CompilationResult.ok(sink.builder.takeBytes());
|
| + // Write the program to a list of bytes and return it.
|
| + var sink = new ByteSink();
|
| + new BinaryPrinter(sink).writeProgramFile(program);
|
| + return new CompilationResult.ok(sink.builder.takeBytes());
|
| + } catch (e, s) {
|
| + return reportCrash(e, s, fileName);
|
| + }
|
| }
|
|
|
| // TODO(ahe): https://github.com/dart-lang/sdk/issues/28316
|
|
|