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

Unified Diff: pkg/front_end/lib/src/fasta/compiler_command_line.dart

Issue 2982093003: Unifying compiler context (Closed)
Patch Set: revert change to kernel-service.dart Created 3 years, 5 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
Index: pkg/front_end/lib/src/fasta/compiler_command_line.dart
diff --git a/pkg/front_end/lib/src/fasta/compiler_command_line.dart b/pkg/front_end/lib/src/fasta/compiler_command_line.dart
index 36709b7b672bfbfecc6c42d659bb57be04f699b0..0a682cdca6bcbb83cb66c767a28661438fc5fdde 100644
--- a/pkg/front_end/lib/src/fasta/compiler_command_line.dart
+++ b/pkg/front_end/lib/src/fasta/compiler_command_line.dart
@@ -6,27 +6,22 @@ library fasta.compiler_command_line;
import 'dart:io' show exit;
-import 'dart:async' show runZoned;
-
import 'package:kernel/target/targets.dart'
show Target, getTarget, TargetFlags, targets;
+import '../../compiler_options.dart';
+import '../base/processed_options.dart';
import 'command_line.dart' show CommandLine, deprecated_argumentError;
-import 'compiler_context.dart' show CompilerContext, compilerContextKey;
-
-import 'command_line_reporting.dart' as command_line_reporting;
+import 'compiler_context.dart' show CompilerContext;
import 'fasta_codes.dart'
show
- LocatedMessage,
Message,
messageFastaUsageLong,
messageFastaUsageShort,
templateUnspecified;
-import 'severity.dart' show Severity;
-
const Map<String, dynamic> optionSpecification = const <String, dynamic>{
"--compile-sdk": Uri,
"--fatal": ",",
@@ -39,6 +34,8 @@ const Map<String, dynamic> optionSpecification = const <String, dynamic>{
"-t": String,
};
+/// Parser for options accepted by the `fasta` command-line tools.
+// TODO(ahe,sigmund): move this and other tools under pkg/front_end/tool/
class CompilerCommandLine extends CommandLine {
final String programName;
@@ -61,13 +58,9 @@ class CompilerCommandLine extends CommandLine {
options.containsKey("/?");
}
- bool get setExitCodeOnProblem {
- return options.containsKey("--set-exit-code-on-problem");
- }
-
void validate() {
if (help) {
- print(computeUsage(programName, verbose));
+ print(computeUsage(programName, verbose).message);
exit(0);
}
@@ -84,8 +77,16 @@ class CompilerCommandLine extends CommandLine {
return deprecated_argumentError(
usage, "Can't specify both '--compile-sdk' and '--platform'.");
}
- if (programName == "compile_platform" && arguments.length != 3) {
- return deprecated_argumentError(usage, "Expected three arguments.");
+ if (programName == "compile_platform") {
+ if (arguments.length != 3) {
+ return deprecated_argumentError(usage, "Expected three arguments.");
+ }
+ if (options.containsKey("--compile-sdk")) {
+ return deprecated_argumentError(usage,
+ "Cannot specify '--compile-sdk' option to compile_platform.");
+ }
+ options['--compile-sdk'] =
+ Uri.base.resolveUri(new Uri.file(arguments[0]));
} else if (arguments.isEmpty) {
return deprecated_argumentError(usage, "No Dart file specified.");
}
@@ -113,7 +114,7 @@ class CompilerCommandLine extends CommandLine {
: options["--platform"] ?? Uri.base.resolve("platform.dill");
}
- Uri get packages => options["--packages"] ?? Uri.base.resolve(".packages");
+ Uri get packages => options["--packages"];
Uri get sdk => options["--sdk"] ?? options["--compile-sdk"];
@@ -135,43 +136,41 @@ class CompilerCommandLine extends CommandLine {
Target get target => options["target"];
- void Function(LocatedMessage, Severity) get report {
- return options["report"] ?? command_line_reporting.report;
- }
-
- void Function(Message, Severity) get reportWithoutLocation {
- return options["reportWithoutLocation"] ??
- command_line_reporting.reportWithoutLocation;
- }
-
- String Function(LocatedMessage, Severity) get format {
- return options["format"] ?? command_line_reporting.format;
- }
-
- String Function(Message, Severity) get formatWithoutLocation {
- return options["formatWithoutLocation"] ??
- command_line_reporting.formatWithoutLocation;
- }
-
- static dynamic withGlobalOptions(String programName, List<String> arguments,
- dynamic f(CompilerContext context)) {
- CompilerCommandLine cl = deprecated_withDefaultOptions(
- () => new CompilerCommandLine(programName, arguments));
- return CompilerContext.withGlobalOptions(cl, f);
- }
-
- // TODO(sigmund, ahe): delete. We use this to wrap places where we require a
- // context but we shoudln't. Right now this includes:
- // - constructor calls to CompilerCommandLine (because it is calling
- // [validate] which may report errors). This should be fixed by doing
- // validation after creating these objects.
- // - top-level try-catch in command-line tools that capture
- // deprecated_InputError, and then report errors using fasta's error
- // reporting mechanism. Those should be unnecessary once we get rid of all
- // deprecated_InputErrors.
- static dynamic deprecated_withDefaultOptions(dynamic f()) {
- var defaultContext = new CompilerContext(new CompilerCommandLine("", [""]));
- return runZoned(f, zoneValues: {compilerContextKey: defaultContext});
+ static dynamic withGlobalOptions(
+ String programName,
+ List<String> arguments,
+ bool areRestArgumentsInputs,
+ dynamic f(CompilerContext context, List<String> restArguments)) {
+ // TODO(sigmund,ahe): delete this wrapper by moving validation into the
+ // callback. Note that this requires some subtle changes because validate
+ // sets some implicit options (like --compile-sdk in compile_platform).
+ var cl = CompilerContext.runWithDefaultOptions(
+ (_) => new CompilerCommandLine(programName, arguments));
+ var options = new CompilerOptions()
+ ..compileSdk = cl.options.containsKey("--compile-sdk")
+ ..sdkRoot = cl.sdk
+ ..sdkSummary = cl.platform
+ ..packagesFileUri = cl.packages
+ ..strongMode = cl.strongMode
+ ..target = cl.target
+ ..throwOnErrors = cl.errorsAreFatal
+ ..throwOnWarnings = cl.warningsAreFatal
+ ..throwOnNits = cl.nitsAreFatal
+ ..embedSourceText = !cl.excludeSource
+ // All command-line tools take only a single entry point and chase
+ // dependencies, and provide a non-zero exit code when errors are found.
+ ..chaseDependencies = true
+ ..setExitCodeOnProblem = true
ahe 2017/08/17 13:18:21 Why is this set to true?
+ ..debugDump = cl.dumpIr
+ ..verbose = cl.verbose
+ ..verify = cl.verify;
+
+ var inputs = <Uri>[];
+ if (areRestArgumentsInputs) {
+ inputs = cl.arguments.map(Uri.base.resolve).toList();
+ }
+ var pOptions = new ProcessedOptions(options, false, inputs, cl.output);
+ return CompilerContext.runWithOptions(pOptions, (c) => f(c, cl.arguments));
}
}
« no previous file with comments | « pkg/front_end/lib/src/fasta/compile_platform.dart ('k') | pkg/front_end/lib/src/fasta/compiler_context.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698