| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 "include/dart_native_api.h" | 8 #include "include/dart_native_api.h" |
| 9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
| 10 #include "platform/json.h" | 10 #include "platform/json.h" |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 const char* IsolateMessageHandler::name() const { | 210 const char* IsolateMessageHandler::name() const { |
| 211 return isolate_->name(); | 211 return isolate_->name(); |
| 212 } | 212 } |
| 213 | 213 |
| 214 | 214 |
| 215 // Isolate library OOB messages are fixed sized arrays which have the | 215 // Isolate library OOB messages are fixed sized arrays which have the |
| 216 // following format: | 216 // following format: |
| 217 // [ OOB dispatch, Isolate library dispatch, <message specific data> ] | 217 // [ OOB dispatch, Isolate library dispatch, <message specific data> ] |
| 218 RawError* IsolateMessageHandler::HandleLibMessage(const Array& message) { | 218 RawError* IsolateMessageHandler::HandleLibMessage(const Array& message) { |
| 219 if (message.Length() < 2) return Error::null(); | 219 if (message.Length() < 2) return Error::null(); |
| 220 Zone* zone = I->current_zone(); | 220 Zone* zone = T->zone(); |
| 221 const Object& type = Object::Handle(zone, message.At(1)); | 221 const Object& type = Object::Handle(zone, message.At(1)); |
| 222 if (!type.IsSmi()) return Error::null(); | 222 if (!type.IsSmi()) return Error::null(); |
| 223 const intptr_t msg_type = Smi::Cast(type).Value(); | 223 const intptr_t msg_type = Smi::Cast(type).Value(); |
| 224 switch (msg_type) { | 224 switch (msg_type) { |
| 225 case Isolate::kPauseMsg: { | 225 case Isolate::kPauseMsg: { |
| 226 // [ OOB, kPauseMsg, pause capability, resume capability ] | 226 // [ OOB, kPauseMsg, pause capability, resume capability ] |
| 227 if (message.Length() != 4) return Error::null(); | 227 if (message.Length() != 4) return Error::null(); |
| 228 Object& obj = Object::Handle(zone, message.At(2)); | 228 Object& obj = Object::Handle(zone, message.At(2)); |
| 229 if (!I->VerifyPauseCapability(obj)) return Error::null(); | 229 if (!I->VerifyPauseCapability(obj)) return Error::null(); |
| 230 obj = message.At(3); | 230 obj = message.At(3); |
| (...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 633 | 633 |
| 634 // Invoke the isolate's unhandled exception callback if there is one. | 634 // Invoke the isolate's unhandled exception callback if there is one. |
| 635 if (Isolate::UnhandledExceptionCallback() != NULL) { | 635 if (Isolate::UnhandledExceptionCallback() != NULL) { |
| 636 Dart_EnterScope(); | 636 Dart_EnterScope(); |
| 637 Dart_Handle error = Api::NewHandle(I, result.raw()); | 637 Dart_Handle error = Api::NewHandle(I, result.raw()); |
| 638 (Isolate::UnhandledExceptionCallback())(error); | 638 (Isolate::UnhandledExceptionCallback())(error); |
| 639 Dart_ExitScope(); | 639 Dart_ExitScope(); |
| 640 } | 640 } |
| 641 | 641 |
| 642 // Generate the error and stacktrace strings for the error message. | 642 // Generate the error and stacktrace strings for the error message. |
| 643 String& exc_str = String::Handle(I->current_zone()); | 643 String& exc_str = String::Handle(T->zone()); |
| 644 String& stacktrace_str = String::Handle(I->current_zone()); | 644 String& stacktrace_str = String::Handle(T->zone()); |
| 645 if (result.IsUnhandledException()) { | 645 if (result.IsUnhandledException()) { |
| 646 Zone* zone = I->current_zone(); | 646 Zone* zone = T->zone(); |
| 647 const UnhandledException& uhe = UnhandledException::Cast(result); | 647 const UnhandledException& uhe = UnhandledException::Cast(result); |
| 648 const Instance& exception = Instance::Handle(zone, uhe.exception()); | 648 const Instance& exception = Instance::Handle(zone, uhe.exception()); |
| 649 Object& tmp = Object::Handle(zone); | 649 Object& tmp = Object::Handle(zone); |
| 650 tmp = DartLibraryCalls::ToString(exception); | 650 tmp = DartLibraryCalls::ToString(exception); |
| 651 if (!tmp.IsString()) { | 651 if (!tmp.IsString()) { |
| 652 tmp = String::New(exception.ToCString()); | 652 tmp = String::New(exception.ToCString()); |
| 653 } | 653 } |
| 654 exc_str ^= tmp.raw(); | 654 exc_str ^= tmp.raw(); |
| 655 | 655 |
| 656 const Instance& stacktrace = Instance::Handle(zone, uhe.stacktrace()); | 656 const Instance& stacktrace = Instance::Handle(zone, uhe.stacktrace()); |
| (...skipping 1233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1890 Library::Handle(object_store()->root_library()); | 1890 Library::Handle(object_store()->root_library()); |
| 1891 if (!lib.IsNull()) { | 1891 if (!lib.IsNull()) { |
| 1892 jsobj.AddProperty("rootLib", lib); | 1892 jsobj.AddProperty("rootLib", lib); |
| 1893 } | 1893 } |
| 1894 | 1894 |
| 1895 { | 1895 { |
| 1896 JSONObject tagCounters(&jsobj, "_tagCounters"); | 1896 JSONObject tagCounters(&jsobj, "_tagCounters"); |
| 1897 vm_tag_counters()->PrintToJSONObject(&tagCounters); | 1897 vm_tag_counters()->PrintToJSONObject(&tagCounters); |
| 1898 } | 1898 } |
| 1899 if (object_store()->sticky_error() != Object::null()) { | 1899 if (object_store()->sticky_error() != Object::null()) { |
| 1900 Error& error = Error::Handle(current_zone(), | 1900 Error& error = Error::Handle(object_store()->sticky_error()); |
| 1901 object_store()->sticky_error()); | |
| 1902 ASSERT(!error.IsNull()); | 1901 ASSERT(!error.IsNull()); |
| 1903 jsobj.AddProperty("error", error, false); | 1902 jsobj.AddProperty("error", error, false); |
| 1904 } | 1903 } |
| 1905 | 1904 |
| 1906 { | 1905 { |
| 1907 const GrowableObjectArray& libs = | 1906 const GrowableObjectArray& libs = |
| 1908 GrowableObjectArray::Handle(object_store()->libraries()); | 1907 GrowableObjectArray::Handle(object_store()->libraries()); |
| 1909 intptr_t num_libs = libs.Length(); | 1908 intptr_t num_libs = libs.Length(); |
| 1910 Library& lib = Library::Handle(); | 1909 Library& lib = Library::Handle(); |
| 1911 | 1910 |
| (...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2612 serialized_message_, serialized_message_len_); | 2611 serialized_message_, serialized_message_len_); |
| 2613 } | 2612 } |
| 2614 | 2613 |
| 2615 | 2614 |
| 2616 void IsolateSpawnState::Cleanup() { | 2615 void IsolateSpawnState::Cleanup() { |
| 2617 SwitchIsolateScope switch_scope(I); | 2616 SwitchIsolateScope switch_scope(I); |
| 2618 Dart::ShutdownIsolate(); | 2617 Dart::ShutdownIsolate(); |
| 2619 } | 2618 } |
| 2620 | 2619 |
| 2621 } // namespace dart | 2620 } // namespace dart |
| OLD | NEW |