OLD | NEW |
---|---|
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of dart2js; | 5 part of dart2js; |
6 | 6 |
7 /** | 7 /** |
8 * If true, print a warning for each method that was resolved, but not | 8 * If true, print a warning for each method that was resolved, but not |
9 * compiled. | 9 * compiled. |
10 */ | 10 */ |
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
497 /** | 497 /** |
498 * Perform an operation, [f], returning the return value from [f]. If an | 498 * Perform an operation, [f], returning the return value from [f]. If an |
499 * error occurs then report it as having occurred during compilation of | 499 * error occurs then report it as having occurred during compilation of |
500 * [element]. Can be nested. | 500 * [element]. Can be nested. |
501 */ | 501 */ |
502 withCurrentElement(Element element, f()) { | 502 withCurrentElement(Element element, f()) { |
503 Element old = currentElement; | 503 Element old = currentElement; |
504 _currentElement = element; | 504 _currentElement = element; |
505 try { | 505 try { |
506 return f(); | 506 return f(); |
507 } on SpannableAssertionFailure catch (ex, s) { | 507 } on SpannableAssertionFailure catch (ex) { |
508 if (!hasCrashed) { | 508 if (!hasCrashed) { |
509 String message = (ex.message != null) ? tryToString(ex.message) | 509 String message = (ex.message != null) ? tryToString(ex.message) |
510 : tryToString(ex); | 510 : tryToString(ex); |
511 SourceSpan span = spanFromSpannable(ex.node); | 511 SourceSpan span = spanFromSpannable(ex.node); |
512 reportError(ex.node, MessageKind.GENERIC, {'text': message}); | 512 reportError(ex.node, MessageKind.GENERIC, {'text': message}); |
513 pleaseReportCrash(s, 'The compiler crashed: $message.'); | 513 pleaseReportCrash('The compiler crashed: $message.'); |
514 } | 514 } |
515 hasCrashed = true; | 515 hasCrashed = true; |
516 throw new CompilerCancelledException('The compiler crashed.'); | 516 rethrow; |
517 } on CompilerCancelledException catch (ex) { | 517 } on CompilerCancelledException catch (ex) { |
518 rethrow; | 518 rethrow; |
519 } on StackOverflowError catch (ex) { | 519 } on StackOverflowError catch (ex) { |
520 // We cannot report anything useful in this case, because we | 520 // We cannot report anything useful in this case, because we |
521 // do not have enough stack space. | 521 // do not have enough stack space. |
522 rethrow; | 522 rethrow; |
523 } catch (ex, s) { | 523 } catch (ex) { |
524 if (hasCrashed) rethrow; | 524 if (hasCrashed) rethrow; |
525 String message = 'The compiler crashed: ${tryToString(ex)}.'; | 525 String message = 'The compiler crashed: ${tryToString(ex)}.'; |
526 try { | 526 try { |
527 unhandledExceptionOnElement(element, s, message); | 527 unhandledExceptionOnElement(element, message); |
528 } catch (doubleFault) { | 528 } catch (doubleFault) { |
529 // Ignoring exceptions in exception handling. | 529 // Ignoring exceptions in exception handling. |
530 } | 530 } |
531 throw new CompilerCancelledException(message); | 531 rethrow; |
532 } finally { | 532 } finally { |
533 _currentElement = old; | 533 _currentElement = old; |
534 } | 534 } |
535 } | 535 } |
536 | 536 |
537 List<CompilerTask> tasks; | 537 List<CompilerTask> tasks; |
538 ScannerTask scanner; | 538 ScannerTask scanner; |
539 DietParserTask dietParser; | 539 DietParserTask dietParser; |
540 ParserTask parser; | 540 ParserTask parser; |
541 PatchParserTask patchParser; | 541 PatchParserTask patchParser; |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
695 Element element}) { | 695 Element element}) { |
696 cancel('Internal Error: $message', | 696 cancel('Internal Error: $message', |
697 node: node, token: token, | 697 node: node, token: token, |
698 instruction: instruction, element: element); | 698 instruction: instruction, element: element); |
699 } | 699 } |
700 | 700 |
701 void internalErrorOnElement(Element element, String message) { | 701 void internalErrorOnElement(Element element, String message) { |
702 internalError(message, element: element); | 702 internalError(message, element: element); |
703 } | 703 } |
704 | 704 |
705 void unhandledExceptionOnElement(Element element, | 705 void unhandledExceptionOnElement(Element element, String message) { |
706 StackTrace stackTrace, | |
707 String message) { | |
708 if (hasCrashed) return; | 706 if (hasCrashed) return; |
709 hasCrashed = true; | 707 hasCrashed = true; |
710 reportDiagnostic(spanFromElement(element), | 708 reportDiagnostic(spanFromElement(element), |
711 MessageKind.COMPILER_CRASHED.error().toString(), | 709 MessageKind.COMPILER_CRASHED.error().toString(), |
712 api.Diagnostic.CRASH); | 710 api.Diagnostic.CRASH); |
713 pleaseReportCrash(stackTrace, message); | 711 pleaseReportCrash(message); |
714 } | 712 } |
715 | 713 |
716 void pleaseReportCrash(StackTrace stackTrace, String message) { | 714 void pleaseReportCrash(String message) { |
ahe
2013/11/26 11:18:25
I think you can eliminate this argument as well (o
Johnni Winther
2013/11/27 07:58:04
Done.
| |
717 print(MessageKind.PLEASE_REPORT_THE_CRASH.message({'buildId': buildId})); | 715 print(MessageKind.PLEASE_REPORT_THE_CRASH.message({'buildId': buildId})); |
718 if (message != null) { | 716 if (message != null) { |
719 print(message); | 717 print(message); |
720 } | 718 } |
721 if (stackTrace != null) { | |
722 print(stackTrace); | |
723 } | |
724 } | 719 } |
725 | 720 |
726 void cancel(String reason, {Node node, Token token, | 721 void cancel(String reason, {Node node, Token token, |
727 HInstruction instruction, Element element}) { | 722 HInstruction instruction, Element element}) { |
728 assembledCode = null; // Compilation failed. Make sure that we | 723 assembledCode = null; // Compilation failed. Make sure that we |
729 // don't return a bogus result. | 724 // don't return a bogus result. |
730 Spannable spannable = null; | 725 Spannable spannable = null; |
731 if (node != null) { | 726 if (node != null) { |
732 spannable = node; | 727 spannable = node; |
733 } else if (token != null) { | 728 } else if (token != null) { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
767 } | 762 } |
768 } | 763 } |
769 | 764 |
770 void log(message) { | 765 void log(message) { |
771 reportDiagnostic(null, message, api.Diagnostic.VERBOSE_INFO); | 766 reportDiagnostic(null, message, api.Diagnostic.VERBOSE_INFO); |
772 } | 767 } |
773 | 768 |
774 Future<bool> run(Uri uri) { | 769 Future<bool> run(Uri uri) { |
775 totalCompileTime.start(); | 770 totalCompileTime.start(); |
776 | 771 |
777 return new Future.sync(() => runCompiler(uri)).catchError((error, trace) { | 772 return new Future.sync(() => runCompiler(uri)).catchError((error) { |
778 if (error is CompilerCancelledException) { | 773 if (error is CompilerCancelledException) { |
779 log('Error: $error'); | 774 log('Error: $error'); |
780 return false; | 775 return false; |
781 } | 776 } |
782 | 777 |
783 try { | 778 try { |
784 if (!hasCrashed) { | 779 if (!hasCrashed) { |
785 hasCrashed = true; | 780 hasCrashed = true; |
786 reportDiagnostic(new SourceSpan(uri, 0, 0), | 781 reportDiagnostic(new SourceSpan(uri, 0, 0), |
787 MessageKind.COMPILER_CRASHED.error().toString(), | 782 MessageKind.COMPILER_CRASHED.error().toString(), |
788 api.Diagnostic.CRASH); | 783 api.Diagnostic.CRASH); |
789 String message = 'The compiler crashed.'; | 784 String message = 'The compiler crashed.'; |
790 pleaseReportCrash(trace, message); | 785 pleaseReportCrash(message); |
791 } | 786 } |
792 } catch (doubleFault) { | 787 } catch (doubleFault) { |
793 // Ignoring exceptions in exception handling. | 788 // Ignoring exceptions in exception handling. |
794 } | 789 } |
795 throw error; | 790 throw error; |
796 }).whenComplete(() { | 791 }).whenComplete(() { |
797 tracer.close(); | 792 tracer.close(); |
798 totalCompileTime.stop(); | 793 totalCompileTime.stop(); |
799 }).then((_) { | 794 }).then((_) { |
800 return !compilationFailed; | 795 return !compilationFailed; |
(...skipping 855 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1656 | 1651 |
1657 void close() {} | 1652 void close() {} |
1658 | 1653 |
1659 toString() => name; | 1654 toString() => name; |
1660 | 1655 |
1661 /// Convenience method for getting an [api.CompilerOutputProvider]. | 1656 /// Convenience method for getting an [api.CompilerOutputProvider]. |
1662 static NullSink outputProvider(String name, String extension) { | 1657 static NullSink outputProvider(String name, String extension) { |
1663 return new NullSink('$name.$extension'); | 1658 return new NullSink('$name.$extension'); |
1664 } | 1659 } |
1665 } | 1660 } |
OLD | NEW |