| Index: sdk/lib/_internal/compiler/implementation/dart2js.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/dart2js.dart b/sdk/lib/_internal/compiler/implementation/dart2js.dart
|
| index 7869913ae7b2ade37f4be09a24e6dfb852bf0bef..42a4056e665fa48fbd531fead9c4cdbe955e9dc3 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/dart2js.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/dart2js.dart
|
| @@ -4,7 +4,8 @@
|
|
|
| library dart2js.cmdline;
|
|
|
| -import 'dart:async';
|
| +import 'dart:async'
|
| + show Future, EventSink;
|
| import 'dart:io'
|
| show exit, File, FileMode, Platform, RandomAccessFile;
|
| import 'dart:math' as math;
|
| @@ -418,9 +419,9 @@ Future compile(List<String> argv) {
|
| return new EventSinkWrapper(writeStringSync, onDone);
|
| }
|
|
|
| - return api.compile(uri, libraryRoot, packageRoot,
|
| - inputProvider, diagnosticHandler,
|
| - options, outputProvider, environment)
|
| + return compileFunc(uri, libraryRoot, packageRoot,
|
| + inputProvider, diagnosticHandler,
|
| + options, outputProvider, environment)
|
| .then(compilationDone);
|
| }
|
|
|
| @@ -458,7 +459,7 @@ void fail(String message) {
|
| } else {
|
| print(message);
|
| }
|
| - exit(1);
|
| + exitFunc(1);
|
| }
|
|
|
| Future compilerMain(List<String> arguments) {
|
| @@ -592,7 +593,7 @@ void helpAndExit(bool wantHelp, bool wantVersion, bool verbose) {
|
| help();
|
| }
|
| }
|
| - exit(0);
|
| + exitFunc(0);
|
| }
|
|
|
| void helpAndFail(String message) {
|
| @@ -602,11 +603,18 @@ void helpAndFail(String message) {
|
| }
|
|
|
| void main(List<String> arguments) {
|
| - runZoned(() => compilerMain(arguments), onError: (exception, trace) {
|
| + internalMain(arguments);
|
| +}
|
| +
|
| +var exitFunc = exit;
|
| +var compileFunc = api.compile;
|
| +
|
| +Future internalMain(List<String> arguments) {
|
| + onError(exception, trace) {
|
| try {
|
| - print('Internal error: $exception');
|
| + print('The compiler crashed: $exception');
|
| } catch (ignored) {
|
| - print('Internal error: error while printing exception');
|
| + print('The compiler crashed: error while printing exception');
|
| }
|
|
|
| try {
|
| @@ -614,7 +622,14 @@ void main(List<String> arguments) {
|
| print(trace);
|
| }
|
| } finally {
|
| - exit(253); // 253 is recognized as a crash by our test scripts.
|
| + exitFunc(253); // 253 is recognized as a crash by our test scripts.
|
| }
|
| - });
|
| + }
|
| +
|
| + try {
|
| + return compilerMain(arguments).catchError(onError);
|
| + } catch (exception, trace) {
|
| + onError(exception, trace);
|
| + return new Future.value();
|
| + }
|
| }
|
|
|