Index: runtime/vm/dart_entry.cc |
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc |
index 035440d859782b10037b327ffb158c0720d339ee..6b3856dee2936b3a68db70d2c236afaf7574561f 100644 |
--- a/runtime/vm/dart_entry.cc |
+++ b/runtime/vm/dart_entry.cc |
@@ -318,7 +318,33 @@ RawObject* DartLibraryCalls::Equals(const Instance& left, |
} |
-RawObject* DartLibraryCalls::HandleMessage(Dart_Port dest_port_id, |
+RawObject* DartLibraryCalls::LookupReceivePort(Dart_Port port_id) { |
Ivan Posva
2012/12/20 17:19:43
Please coordinate with +fschneider as he has relev
|
+ 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)); |
+ const Array& args = Array::Handle(Array::New(kNumArguments)); |
+ args.SetAt(0, Integer::Handle(Integer::New(port_id))); |
+ const Object& result = |
+ Object::Handle(DartEntry::InvokeStatic(function, args)); |
+ 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()); |
@@ -339,11 +365,11 @@ RawObject* DartLibraryCalls::HandleMessage(Dart_Port dest_port_id, |
kNoArgumentNames, |
Resolver::kIsQualified)); |
const Array& args = Array::Handle(Array::New(kNumArguments)); |
- args.SetAt(0, Integer::Handle(Integer::New(dest_port_id))); |
+ args.SetAt(0, receive_port); |
args.SetAt(1, Integer::Handle(Integer::New(reply_port_id))); |
args.SetAt(2, message); |
- const Object& result = Object::Handle(DartEntry::InvokeStatic(function, |
- args)); |
+ const Object& result = Object::Handle( |
+ DartEntry::InvokeStatic(function, args)); |
ASSERT(result.IsNull() || result.IsError()); |
return result.raw(); |
} |