Chromium Code Reviews| Index: runtime/vm/dart_api_impl.cc |
| =================================================================== |
| --- runtime/vm/dart_api_impl.cc (revision 1762) |
| +++ runtime/vm/dart_api_impl.cc (working copy) |
| @@ -601,7 +601,7 @@ |
| const String& class_name = |
| String::Handle(String::NewSymbol("ReceivePortImpl")); |
| const String& function_name = |
| - String::Handle(String::NewSymbol("handleMessage_")); |
| + String::Handle(String::NewSymbol("_handleMessage")); |
| const int kNumArguments = 3; |
| const Array& kNoArgumentNames = Array::Handle(); |
| const Function& function = Function::Handle( |
| @@ -644,6 +644,29 @@ |
| } |
| +DART_EXPORT bool Dart_IsolateHasActivePorts() { |
| + // TODO(turnidge): before submitting turn this into a straight field access |
| + // instead of a static method call? |
| + Dart_EnterScope(); |
| + Dart_Handle lib = Dart_LookupLibrary(Dart_NewString("dart:coreimpl")); |
| + if (Dart_IsError(lib)) { |
| + return lib; |
| + } |
| + Dart_Handle count = Dart_InvokeStatic(lib, |
| + Dart_NewString("ReceivePortImpl"), |
| + Dart_NewString("_getNumLivePorts"), |
| + 0, |
| + NULL); |
| + DART_CHECK_VALID(count); |
| + int64_t count_value = 0; |
| + Dart_Handle result = Dart_IntegerValue(count, &count_value); |
| + DART_CHECK_VALID(result); |
| + Dart_ExitScope(); |
| + |
| + return count_value > 0; |
| +} |
| + |
| + |
| static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) { |
| void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size); |
| return reinterpret_cast<uint8_t*>(new_ptr); |
| @@ -674,6 +697,56 @@ |
| } |
| +DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port) { |
| + // TODO(turnidge): before submitting consider grabbing the impl of this from |
| + // lib/isolate.cc instead and sharing the code. |
| + Dart_Handle lib = Dart_LookupLibrary(Dart_NewString("dart:coreimpl")); |
| + if (Dart_IsError(lib)) { |
| + return lib; |
| + } |
| + Dart_Handle arg = Dart_NewInteger(port); |
| + if (Dart_IsError(arg)) { |
| + return arg; |
| + } |
| + Dart_Handle sp_args[1]; |
| + sp_args[0] = arg; |
| + Dart_Handle send_port = Dart_InvokeStatic(lib, |
| + Dart_NewString("SendPortImpl"), |
| + Dart_NewString("_create"), |
| + 1, |
| + sp_args); |
| + return send_port; |
| +} |
| + |
| + |
| +DART_EXPORT Dart_Handle Dart_NewReceivePort(Dart_Port port) { |
| + // TODO(turnidge): before submitting consider grabbing the impl of this from |
| + // lib/isolate.cc instead and sharing the code. |
| + Dart_Handle lib = Dart_LookupLibrary(Dart_NewString("dart:coreimpl")); |
| + if (Dart_IsError(lib)) { |
| + return lib; |
| + } |
| + Dart_Handle arg = Dart_NewInteger(port); |
| + if (Dart_IsError(arg)) { |
| + return arg; |
| + } |
| + Dart_Handle rp_args[1]; |
| + rp_args[0] = arg; |
| + Dart_Handle recv_port = Dart_InvokeStatic(lib, |
| + Dart_NewString("ReceivePortImpl"), |
| + Dart_NewString("_create"), |
| + 1, |
| + rp_args); |
| + return recv_port; |
| +} |
| + |
| + |
| +DART_EXPORT Dart_Port Dart_GetMainPort() { |
| + Isolate* isolate = Isolate::Current(); |
| + ASSERT(isolate); |
| + return isolate->main_port(); |
| +} |
| + |
| // --- Scopes ---- |
| @@ -837,6 +910,7 @@ |
| return Api::Error("Integer too big to fit in int64_t"); |
| } |
| } |
| + OS::Print("%s\n", obj.ToCString()); |
|
Anton Muhin
2011/11/23 19:28:14
nit: debugging stuff
turnidge
2011/11/23 21:45:37
Oops, thanks.
|
| return Api::Error("Object is not a Integer"); |
| } |