Chromium Code Reviews| Index: runtime/lib/isolate.cc |
| =================================================================== |
| --- runtime/lib/isolate.cc (revision 16317) |
| +++ runtime/lib/isolate.cc (working copy) |
| @@ -51,27 +51,35 @@ |
| // TODO(turnidge): Move to DartLibraryCalls. |
| -RawObject* ReceivePortCreate(intptr_t 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("_get_or_create")); |
| +static RawObject* ReceivePortCreate(intptr_t port_id) { |
| + Isolate* isolate = Isolate::Current(); |
| + Function& func = Function::Handle(isolate); |
|
Ivan Posva
2012/12/19 19:11:31
We tend to write this kind of code this way:
Func
Florian Schneider
2012/12/20 12:42:25
Done.
|
| const int kNumArguments = 1; |
| - const Array& kNoArgumentNames = Array::Handle(); |
| - const Function& func = 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(func, args)); |
| + if (isolate->object_store()->receive_port_create_function() != |
| + Function::null()) { |
| + func = isolate->object_store()->receive_port_create_function(); |
| + } else { |
| + 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("_get_or_create")); |
| + const Array& kNoArgumentNames = Array::Handle(); |
| + func = Resolver::ResolveStatic(isolate_lib, |
| + class_name, |
| + function_name, |
| + kNumArguments, |
| + kNoArgumentNames, |
| + Resolver::kIsQualified); |
| + isolate->object_store()->set_receive_port_create_function(func); |
| + } |
| + const Array& args = Array::Handle(isolate, Array::New(kNumArguments)); |
| + args.SetAt(0, Integer::Handle(isolate, Integer::New(port_id))); |
| + const Object& result = |
| + Object::Handle(isolate, DartEntry::InvokeStatic(func, args)); |
| if (!result.IsError()) { |
| PortMap::SetLive(port_id); |
| } |