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/isolate.h" | 5 #include "vm/isolate.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 "lib/mirrors.h" | 9 #include "lib/mirrors.h" |
10 #include "vm/compiler_stats.h" | 10 #include "vm/compiler_stats.h" |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 | 103 |
104 if (message->IsOOB()) { | 104 if (message->IsOOB()) { |
105 // For now the only OOB messages are Mirrors messages. | 105 // For now the only OOB messages are Mirrors messages. |
106 HandleMirrorsMessage(isolate_, message->reply_port(), msg); | 106 HandleMirrorsMessage(isolate_, message->reply_port(), msg); |
107 delete message; | 107 delete message; |
108 } else { | 108 } else { |
109 const Object& result = Object::Handle( | 109 const Object& result = Object::Handle( |
110 DartLibraryCalls::HandleMessage( | 110 DartLibraryCalls::HandleMessage( |
111 message->dest_port(), message->reply_port(), msg)); | 111 message->dest_port(), message->reply_port(), msg)); |
112 delete message; | 112 delete message; |
113 if (result.IsError()) { | 113 if (result.IsError() || result.IsUnhandledException()) { |
114 isolate_->object_store()->set_sticky_error(Error::Cast(result)); | 114 if (result.IsError()) { |
| 115 isolate_->object_store()->set_sticky_error(Error::Cast(result)); |
| 116 } |
| 117 if (Isolate::UnhandledExceptionCallback() != NULL) { |
| 118 Dart_EnterScope(); |
| 119 Dart_Handle error = Api::NewHandle(isolate_, result.raw()); |
| 120 (Isolate::UnhandledExceptionCallback())(error); |
| 121 Dart_ExitScope(); |
| 122 } |
115 return false; | 123 return false; |
116 } | 124 } |
117 ASSERT(result.IsNull()); | 125 ASSERT(result.IsNull()); |
118 } | 126 } |
119 return true; | 127 return true; |
120 } | 128 } |
121 | 129 |
122 | 130 |
123 #if defined(DEBUG) | 131 #if defined(DEBUG) |
124 void IsolateMessageHandler::CheckAccess() { | 132 void IsolateMessageHandler::CheckAccess() { |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 "\tisolate: %s\n", name()); | 447 "\tisolate: %s\n", name()); |
440 } | 448 } |
441 // TODO(5411455): For now just make sure there are no current isolates | 449 // TODO(5411455): For now just make sure there are no current isolates |
442 // as we are shutting down the isolate. | 450 // as we are shutting down the isolate. |
443 SetCurrent(NULL); | 451 SetCurrent(NULL); |
444 } | 452 } |
445 | 453 |
446 | 454 |
447 Dart_IsolateCreateCallback Isolate::create_callback_ = NULL; | 455 Dart_IsolateCreateCallback Isolate::create_callback_ = NULL; |
448 Dart_IsolateInterruptCallback Isolate::interrupt_callback_ = NULL; | 456 Dart_IsolateInterruptCallback Isolate::interrupt_callback_ = NULL; |
| 457 Dart_IsolateUnhandledExceptionCallback |
| 458 Isolate::unhandled_exception_callback_ = NULL; |
449 Dart_IsolateShutdownCallback Isolate::shutdown_callback_ = NULL; | 459 Dart_IsolateShutdownCallback Isolate::shutdown_callback_ = NULL; |
450 | 460 |
451 | 461 |
452 void Isolate::VisitObjectPointers(ObjectPointerVisitor* visitor, | 462 void Isolate::VisitObjectPointers(ObjectPointerVisitor* visitor, |
453 bool visit_prologue_weak_handles, | 463 bool visit_prologue_weak_handles, |
454 bool validate_frames) { | 464 bool validate_frames) { |
455 ASSERT(visitor != NULL); | 465 ASSERT(visitor != NULL); |
456 | 466 |
457 // Visit objects in the object store. | 467 // Visit objects in the object store. |
458 object_store()->VisitObjectPointers(visitor); | 468 object_store()->VisitObjectPointers(visitor); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
491 | 501 |
492 | 502 |
493 void Isolate::VisitWeakPersistentHandles(HandleVisitor* visitor, | 503 void Isolate::VisitWeakPersistentHandles(HandleVisitor* visitor, |
494 bool visit_prologue_weak_handles) { | 504 bool visit_prologue_weak_handles) { |
495 if (api_state() != NULL) { | 505 if (api_state() != NULL) { |
496 api_state()->VisitWeakHandles(visitor, visit_prologue_weak_handles); | 506 api_state()->VisitWeakHandles(visitor, visit_prologue_weak_handles); |
497 } | 507 } |
498 } | 508 } |
499 | 509 |
500 } // namespace dart | 510 } // namespace dart |
OLD | NEW |