Index: runtime/vm/service.cc |
=================================================================== |
--- runtime/vm/service.cc (revision 35287) |
+++ runtime/vm/service.cc (working copy) |
@@ -158,26 +158,16 @@ |
Isolate* isolate = arguments->isolate(); |
StackZone zone(isolate); |
HANDLESCOPE(isolate); |
- GET_NON_NULL_NATIVE_ARGUMENT(Instance, sp, arguments->NativeArgAt(0)); |
+ GET_NON_NULL_NATIVE_ARGUMENT(SendPort, sp, arguments->NativeArgAt(0)); |
GET_NON_NULL_NATIVE_ARGUMENT(Instance, message, arguments->NativeArgAt(1)); |
- // Extract SendPort port id. |
- const Object& sp_id_obj = Object::Handle(DartLibraryCalls::PortGetId(sp)); |
- if (sp_id_obj.IsError()) { |
- Exceptions::PropagateError(Error::Cast(sp_id_obj)); |
- } |
- Integer& id = Integer::Handle(isolate); |
- id ^= sp_id_obj.raw(); |
- Dart_Port sp_id = static_cast<Dart_Port>(id.AsInt64Value()); |
- ASSERT(sp_id != ILLEGAL_PORT); |
- |
// Serialize message. |
uint8_t* data = NULL; |
MessageWriter writer(&data, &allocator); |
writer.WriteMessage(message); |
// TODO(turnidge): Throw an exception when the return value is false? |
- PortMap::PostMessage(new Message(sp_id, data, writer.BytesWritten(), |
+ PortMap::PostMessage(new Message(sp.Id(), data, writer.BytesWritten(), |
Message::kOOBPriority)); |
} |
@@ -241,13 +231,10 @@ |
const Object& unwrapped_rp = Object::Handle(Api::UnwrapHandle(receivePort)); |
const Instance& rp = Instance::Cast(unwrapped_rp); |
// Extract RawReceivePort port id. |
- const Object& rp_id_obj = Object::Handle(DartLibraryCalls::PortGetId(rp)); |
- if (rp_id_obj.IsError()) { |
+ if (!rp.IsReceivePort()) { |
return ILLEGAL_PORT; |
} |
- ASSERT(rp_id_obj.IsSmi() || rp_id_obj.IsMint()); |
- const Integer& id = Integer::Cast(rp_id_obj); |
- return static_cast<Dart_Port>(id.AsInt64Value()); |
+ return ReceivePort::Cast(rp).Id(); |
} |
@@ -262,9 +249,7 @@ |
ASSERT(!list.IsNull()); |
const Integer& code_int = Integer::Handle(Integer::New(code)); |
const Integer& port_int = Integer::Handle(Integer::New(port_id)); |
- const Object& send_port = Object::Handle( |
- DartLibraryCalls::NewSendPort(port_id)); |
- ASSERT(!send_port.IsNull()); |
+ const SendPort& send_port = SendPort::Handle(SendPort::New(port_id)); |
list.SetAt(0, code_int); |
list.SetAt(1, port_int); |
list.SetAt(2, send_port); |
@@ -305,9 +290,7 @@ |
intptr_t port_id = isolate->main_port(); |
const Integer& port_int = Integer::Handle(Integer::New(port_id)); |
ASSERT(!port_int.IsNull()); |
- const Object& send_port = Object::Handle( |
- DartLibraryCalls::NewSendPort(port_id)); |
- ASSERT(!send_port.IsNull()); |
+ const SendPort& send_port = SendPort::Handle(SendPort::New(port_id)); |
const String& name = String::Handle(String::New(isolate->name())); |
ASSERT(!name.IsNull()); |
const Array& args = Array::Handle(Array::New(3)); |
@@ -661,6 +644,10 @@ |
// Same number of option keys as values. |
ASSERT(option_keys.Length() == option_values.Length()); |
+ if (!reply_port.IsSendPort()) { |
+ FATAL("SendPort expected."); |
+ } |
+ |
String& path_segment = String::Handle(); |
if (path.Length() > 0) { |
path_segment ^= path.At(0); |
@@ -674,7 +661,8 @@ |
FindIsolateMessageHandler(path_segment_c); |
{ |
JSONStream js; |
- js.Setup(zone.GetZone(), reply_port, path, option_keys, option_values); |
+ js.Setup(zone.GetZone(), SendPort::Cast(reply_port).Id(), |
+ path, option_keys, option_values); |
if (handler == NULL) { |
// Check for an embedder handler. |
EmbedderServiceHandler* e_handler = |
@@ -1758,6 +1746,7 @@ |
GrowableObjectArray& path = GrowableObjectArray::Handle(isolate); |
GrowableObjectArray& option_keys = GrowableObjectArray::Handle(isolate); |
GrowableObjectArray& option_values = GrowableObjectArray::Handle(isolate); |
+ |
reply_port ^= message.At(0); |
path ^= message.At(1); |
option_keys ^= message.At(2); |
@@ -1771,6 +1760,10 @@ |
// Same number of option keys as values. |
ASSERT(option_keys.Length() == option_values.Length()); |
+ if (!reply_port.IsSendPort()) { |
+ FATAL("SendPort expected."); |
+ } |
+ |
String& path_segment = String::Handle(); |
if (path.Length() > 0) { |
path_segment ^= path.At(0); |
@@ -1784,7 +1777,8 @@ |
FindRootMessageHandler(path_segment_c); |
{ |
JSONStream js; |
- js.Setup(zone.GetZone(), reply_port, path, option_keys, option_values); |
+ js.Setup(zone.GetZone(), SendPort::Cast(reply_port).Id(), |
+ path, option_keys, option_values); |
if (handler == NULL) { |
// Check for an embedder handler. |
EmbedderServiceHandler* e_handler = |