Add getTarget method to CompilerCommandLine

The method is used to create an instance of a backend target class.
CompilerCommandLine already has the necessary information for this ("target"
name string and "strongMode" flag).  Additionally, a backed target instance is
now not created in fasta.dart/parseScriptInFileSystem, but should be passed at
the call site.

R=ahe@google.com, scheglov@google.com

Review-Url: https://codereview.chromium.org/2932513003 .
This commit is contained in:
Dmitry Stefantsov 2017-06-09 11:04:43 +02:00
parent 90363faa38
commit aa8ca9244a
4 changed files with 40 additions and 30 deletions

View file

@ -24,8 +24,6 @@ import 'ticker.dart' show Ticker;
import 'translate_uri.dart' show TranslateUri;
import 'package:kernel/target/targets.dart' show getTarget, TargetFlags;
const int iterations = const int.fromEnvironment("iterations", defaultValue: 1);
Future mainEntryPoint(List<String> arguments) async {
@ -73,11 +71,8 @@ Future compilePlatformInternal(CompilerContext c, Ticker ticker, Uri patchedSdk,
.parse(c.fileSystem, patchedSdk, packages: c.options.packages);
ticker.logMs("Read packages file");
DillTarget dillTarget = new DillTarget(
ticker,
uriTranslator,
getTarget(
c.options.target, new TargetFlags(strongMode: c.options.strongMode)));
DillTarget dillTarget =
new DillTarget(ticker, uriTranslator, c.options.target);
KernelTarget kernelTarget =
new KernelTarget(c.fileSystem, dillTarget, uriTranslator, c.uriToSource);

View file

@ -10,6 +10,9 @@ import 'command_line.dart' show CommandLine, argumentError;
import 'compiler_context.dart' show CompilerContext;
import 'package:kernel/target/targets.dart'
show Target, getTarget, TargetFlags, targets;
const Map<String, dynamic> optionSpecification = const <String, dynamic>{
"--compile-sdk": Uri,
"--fatal": ",",
@ -60,6 +63,16 @@ class CompilerCommandLine extends CommandLine {
} else if (arguments.isEmpty) {
return argumentError(usage, "No Dart file specified.");
}
Target target =
getTarget(targetName, new TargetFlags(strongMode: strongMode));
if (target == null) {
return argumentError(
usage,
"Target '${targetName}' not recognized. "
"Valid targets are:\n ${targets.keys.join("\n ")}");
}
options["target"] = target;
}
Uri get output {
@ -90,10 +103,12 @@ class CompilerCommandLine extends CommandLine {
bool get strongMode => options.containsKey("--strong-mode");
String get target {
String get targetName {
return options["-t"] ?? options["--target"] ?? "vm_fasta";
}
Target get target => options["target"];
static dynamic withGlobalOptions(String programName, List<String> arguments,
dynamic f(CompilerContext context)) {
return CompilerContext.withGlobalOptions(

View file

@ -18,7 +18,7 @@ import 'package:kernel/binary/ast_to_binary.dart'
import 'package:kernel/kernel.dart' show Library, Program, loadProgramFromBytes;
import 'package:kernel/target/targets.dart' show getTarget, TargetFlags;
import 'package:kernel/target/targets.dart' show Target;
import 'compiler_command_line.dart' show CompilerCommandLine;
@ -114,11 +114,7 @@ class CompileTask {
CompileTask(this.c, this.ticker);
DillTarget createDillTarget(TranslateUri uriTranslator) {
return new DillTarget(
ticker,
uriTranslator,
getTarget(c.options.target,
new TargetFlags(strongMode: c.options.strongMode)));
return new DillTarget(ticker, uriTranslator, c.options.target);
}
KernelTarget createKernelTarget(
@ -176,17 +172,16 @@ class CompileTask {
}
Future<CompilationResult> parseScript(
Uri fileName, Uri packages, Uri patchedSdk,
{bool verbose: false, bool strongMode: false}) async {
return parseScriptInFileSystem(
fileName, PhysicalFileSystem.instance, packages, patchedSdk,
verbose: verbose, strongMode: strongMode);
Uri fileName, Uri packages, Uri patchedSdk, Target backendTarget,
{bool verbose: false}) async {
return parseScriptInFileSystem(fileName, PhysicalFileSystem.instance,
packages, patchedSdk, backendTarget,
verbose: verbose);
}
Future<CompilationResult> parseScriptInFileSystem(
Uri fileName, FileSystem fileSystem, Uri packages, Uri patchedSdk,
{bool verbose: false, bool strongMode: false, String backendTarget}) async {
backendTarget ??= "vm_fasta";
Future<CompilationResult> parseScriptInFileSystem(Uri fileName,
FileSystem fileSystem, Uri packages, Uri patchedSdk, Target backendTarget,
{bool verbose: false}) async {
try {
if (!await fileSystem.entityForUri(fileName).exists()) {
return new CompilationResult.error(
@ -202,8 +197,8 @@ Future<CompilationResult> parseScriptInFileSystem(
TranslateUri uriTranslator =
await TranslateUri.parse(fileSystem, patchedSdk, packages: packages);
final Ticker ticker = new Ticker(isVerbose: verbose);
final DillTarget dillTarget = new DillTarget(ticker, uriTranslator,
getTarget(backendTarget, new TargetFlags(strongMode: strongMode)));
final DillTarget dillTarget =
new DillTarget(ticker, uriTranslator, backendTarget);
_appendDillForUri(dillTarget, patchedSdk.resolve('platform.dill'));
final KernelTarget kernelTarget =
new KernelTarget(fileSystem, dillTarget, uriTranslator);
@ -268,6 +263,8 @@ Future writeDepsFile(Uri script, Uri depsFile, Uri output,
Ticker ticker = new Ticker(isVerbose: verbose);
await CompilerCommandLine.withGlobalOptions("", [""],
(CompilerContext c) async {
c.options.options["--target"] = backendTarget;
c.options.options["--strong-mode"] = false;
c.options.options["--packages"] = packages;
if (verbose) {
c.options.options["--verbose"] = true;
@ -277,8 +274,8 @@ Future writeDepsFile(Uri script, Uri depsFile, Uri output,
TranslateUri uriTranslator = await TranslateUri.parse(c.fileSystem, sdk,
packages: c.options.packages);
ticker.logMs("Read packages file");
DillTarget dillTarget = new DillTarget(ticker, uriTranslator,
getTarget(backendTarget, new TargetFlags(strongMode: false)));
DillTarget dillTarget =
new DillTarget(ticker, uriTranslator, c.options.target);
_appendDillForUri(dillTarget, platform);
KernelTarget kernelTarget = new KernelTarget(
PhysicalFileSystem.instance, dillTarget, uriTranslator, c.uriToSource);

View file

@ -18,6 +18,9 @@ import 'package:front_end/physical_file_system.dart';
import 'fasta.dart' as fasta;
import 'package:kernel/target/targets.dart' show TargetFlags;
import 'package:kernel/target/vm_fasta.dart' show VmFastaTarget;
/// Compilation status codes.
///
/// Note: The [index] property of these constants must match
@ -84,9 +87,9 @@ Future<CompilationResult> parseScriptInFileSystem(
}
try {
return await fasta.parseScriptInFileSystem(
script, fileSystem, packagesUri, patchedSdk,
verbose: verbose, strongMode: strongMode);
return await fasta.parseScriptInFileSystem(script, fileSystem, packagesUri,
patchedSdk, new VmFastaTarget(new TargetFlags(strongMode: strongMode)),
verbose: verbose);
} catch (err, stack) {
return new CompilationResult.crash(err, stack);
}