Index: pkg/front_end/lib/src/fasta/outline.dart |
diff --git a/pkg/front_end/lib/src/fasta/outline.dart b/pkg/front_end/lib/src/fasta/outline.dart |
deleted file mode 100644 |
index 7c0dea41547cf1bcb0c60054ee651df68d588c4a..0000000000000000000000000000000000000000 |
--- a/pkg/front_end/lib/src/fasta/outline.dart |
+++ /dev/null |
@@ -1,220 +0,0 @@ |
-// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-library fasta.outline; |
- |
-import 'dart:async' show Future; |
- |
-import 'dart:convert' show JSON; |
- |
-import 'dart:io' show BytesBuilder, FileSystemEntity, exitCode; |
- |
-import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter; |
- |
-import 'package:kernel/kernel.dart' show Program; |
- |
-import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget; |
- |
-import 'kernel/verifier.dart' show verifyProgram; |
- |
-import 'compiler_command_line.dart' show CompilerCommandLine; |
- |
-import 'compiler_context.dart' show CompilerContext; |
- |
-import 'errors.dart' show InputError, inputError; |
- |
-import 'kernel/kernel_target.dart' show KernelTarget; |
- |
-import 'dill/dill_target.dart' show DillTarget; |
- |
-import 'ticker.dart' show Ticker; |
- |
-import 'translate_uri.dart' show TranslateUri; |
- |
-import 'vm.dart' show CompilationResult; |
- |
-const bool summary = const bool.fromEnvironment("summary", defaultValue: false); |
-const int iterations = const int.fromEnvironment("iterations", defaultValue: 1); |
- |
-compileEntryPoint(List<String> arguments) async { |
- // Timing results for each iteration |
- List<double> elapsedTimes = <double>[]; |
- |
- for (int i = 0; i < iterations; i++) { |
- if (i > 0) { |
- print("\n\n=== Iteration ${i+1} of $iterations"); |
- } |
- var stopwatch = new Stopwatch()..start(); |
- await compile(arguments); |
- stopwatch.stop(); |
- |
- elapsedTimes.add(stopwatch.elapsedMilliseconds.toDouble()); |
- } |
- |
- if (summary) { |
- var json = JSON.encode(<String, dynamic>{'elapsedTimes': elapsedTimes}); |
- print('\nSummary: $json'); |
- } |
-} |
- |
-outlineEntryPoint(List<String> arguments) async { |
- for (int i = 0; i < iterations; i++) { |
- if (i > 0) { |
- print("\n"); |
- } |
- await outline(arguments); |
- } |
-} |
- |
-Future<KernelTarget> outline(List<String> arguments) async { |
- try { |
- return await CompilerCommandLine.withGlobalOptions("outline", arguments, |
- (CompilerContext c) async { |
- if (c.options.verbose) { |
- print("Building outlines for ${arguments.join(' ')}"); |
- } |
- CompileTask task = |
- new CompileTask(c, new Ticker(isVerbose: c.options.verbose)); |
- return await task.buildOutline(c.options.output); |
- }); |
- } on InputError catch (e) { |
- exitCode = 1; |
- print(e.format()); |
- return null; |
- } |
-} |
- |
-Future<Uri> compile(List<String> arguments) async { |
- try { |
- return await CompilerCommandLine.withGlobalOptions("compile", arguments, |
- (CompilerContext c) async { |
- if (c.options.verbose) { |
- print("Compiling directly to Kernel: ${arguments.join(' ')}"); |
- } |
- CompileTask task = |
- new CompileTask(c, new Ticker(isVerbose: c.options.verbose)); |
- return await task.compile(); |
- }); |
- } on InputError catch (e) { |
- exitCode = 1; |
- print(e.format()); |
- return null; |
- } |
-} |
- |
-class CompileTask { |
- final CompilerContext c; |
- final Ticker ticker; |
- |
- CompileTask(this.c, this.ticker); |
- |
- KernelTarget createKernelTarget( |
- DillTarget dillTarget, TranslateUri uriTranslator) { |
- return new KernelTarget(dillTarget, uriTranslator, c.uriToSource); |
- } |
- |
- Future<KernelTarget> buildOutline([Uri output]) async { |
- TranslateUri uriTranslator = |
- await TranslateUri.parse(c.options.sdk, c.options.packages); |
- ticker.logMs("Read packages file"); |
- DillTarget dillTarget = new DillTarget(ticker, uriTranslator); |
- KernelTarget kernelTarget = createKernelTarget(dillTarget, uriTranslator); |
- Uri platform = c.options.platform; |
- if (platform != null) { |
- dillTarget.read(platform); |
- } |
- String argument = c.options.arguments.first; |
- Uri uri = Uri.base.resolve(argument); |
- String path = uriTranslator.translate(uri)?.path ?? argument; |
- if (path.endsWith(".dart")) { |
- kernelTarget.read(uri); |
- } else { |
- inputError(uri, -1, "Unexpected input: $uri"); |
- } |
- await dillTarget.writeOutline(null); |
- await kernelTarget.writeOutline(output); |
- if (c.options.dumpIr && output != null) { |
- kernelTarget.dumpIr(); |
- } |
- return kernelTarget; |
- } |
- |
- Future<Uri> compile() async { |
- KernelTarget kernelTarget = await buildOutline(); |
- if (exitCode != 0) return null; |
- Uri uri = c.options.output; |
- await kernelTarget.writeProgram(uri); |
- if (c.options.dumpIr) { |
- kernelTarget.dumpIr(); |
- } |
- if (c.options.verify) { |
- try { |
- verifyProgram(kernelTarget.program); |
- ticker.logMs("Verified program"); |
- } catch (e, s) { |
- exitCode = 1; |
- print("Verification of program failed: $e"); |
- if (s != null && c.options.verbose) { |
- print(s); |
- } |
- } |
- } |
- return uri; |
- } |
-} |
- |
-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.error(kernelTarget.errors |
- .map((err) => err.toString()) |
- .toList(growable: false)); |
- } |
- } on InputError catch (e) { |
- return new CompilationResult.error(<String>[e.format()]); |
- } |
- |
- // 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()); |
-} |
- |
-// TODO(ahe): https://github.com/dart-lang/sdk/issues/28316 |
-class ByteSink implements Sink<List<int>> { |
- final BytesBuilder builder = new BytesBuilder(); |
- |
- void add(List<int> data) { |
- builder.add(data); |
- } |
- |
- void close() { |
- // Nothing to do. |
- } |
-} |