Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: runtime/vm/dart_api_impl.cc

Issue 243973002: - Add a minimal implementation of Capability. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 1213 matching lines...) Expand 10 before | Expand all | Expand 10 after
1224 intptr_t len = writer.BytesWritten(); 1224 intptr_t len = writer.BytesWritten();
1225 return PortMap::PostMessage(new Message( 1225 return PortMap::PostMessage(new Message(
1226 port_id, data, len, Message::kNormalPriority)); 1226 port_id, data, len, Message::kNormalPriority));
1227 } 1227 }
1228 1228
1229 1229
1230 DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id) { 1230 DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id) {
1231 Isolate* isolate = Isolate::Current(); 1231 Isolate* isolate = Isolate::Current();
1232 DARTSCOPE(isolate); 1232 DARTSCOPE(isolate);
1233 CHECK_CALLBACK_STATE(isolate); 1233 CHECK_CALLBACK_STATE(isolate);
1234 return Api::NewHandle(isolate, DartLibraryCalls::NewSendPort(port_id)); 1234 return Api::NewHandle(isolate, SendPort::New(port_id));
1235 } 1235 }
1236 1236
1237 1237
1238 DART_EXPORT Dart_Handle Dart_PortGetId(Dart_Handle port, Dart_Port* port_id) { 1238 DART_EXPORT Dart_Handle Dart_ReceivePortGetId(Dart_Handle port,
1239 Dart_Port* port_id) {
1239 Isolate* isolate = Isolate::Current(); 1240 Isolate* isolate = Isolate::Current();
1240 DARTSCOPE(isolate); 1241 DARTSCOPE(isolate);
1241 CHECK_CALLBACK_STATE(isolate); 1242 CHECK_CALLBACK_STATE(isolate);
1242 const Instance& port_instance = Api::UnwrapInstanceHandle(isolate, port); 1243 const ReceivePort& receive_port = Api::UnwrapReceivePortHandle(isolate, port);
1243 if (port_instance.IsNull()) { 1244 if (receive_port.IsNull()) {
1244 RETURN_TYPE_ERROR(isolate, port, Instance); 1245 RETURN_TYPE_ERROR(isolate, port, ReceivePort);
1245 } 1246 }
siva 2014/04/23 00:20:31 Missing check: if (port_id == NULL) { RETURN_NU
Ivan Posva 2014/04/23 19:43:35 Done.
1246 if (!DartLibraryCalls::IsSendPort(port_instance) && 1247 *port_id = static_cast<Dart_Port>(receive_port.Id());
1247 !DartLibraryCalls::IsReceivePort(port_instance)) { 1248 ASSERT(*port_id != 0);
siva 2014/04/23 00:20:31 Maybe this assert needs to be inside 'Id()' ?
Ivan Posva 2014/04/23 19:43:35 ASSERT was unnecessary.
1248 return Api::NewError("expected an instance of RawReceivePort or SendPort.");
1249 }
1250 const Object& idObj = Object::Handle(
1251 DartLibraryCalls::PortGetId(port_instance));
1252 ASSERT(idObj.IsInteger());
1253 const Integer& id = Integer::Cast(idObj);
1254 *port_id = static_cast<Dart_Port>(id.AsInt64Value());
1255 return Api::Success(); 1249 return Api::Success();
1256 } 1250 }
1257 1251
1258 1252
1259 DART_EXPORT Dart_Handle Dart_GetReceivePort(Dart_Port port_id) { 1253 DART_EXPORT Dart_Handle Dart_GetReceivePort(Dart_Port port_id) {
1260 Isolate* isolate = Isolate::Current(); 1254 Isolate* isolate = Isolate::Current();
1261 DARTSCOPE(isolate); 1255 DARTSCOPE(isolate);
1262 CHECK_CALLBACK_STATE(isolate); 1256 CHECK_CALLBACK_STATE(isolate);
1263 1257
1264 Library& isolate_lib = Library::Handle(isolate, Library::IsolateLibrary()); 1258 Library& isolate_lib = Library::Handle(isolate, Library::IsolateLibrary());
(...skipping 18 matching lines...) Expand all
1283 } 1277 }
1284 1278
1285 1279
1286 DART_EXPORT Dart_Port Dart_GetMainPortId() { 1280 DART_EXPORT Dart_Port Dart_GetMainPortId() {
1287 Isolate* isolate = Isolate::Current(); 1281 Isolate* isolate = Isolate::Current();
1288 CHECK_ISOLATE(isolate); 1282 CHECK_ISOLATE(isolate);
1289 return isolate->main_port(); 1283 return isolate->main_port();
1290 } 1284 }
1291 1285
1292 1286
1293 DART_EXPORT Dart_Handle Dart_PostMessage(Dart_Handle send_port, 1287 DART_EXPORT Dart_Handle Dart_PostMessage(Dart_Handle port,
1294 Dart_Handle object) { 1288 Dart_Handle object) {
1295 Isolate* isolate = Isolate::Current(); 1289 Isolate* isolate = Isolate::Current();
1296 DARTSCOPE(isolate); 1290 DARTSCOPE(isolate);
1297 Instance& port_instance = Instance::Handle(); 1291 const SendPort& send_port = Api::UnwrapSendPortHandle(isolate, port);
1298 port_instance ^= Api::UnwrapHandle(send_port); 1292 if (send_port.IsNull()) {
1299 if (!DartLibraryCalls::IsSendPort(port_instance)) { 1293 RETURN_TYPE_ERROR(isolate, port, SendPort);
1300 return Api::NewError("send_port is not a SendPort.");
1301 } 1294 }
1302 const Object& idObj = Object::Handle( 1295 Dart_Port port_id = static_cast<Dart_Port>(send_port.Id());
1303 DartLibraryCalls::PortGetId(port_instance));
1304 ASSERT(!idObj.IsError());
1305 Integer& id = Integer::Handle();
1306 id ^= idObj.raw();
1307 Dart_Port port = static_cast<Dart_Port>(id.AsInt64Value());
1308 uint8_t* data = NULL; 1296 uint8_t* data = NULL;
1309 MessageWriter writer(&data, &allocator); 1297 MessageWriter writer(&data, &allocator);
1310 Object& msg_object = Object::Handle(Api::UnwrapHandle(object)); 1298 Object& msg_object = Object::Handle(Api::UnwrapHandle(object));
1311 writer.WriteMessage(msg_object); 1299 writer.WriteMessage(msg_object);
1312 intptr_t len = writer.BytesWritten(); 1300 intptr_t len = writer.BytesWritten();
1313 bool r = PortMap::PostMessage( 1301 bool r = PortMap::PostMessage(
1314 new Message(port, data, len, Message::kNormalPriority)); 1302 new Message(port_id, data, len, Message::kNormalPriority));
1315 if (r) { 1303 if (r) {
1316 return Api::Success(); 1304 return Api::Success();
1317 } 1305 }
1318 return Api::NewError("Dart_PostMessage failed."); 1306 return Api::NewError("Dart_PostMessage failed.");
1319 } 1307 }
1320 1308
1321 // --- Scopes ---- 1309 // --- Scopes ----
1322 1310
1323 DART_EXPORT void Dart_EnterScope() { 1311 DART_EXPORT void Dart_EnterScope() {
1324 Isolate* isolate = Isolate::Current(); 1312 Isolate* isolate = Isolate::Current();
(...skipping 3387 matching lines...) Expand 10 before | Expand all | Expand 10 after
4712 4700
4713 4701
4714 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( 4702 DART_EXPORT void Dart_RegisterRootServiceRequestCallback(
4715 const char* name, 4703 const char* name,
4716 Dart_ServiceRequestCallback callback, 4704 Dart_ServiceRequestCallback callback,
4717 void* user_data) { 4705 void* user_data) {
4718 Service::RegisterRootEmbedderCallback(name, callback, user_data); 4706 Service::RegisterRootEmbedderCallback(name, callback, user_data);
4719 } 4707 }
4720 4708
4721 } // namespace dart 4709 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698