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 #include "vm/object.h" | 5 #include "vm/object.h" |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
10 #include "vm/cpu.h" | 10 #include "vm/cpu.h" |
(...skipping 13451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13462 } | 13462 } |
13463 | 13463 |
13464 | 13464 |
13465 void UnhandledException::set_stacktrace(const Instance& stacktrace) const { | 13465 void UnhandledException::set_stacktrace(const Instance& stacktrace) const { |
13466 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw()); | 13466 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw()); |
13467 } | 13467 } |
13468 | 13468 |
13469 | 13469 |
13470 const char* UnhandledException::ToErrorCString() const { | 13470 const char* UnhandledException::ToErrorCString() const { |
13471 Isolate* isolate = Isolate::Current(); | 13471 Isolate* isolate = Isolate::Current(); |
13472 if (exception() == isolate->object_store()->out_of_memory()) { | |
13473 return "Unhandled exception:\nOut of memory"; | |
13474 } | |
13475 if (exception() == isolate->object_store()->stack_overflow()) { | |
13476 return "Unhandled exception:\nStack overflow"; | |
13477 } | |
13478 HANDLESCOPE(isolate); | 13472 HANDLESCOPE(isolate); |
13479 Object& strtmp = Object::Handle(); | 13473 Object& strtmp = Object::Handle(); |
13480 const Instance& exc = Instance::Handle(exception()); | 13474 const char* exc_str; |
13481 strtmp = DartLibraryCalls::ToString(exc); | 13475 if (exception() == isolate->object_store()->out_of_memory()) { |
13482 const char* exc_str = | 13476 exc_str = "Out of Memory"; |
13483 "<Received error while converting exception to string>"; | 13477 } else if (exception() == isolate->object_store()->stack_overflow()) { |
13484 if (!strtmp.IsError()) { | 13478 exc_str = "Stack Overflow"; |
13485 exc_str = strtmp.ToCString(); | 13479 } else { |
| 13480 const Instance& exc = Instance::Handle(exception()); |
| 13481 strtmp = DartLibraryCalls::ToString(exc); |
| 13482 if (!strtmp.IsError()) { |
| 13483 exc_str = strtmp.ToCString(); |
| 13484 } else { |
| 13485 exc_str = "<Received error while converting exception to string>"; |
| 13486 } |
13486 } | 13487 } |
13487 const Instance& stack = Instance::Handle(stacktrace()); | 13488 const Instance& stack = Instance::Handle(stacktrace()); |
13488 strtmp = DartLibraryCalls::ToString(stack); | 13489 strtmp = DartLibraryCalls::ToString(stack); |
13489 const char* stack_str = | 13490 const char* stack_str = |
13490 "<Received error while converting stack trace to string>"; | 13491 "<Received error while converting stack trace to string>"; |
13491 if (!strtmp.IsError()) { | 13492 if (!strtmp.IsError()) { |
13492 stack_str = strtmp.ToCString(); | 13493 stack_str = strtmp.ToCString(); |
13493 } | 13494 } |
13494 | |
13495 const char* format = "Unhandled exception:\n%s\n%s"; | 13495 const char* format = "Unhandled exception:\n%s\n%s"; |
13496 int len = (strlen(exc_str) + strlen(stack_str) + strlen(format) | 13496 intptr_t len = OS::SNPrint(NULL, 0, format, exc_str, stack_str); |
13497 - 4 // Two '%s' | |
13498 + 1); // '\0' | |
13499 char* chars = isolate->current_zone()->Alloc<char>(len); | 13497 char* chars = isolate->current_zone()->Alloc<char>(len); |
13500 OS::SNPrint(chars, len, format, exc_str, stack_str); | 13498 OS::SNPrint(chars, len, format, exc_str, stack_str); |
13501 return chars; | 13499 return chars; |
13502 } | 13500 } |
13503 | 13501 |
13504 | 13502 |
13505 const char* UnhandledException::ToCString() const { | 13503 const char* UnhandledException::ToCString() const { |
13506 return "UnhandledException"; | 13504 return "UnhandledException"; |
13507 } | 13505 } |
13508 | 13506 |
(...skipping 7247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
20756 return tag_label.ToCString(); | 20754 return tag_label.ToCString(); |
20757 } | 20755 } |
20758 | 20756 |
20759 | 20757 |
20760 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 20758 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
20761 Instance::PrintJSONImpl(stream, ref); | 20759 Instance::PrintJSONImpl(stream, ref); |
20762 } | 20760 } |
20763 | 20761 |
20764 | 20762 |
20765 } // namespace dart | 20763 } // namespace dart |
OLD | NEW |