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 "include/dart_api.h" | 5 #include "include/dart_api.h" |
6 #include "include/dart_mirrors_api.h" | 6 #include "include/dart_mirrors_api.h" |
7 #include "include/dart_native_api.h" | 7 #include "include/dart_native_api.h" |
8 | 8 |
9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
10 #include "vm/bigint_operations.h" | 10 #include "vm/bigint_operations.h" |
(...skipping 1171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1182 | 1182 |
1183 | 1183 |
1184 DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id) { | 1184 DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id) { |
1185 Isolate* isolate = Isolate::Current(); | 1185 Isolate* isolate = Isolate::Current(); |
1186 DARTSCOPE(isolate); | 1186 DARTSCOPE(isolate); |
1187 CHECK_CALLBACK_STATE(isolate); | 1187 CHECK_CALLBACK_STATE(isolate); |
1188 return Api::NewHandle(isolate, DartLibraryCalls::NewSendPort(port_id)); | 1188 return Api::NewHandle(isolate, DartLibraryCalls::NewSendPort(port_id)); |
1189 } | 1189 } |
1190 | 1190 |
1191 | 1191 |
| 1192 DART_EXPORT Dart_Handle Dart_PortGetId(Dart_Handle port, Dart_Port* port_id) { |
| 1193 Isolate* isolate = Isolate::Current(); |
| 1194 DARTSCOPE(isolate); |
| 1195 CHECK_CALLBACK_STATE(isolate); |
| 1196 const Instance& port_instance = Api::UnwrapInstanceHandle(isolate, port); |
| 1197 if (port_instance.IsNull()) { |
| 1198 RETURN_TYPE_ERROR(isolate, port, Instance); |
| 1199 } |
| 1200 if (!DartLibraryCalls::IsSendPort(port_instance) && |
| 1201 !DartLibraryCalls::IsReceivePort(port_instance)) { |
| 1202 return Api::NewError("expected an instance of RawReceivePort or SendPort."); |
| 1203 } |
| 1204 const Object& idObj = Object::Handle( |
| 1205 DartLibraryCalls::PortGetId(port_instance)); |
| 1206 ASSERT(idObj.IsInteger()); |
| 1207 const Integer& id = Integer::Cast(idObj); |
| 1208 *port_id = static_cast<Dart_Port>(id.AsInt64Value()); |
| 1209 return Api::Success(); |
| 1210 } |
| 1211 |
| 1212 |
1192 DART_EXPORT Dart_Handle Dart_GetReceivePort(Dart_Port port_id) { | 1213 DART_EXPORT Dart_Handle Dart_GetReceivePort(Dart_Port port_id) { |
1193 Isolate* isolate = Isolate::Current(); | 1214 Isolate* isolate = Isolate::Current(); |
1194 DARTSCOPE(isolate); | 1215 DARTSCOPE(isolate); |
1195 CHECK_CALLBACK_STATE(isolate); | 1216 CHECK_CALLBACK_STATE(isolate); |
1196 | 1217 |
1197 Library& isolate_lib = Library::Handle(isolate, Library::IsolateLibrary()); | 1218 Library& isolate_lib = Library::Handle(isolate, Library::IsolateLibrary()); |
1198 ASSERT(!isolate_lib.IsNull()); | 1219 ASSERT(!isolate_lib.IsNull()); |
1199 const String& class_name = String::Handle( | 1220 const String& class_name = String::Handle( |
1200 isolate, isolate_lib.PrivateName(Symbols::_RawReceivePortImpl())); | 1221 isolate, isolate_lib.PrivateName(Symbols::_RawReceivePortImpl())); |
1201 // TODO(asiva): Symbols should contain private keys. | 1222 // TODO(asiva): Symbols should contain private keys. |
1202 const String& function_name = | 1223 const String& function_name = |
1203 String::Handle(isolate_lib.PrivateName(Symbols::_get_or_create())); | 1224 String::Handle(isolate_lib.PrivateName(Symbols::_get())); |
1204 const int kNumArguments = 1; | 1225 const int kNumArguments = 1; |
1205 const Function& function = Function::Handle( | 1226 const Function& function = Function::Handle( |
1206 isolate, | 1227 isolate, |
1207 Resolver::ResolveStatic(isolate_lib, | 1228 Resolver::ResolveStatic(isolate_lib, |
1208 class_name, | 1229 class_name, |
1209 function_name, | 1230 function_name, |
1210 kNumArguments, | 1231 kNumArguments, |
1211 Object::empty_array())); | 1232 Object::empty_array())); |
1212 ASSERT(!function.IsNull()); | 1233 ASSERT(!function.IsNull()); |
1213 const Array& args = Array::Handle(isolate, Array::New(kNumArguments)); | 1234 const Array& args = Array::Handle(isolate, Array::New(kNumArguments)); |
(...skipping 3426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4640 | 4661 |
4641 | 4662 |
4642 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( | 4663 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( |
4643 const char* name, | 4664 const char* name, |
4644 Dart_ServiceRequestCallback callback, | 4665 Dart_ServiceRequestCallback callback, |
4645 void* user_data) { | 4666 void* user_data) { |
4646 Service::RegisterRootEmbedderCallback(name, callback, user_data); | 4667 Service::RegisterRootEmbedderCallback(name, callback, user_data); |
4647 } | 4668 } |
4648 | 4669 |
4649 } // namespace dart | 4670 } // namespace dart |
OLD | NEW |