OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 #include "vm/exceptions.h" | 5 #include "vm/exceptions.h" |
6 | 6 |
7 #include "platform/address_sanitizer.h" | 7 #include "platform/address_sanitizer.h" |
8 | 8 |
9 #include "vm/dart_api_impl.h" | 9 #include "vm/dart_api_impl.h" |
10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
628 class_name = &Symbols::UnsupportedError(); | 628 class_name = &Symbols::UnsupportedError(); |
629 break; | 629 break; |
630 case kNullThrown: | 630 case kNullThrown: |
631 library = Library::CoreLibrary(); | 631 library = Library::CoreLibrary(); |
632 class_name = &Symbols::NullThrownError(); | 632 class_name = &Symbols::NullThrownError(); |
633 break; | 633 break; |
634 case kIsolateSpawn: | 634 case kIsolateSpawn: |
635 library = Library::IsolateLibrary(); | 635 library = Library::IsolateLibrary(); |
636 class_name = &Symbols::IsolateSpawnException(); | 636 class_name = &Symbols::IsolateSpawnException(); |
637 break; | 637 break; |
638 case kJavascriptIntegerOverflowError: | |
639 library = Library::CoreLibrary(); | |
640 class_name = &Symbols::JavascriptIntegerOverflowError(); | |
641 break; | |
642 case kJavascriptCompatibilityError: | |
643 library = Library::CoreLibrary(); | |
644 class_name = &Symbols::JavascriptCompatibilityError(); | |
645 break; | |
646 case kAssertion: | 638 case kAssertion: |
647 library = Library::CoreLibrary(); | 639 library = Library::CoreLibrary(); |
648 class_name = &Symbols::AssertionError(); | 640 class_name = &Symbols::AssertionError(); |
649 constructor_name = &Symbols::DotCreate(); | 641 constructor_name = &Symbols::DotCreate(); |
650 break; | 642 break; |
651 case kCast: | 643 case kCast: |
652 library = Library::CoreLibrary(); | 644 library = Library::CoreLibrary(); |
653 class_name = &Symbols::CastError(); | 645 class_name = &Symbols::CastError(); |
654 constructor_name = &Symbols::DotCreate(); | 646 constructor_name = &Symbols::DotCreate(); |
655 break; | 647 break; |
(...skipping 17 matching lines...) Expand all Loading... |
673 class_name = &Symbols::CyclicInitializationError(); | 665 class_name = &Symbols::CyclicInitializationError(); |
674 } | 666 } |
675 | 667 |
676 return DartLibraryCalls::InstanceCreate(library, | 668 return DartLibraryCalls::InstanceCreate(library, |
677 *class_name, | 669 *class_name, |
678 *constructor_name, | 670 *constructor_name, |
679 arguments); | 671 arguments); |
680 } | 672 } |
681 | 673 |
682 | 674 |
683 // Throw JavascriptCompatibilityError exception. | |
684 void Exceptions::ThrowJavascriptCompatibilityError(const char* msg) { | |
685 const Array& exc_args = Array::Handle(Array::New(1)); | |
686 const String& msg_str = String::Handle(String::New(msg)); | |
687 exc_args.SetAt(0, msg_str); | |
688 Exceptions::ThrowByType(Exceptions::kJavascriptCompatibilityError, exc_args); | |
689 } | |
690 | |
691 | |
692 static bool IsLikelyInternalDart2JSCrash(const Stacktrace& stacktrace) { | 675 static bool IsLikelyInternalDart2JSCrash(const Stacktrace& stacktrace) { |
693 Function& function = Function::Handle(); | 676 Function& function = Function::Handle(); |
694 String& name = String::Handle(); | 677 String& name = String::Handle(); |
695 for (intptr_t i = 0, len = stacktrace.Length(); i < len; i++) { | 678 for (intptr_t i = 0, len = stacktrace.Length(); i < len; i++) { |
696 function = stacktrace.FunctionAtFrame(i); | 679 function = stacktrace.FunctionAtFrame(i); |
697 name = function.QualifiedPrettyName(); | 680 name = function.QualifiedPrettyName(); |
698 if (name.Equals("_CompilerDiagnosticReporter.withCurrentElement")) { | 681 if (name.Equals("_CompilerDiagnosticReporter.withCurrentElement")) { |
699 return true; | 682 return true; |
700 } | 683 } |
701 } | 684 } |
702 return false; | 685 return false; |
703 } | 686 } |
704 | 687 |
705 | 688 |
706 void Exceptions::PrintStackTraceAndAbort(const char* reason) { | 689 void Exceptions::PrintStackTraceAndAbort(const char* reason) { |
707 const Stacktrace& stacktrace = Stacktrace::Handle(CurrentStacktrace()); | 690 const Stacktrace& stacktrace = Stacktrace::Handle(CurrentStacktrace()); |
708 if (!IsLikelyInternalDart2JSCrash(stacktrace)) { | 691 if (!IsLikelyInternalDart2JSCrash(stacktrace)) { |
709 return; | 692 return; |
710 } | 693 } |
711 | 694 |
712 OS::PrintErr("\n\n\nAborting due to %s. Stacktrace:\n%s\n", | 695 OS::PrintErr("\n\n\nAborting due to %s. Stacktrace:\n%s\n", |
713 reason, | 696 reason, |
714 stacktrace.ToCString()); | 697 stacktrace.ToCString()); |
715 OS::Abort(); | 698 OS::Abort(); |
716 } | 699 } |
717 | 700 |
718 } // namespace dart | 701 } // namespace dart |
OLD | NEW |