| 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 "include/dart_api.h" | 5 #include "include/dart_api.h" |
| 6 | 6 |
| 7 #include "vm/bigint_operations.h" | 7 #include "vm/bigint_operations.h" |
| 8 #include "vm/class_finalizer.h" | 8 #include "vm/class_finalizer.h" |
| 9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
| 10 #include "vm/dart.h" | 10 #include "vm/dart.h" |
| (...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 808 } | 808 } |
| 809 if (size == NULL) { | 809 if (size == NULL) { |
| 810 RETURN_NULL_ERROR(size); | 810 RETURN_NULL_ERROR(size); |
| 811 } | 811 } |
| 812 const char* msg = CheckIsolateState(isolate); | 812 const char* msg = CheckIsolateState(isolate); |
| 813 if (msg != NULL) { | 813 if (msg != NULL) { |
| 814 return Api::NewError(msg); | 814 return Api::NewError(msg); |
| 815 } | 815 } |
| 816 // Since this is only a snapshot the root library should not be set. | 816 // Since this is only a snapshot the root library should not be set. |
| 817 isolate->object_store()->set_root_library(Library::Handle(isolate)); | 817 isolate->object_store()->set_root_library(Library::Handle(isolate)); |
| 818 SnapshotWriter writer(Snapshot::kFull, buffer, ApiReallocate); | 818 FullSnapshotWriter writer(buffer, ApiReallocate); |
| 819 writer.WriteFullSnapshot(); | 819 writer.WriteFullSnapshot(); |
| 820 *size = writer.BytesWritten(); | 820 *size = writer.BytesWritten(); |
| 821 return Api::Success(isolate); | 821 return Api::Success(isolate); |
| 822 } | 822 } |
| 823 | 823 |
| 824 | 824 |
| 825 DART_EXPORT Dart_Handle Dart_CreateScriptSnapshot(uint8_t** buffer, | 825 DART_EXPORT Dart_Handle Dart_CreateScriptSnapshot(uint8_t** buffer, |
| 826 intptr_t* size) { | 826 intptr_t* size) { |
| 827 Isolate* isolate = Isolate::Current(); | 827 Isolate* isolate = Isolate::Current(); |
| 828 DARTSCOPE(isolate); | 828 DARTSCOPE(isolate); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 939 void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size); | 939 void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size); |
| 940 return reinterpret_cast<uint8_t*>(new_ptr); | 940 return reinterpret_cast<uint8_t*>(new_ptr); |
| 941 } | 941 } |
| 942 | 942 |
| 943 | 943 |
| 944 DART_EXPORT bool Dart_PostIntArray(Dart_Port port_id, | 944 DART_EXPORT bool Dart_PostIntArray(Dart_Port port_id, |
| 945 intptr_t len, | 945 intptr_t len, |
| 946 intptr_t* data) { | 946 intptr_t* data) { |
| 947 uint8_t* buffer = NULL; | 947 uint8_t* buffer = NULL; |
| 948 ApiMessageWriter writer(&buffer, &allocator); | 948 ApiMessageWriter writer(&buffer, &allocator); |
| 949 | |
| 950 writer.WriteMessage(len, data); | 949 writer.WriteMessage(len, data); |
| 951 | 950 |
| 952 // Post the message at the given port. | 951 // Post the message at the given port. |
| 953 return PortMap::PostMessage(new Message( | 952 return PortMap::PostMessage(new Message( |
| 954 port_id, Message::kIllegalPort, buffer, Message::kNormalPriority)); | 953 port_id, Message::kIllegalPort, buffer, writer.BytesWritten(), |
| 954 Message::kNormalPriority)); |
| 955 } | 955 } |
| 956 | 956 |
| 957 | 957 |
| 958 DART_EXPORT bool Dart_PostCObject(Dart_Port port_id, Dart_CObject* message) { | 958 DART_EXPORT bool Dart_PostCObject(Dart_Port port_id, Dart_CObject* message) { |
| 959 uint8_t* buffer = NULL; | 959 uint8_t* buffer = NULL; |
| 960 ApiMessageWriter writer(&buffer, allocator); | 960 ApiMessageWriter writer(&buffer, allocator); |
| 961 | |
| 962 writer.WriteCMessage(message); | 961 writer.WriteCMessage(message); |
| 963 | 962 |
| 964 // Post the message at the given port. | 963 // Post the message at the given port. |
| 965 return PortMap::PostMessage(new Message( | 964 return PortMap::PostMessage(new Message( |
| 966 port_id, Message::kIllegalPort, buffer, Message::kNormalPriority)); | 965 port_id, Message::kIllegalPort, buffer, writer.BytesWritten(), |
| 966 Message::kNormalPriority)); |
| 967 } | 967 } |
| 968 | 968 |
| 969 | 969 |
| 970 DART_EXPORT bool Dart_Post(Dart_Port port_id, Dart_Handle handle) { | 970 DART_EXPORT bool Dart_Post(Dart_Port port_id, Dart_Handle handle) { |
| 971 Isolate* isolate = Isolate::Current(); | 971 Isolate* isolate = Isolate::Current(); |
| 972 CHECK_ISOLATE(isolate); | 972 CHECK_ISOLATE(isolate); |
| 973 DARTSCOPE_NOCHECKS(isolate); | 973 DARTSCOPE_NOCHECKS(isolate); |
| 974 const Object& object = Object::Handle(isolate, Api::UnwrapHandle(handle)); | 974 const Object& object = Object::Handle(isolate, Api::UnwrapHandle(handle)); |
| 975 uint8_t* data = NULL; | 975 uint8_t* data = NULL; |
| 976 SnapshotWriter writer(Snapshot::kMessage, &data, &allocator); | 976 MessageWriter writer(&data, &allocator); |
| 977 writer.WriteObject(object.raw()); | 977 writer.WriteMessage(object); |
| 978 writer.FinalizeBuffer(); | 978 intptr_t len = writer.BytesWritten(); |
| 979 return PortMap::PostMessage(new Message( | 979 return PortMap::PostMessage(new Message( |
| 980 port_id, Message::kIllegalPort, data, Message::kNormalPriority)); | 980 port_id, Message::kIllegalPort, data, len, Message::kNormalPriority)); |
| 981 } | 981 } |
| 982 | 982 |
| 983 | 983 |
| 984 DART_EXPORT Dart_Port Dart_NewNativePort(const char* name, | 984 DART_EXPORT Dart_Port Dart_NewNativePort(const char* name, |
| 985 Dart_NativeMessageHandler handler, | 985 Dart_NativeMessageHandler handler, |
| 986 bool handle_concurrently) { | 986 bool handle_concurrently) { |
| 987 if (name == NULL) { | 987 if (name == NULL) { |
| 988 name = "<UnnamedNativePort>"; | 988 name = "<UnnamedNativePort>"; |
| 989 } | 989 } |
| 990 if (handler == NULL) { | 990 if (handler == NULL) { |
| (...skipping 2829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3820 TIMERSCOPE(time_script_loading); | 3820 TIMERSCOPE(time_script_loading); |
| 3821 if (buffer == NULL) { | 3821 if (buffer == NULL) { |
| 3822 RETURN_NULL_ERROR(buffer); | 3822 RETURN_NULL_ERROR(buffer); |
| 3823 } | 3823 } |
| 3824 if (FLAG_use_cha) { | 3824 if (FLAG_use_cha) { |
| 3825 RemoveOptimizedCode(); | 3825 RemoveOptimizedCode(); |
| 3826 } | 3826 } |
| 3827 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); | 3827 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); |
| 3828 if (!snapshot->IsScriptSnapshot()) { | 3828 if (!snapshot->IsScriptSnapshot()) { |
| 3829 return Api::NewError("%s expects parameter 'buffer' to be a script type" | 3829 return Api::NewError("%s expects parameter 'buffer' to be a script type" |
| 3830 " snapshot", CURRENT_FUNC); | 3830 " snapshot.", CURRENT_FUNC); |
| 3831 } | 3831 } |
| 3832 Library& library = | 3832 Library& library = |
| 3833 Library::Handle(isolate, isolate->object_store()->root_library()); | 3833 Library::Handle(isolate, isolate->object_store()->root_library()); |
| 3834 if (!library.IsNull()) { | 3834 if (!library.IsNull()) { |
| 3835 const String& library_url = String::Handle(isolate, library.url()); | 3835 const String& library_url = String::Handle(isolate, library.url()); |
| 3836 return Api::NewError("%s: A script has already been loaded from '%s'.", | 3836 return Api::NewError("%s: A script has already been loaded from '%s'.", |
| 3837 CURRENT_FUNC, library_url.ToCString()); | 3837 CURRENT_FUNC, library_url.ToCString()); |
| 3838 } | 3838 } |
| 3839 SnapshotReader reader(snapshot, isolate); | 3839 SnapshotReader reader(snapshot->content(), |
| 3840 snapshot->length(), |
| 3841 snapshot->kind(), |
| 3842 isolate); |
| 3840 const Object& tmp = Object::Handle(isolate, reader.ReadObject()); | 3843 const Object& tmp = Object::Handle(isolate, reader.ReadObject()); |
| 3841 if (!tmp.IsLibrary()) { | 3844 if (!tmp.IsLibrary()) { |
| 3842 return Api::NewError("%s: Unable to deserialize snapshot correctly.", | 3845 return Api::NewError("%s: Unable to deserialize snapshot correctly.", |
| 3843 CURRENT_FUNC); | 3846 CURRENT_FUNC); |
| 3844 } | 3847 } |
| 3845 library ^= tmp.raw(); | 3848 library ^= tmp.raw(); |
| 3846 library.set_debuggable(true); | 3849 library.set_debuggable(true); |
| 3847 isolate->object_store()->set_root_library(library); | 3850 isolate->object_store()->set_root_library(library); |
| 3848 return Api::NewHandle(isolate, library.raw()); | 3851 return Api::NewHandle(isolate, library.raw()); |
| 3849 } | 3852 } |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4128 DART_EXPORT void Dart_InitPerfEventsSupport(Dart_FileWriterFunction function) { | 4131 DART_EXPORT void Dart_InitPerfEventsSupport(Dart_FileWriterFunction function) { |
| 4129 Dart::set_perf_events_writer(function); | 4132 Dart::set_perf_events_writer(function); |
| 4130 } | 4133 } |
| 4131 | 4134 |
| 4132 | 4135 |
| 4133 DART_EXPORT void Dart_InitFlowGraphPrinting(Dart_FileWriterFunction function) { | 4136 DART_EXPORT void Dart_InitFlowGraphPrinting(Dart_FileWriterFunction function) { |
| 4134 Dart::set_flow_graph_writer(function); | 4137 Dart::set_flow_graph_writer(function); |
| 4135 } | 4138 } |
| 4136 | 4139 |
| 4137 } // namespace dart | 4140 } // namespace dart |
| OLD | NEW |