Index: runtime/vm/dart_entry.cc |
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc |
index 493af6ccdd6168447edc24eb8844dc32d6c39f3f..db4ecb02a1e2bfab9289f9a1f6bdf566404198bc 100644 |
--- a/runtime/vm/dart_entry.cc |
+++ b/runtime/vm/dart_entry.cc |
@@ -283,7 +283,33 @@ RawObject* DartLibraryCalls::Equals(const Instance& left, |
} |
-RawObject* DartLibraryCalls::HandleMessage(Dart_Port dest_port_id, |
+RawObject* DartLibraryCalls::LookupReceivePort(Dart_Port port_id) { |
+ Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); |
+ ASSERT(!isolate_lib.IsNull()); |
+ const String& public_class_name = |
+ String::Handle(Symbols::New("_ReceivePortImpl")); |
+ const String& class_name = |
+ String::Handle(isolate_lib.PrivateName(public_class_name)); |
+ const String& function_name = |
+ String::Handle(Symbols::New("_lookupReceivePort")); |
+ const int kNumArguments = 1; |
+ const Array& kNoArgumentNames = Array::Handle(); |
+ const Function& function = Function::Handle( |
+ Resolver::ResolveStatic(isolate_lib, |
+ class_name, |
+ function_name, |
+ kNumArguments, |
+ kNoArgumentNames, |
+ Resolver::kIsQualified)); |
+ GrowableArray<const Object*> arguments(kNumArguments); |
+ arguments.Add(&Integer::Handle(Integer::New(port_id))); |
+ const Object& result = Object::Handle( |
+ DartEntry::InvokeStatic(function, arguments, kNoArgumentNames)); |
+ return result.raw(); |
+} |
+ |
+ |
+RawObject* DartLibraryCalls::HandleMessage(const Object& receive_port, |
Dart_Port reply_port_id, |
const Instance& message) { |
Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); |
@@ -304,7 +330,7 @@ RawObject* DartLibraryCalls::HandleMessage(Dart_Port dest_port_id, |
kNoArgumentNames, |
Resolver::kIsQualified)); |
GrowableArray<const Object*> arguments(kNumArguments); |
- arguments.Add(&Integer::Handle(Integer::New(dest_port_id))); |
+ arguments.Add(&receive_port); |
arguments.Add(&Integer::Handle(Integer::New(reply_port_id))); |
arguments.Add(&message); |
const Object& result = Object::Handle( |