Index: pkg/dev_compiler/bin/dartdevc.dart |
diff --git a/pkg/dev_compiler/bin/dartdevc.dart b/pkg/dev_compiler/bin/dartdevc.dart |
index 4a0ccbe410fcfff622ed5501e292d2d7a0246e5c..6a94c34a6065b27824f5482268c33c734f0bc07a 100755 |
--- a/pkg/dev_compiler/bin/dartdevc.dart |
+++ b/pkg/dev_compiler/bin/dartdevc.dart |
@@ -3,40 +3,13 @@ |
// 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. |
-/// Command line entry point for Dart Development Compiler (dartdevc). |
-/// |
-/// Supported commands are |
-/// * compile: builds a collection of dart libraries into a single JS module |
-/// |
-/// Additionally, these commands are being considered |
-/// * link: combines several JS modules into a single JS file |
-/// * build: compiles & links a set of code, automatically determining |
-/// appropriate groupings of libraries to combine into JS modules |
-/// * watch: watch a directory and recompile build units automatically |
-/// * serve: uses `watch` to recompile and exposes a simple static file server |
-/// for local development |
-/// |
-/// These commands are combined so we have less names to expose on the PATH, |
-/// and for development simplicity while the precise UI has not been determined. |
-/// |
-/// A more typical structure for web tools is simply to have the compiler with |
-/// "watch" as an option. The challenge for us is: |
-/// |
-/// * Dart used to assume whole-program compiles, so we don't have a |
-/// user-declared unit of building, and neither "libraries" or "packages" will |
-/// work, |
-/// * We do not assume a `node` JS installation, so we cannot easily reuse |
-/// existing tools for the "link" step, or assume users have a local |
-/// file server, |
-/// * We didn't have a file watcher API at first, |
-/// * We had no conventions about where compiled output should go (or even |
-/// that we would be compiling at all, vs running on an in-browser Dart VM), |
-/// * We wanted a good first impression with our simple examples, so we used |
-/// local file servers, and users have an expectation of it now, even though |
-/// it doesn't scale to typical apps that need their own real servers. |
+/// Command line entry point for Dart Development Compiler (dartdevc), used to |
+/// compile a collection of dart libraries into a single JS module |
import 'dart:async'; |
+import 'dart:convert'; |
import 'dart:io'; |
+import 'dart:isolate'; |
import 'package:analyzer/file_system/physical_file_system.dart'; |
import 'package:analyzer/src/command_line/arguments.dart'; |
import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine; |
@@ -48,7 +21,9 @@ Future main(List<String> args) async { |
args = preprocessArgs(PhysicalResourceProvider.INSTANCE, args); |
if (args.contains('--persistent_worker')) { |
- new _CompilerWorker(args..remove('--persistent_worker')).run(); |
+ await new _CompilerWorker(args..remove('--persistent_worker')).run(); |
+ } else if (args.isNotEmpty && args.last == "--batch") { |
+ await runBatch(args.sublist(0, args.length - 1)); |
} else { |
exitCode = compile(args); |
} |
@@ -73,3 +48,27 @@ class _CompilerWorker extends AsyncWorkerLoop { |
..output = output.toString(); |
} |
} |
+ |
+runBatch(List<String> batchArgs) async { |
+ int totalTests = 0; |
+ int testsFailed = 0; |
+ var watch = new Stopwatch()..start(); |
+ print('>>> BATCH START'); |
+ String line; |
+ while ((line = stdin.readLineSync(encoding: UTF8)).isNotEmpty) { |
+ totalTests++; |
+ var args = batchArgs.toList()..addAll(line.split(new RegExp(r'\s+'))); |
+ |
+ // We don't try/catch here, since `compile` should handle that. |
+ var compileExitCode = compile(args); |
+ AnalysisEngine.instance.clearCaches(); |
+ stderr.writeln('>>> EOF STDERR'); |
+ var outcome = compileExitCode == 0 |
+ ? 'PASS' |
+ : compileExitCode == 70 ? 'CRASH' : 'FAIL'; |
+ print('>>> TEST $outcome ${watch.elapsedMilliseconds}ms'); |
+ } |
+ int time = watch.elapsedMilliseconds; |
+ print('>>> BATCH END ' |
+ '(${totalTests - testsFailed})/$totalTests ${time}ms'); |
+} |