Index: runtime/lib/isolate.cc |
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc |
index dc5279824024337979b7a34babd3307d92ddc72c..700256053770e6a47ab0afc676b74d90fc52f220 100644 |
--- a/runtime/lib/isolate.cc |
+++ b/runtime/lib/isolate.cc |
@@ -8,6 +8,7 @@ |
#include "vm/class_finalizer.h" |
#include "vm/dart.h" |
#include "vm/dart_api_impl.h" |
+#include "vm/dart_api_message.h" |
#include "vm/dart_entry.h" |
#include "vm/exceptions.h" |
#include "vm/lockers.h" |
@@ -106,18 +107,22 @@ DEFINE_NATIVE_ENTRY(SendPortImpl_sendInternal_, 2) { |
// TODO(iposva): Allow for arbitrary messages to be sent. |
GET_NON_NULL_NATIVE_ARGUMENT(Instance, obj, arguments->NativeArgAt(1)); |
- uint8_t* data = NULL; |
- |
const Dart_Port destination_port_id = port.Id(); |
const bool can_send_any_object = isolate->origin_id() == port.origin_id(); |
- MessageWriter writer(&data, &allocator, can_send_any_object); |
- writer.WriteMessage(obj); |
- |
- // TODO(turnidge): Throw an exception when the return value is false? |
- PortMap::PostMessage(new Message(destination_port_id, |
- data, writer.BytesWritten(), |
- Message::kNormalPriority)); |
+ if (ApiObjectConverter::CanConvert(obj.raw())) { |
+ PortMap::PostMessage(new Message( |
+ destination_port_id, obj.raw(), Message::kNormalPriority)); |
+ } else { |
+ uint8_t* data = NULL; |
+ MessageWriter writer(&data, &allocator, can_send_any_object); |
+ writer.WriteMessage(obj); |
+ |
+ // TODO(turnidge): Throw an exception when the return value is false? |
+ PortMap::PostMessage(new Message(destination_port_id, |
+ data, writer.BytesWritten(), |
+ Message::kNormalPriority)); |
+ } |
return Object::null(); |
} |