Index: runtime/lib/isolate.cc |
=================================================================== |
--- runtime/lib/isolate.cc (revision 3862) |
+++ runtime/lib/isolate.cc (working copy) |
@@ -81,7 +81,8 @@ |
} |
-RawInstance* ReceivePortCreate(intptr_t port_id) { |
+// TODO(turnidge): Move to DartLibraryCalls. |
+RawObject* ReceivePortCreate(intptr_t port_id) { |
const String& class_name = |
String::Handle(String::NewSymbol("ReceivePortImpl")); |
const String& function_name = |
@@ -97,18 +98,17 @@ |
Resolver::kIsQualified)); |
GrowableArray<const Object*> arguments(kNumArguments); |
arguments.Add(&Integer::Handle(Integer::New(port_id))); |
- const Instance& result = Instance::Handle( |
+ const Object& result = Object::Handle( |
DartEntry::InvokeStatic(function, arguments, kNoArgumentNames)); |
- if (result.IsError()) { |
- ProcessError(result); |
- } else { |
+ if (!result.IsError()) { |
PortMap::SetLive(port_id); |
} |
return result.raw(); |
} |
-static RawInstance* SendPortCreate(intptr_t port_id) { |
+// TODO(turnidge): Move to DartLibraryCalls. |
+static RawObject* SendPortCreate(intptr_t port_id) { |
const String& class_name = String::Handle(String::NewSymbol("SendPortImpl")); |
const String& function_name = String::Handle(String::NewSymbol("_create")); |
const int kNumArguments = 1; |
@@ -122,7 +122,7 @@ |
Resolver::kIsQualified)); |
GrowableArray<const Object*> arguments(kNumArguments); |
arguments.Add(&Integer::Handle(Integer::New(port_id))); |
- const Instance& result = Instance::Handle( |
+ const Object& result = Object::Handle( |
DartEntry::InvokeStatic(function, arguments, kNoArgumentNames)); |
return result.raw(); |
} |
@@ -184,7 +184,10 @@ |
// TODO(iposva): Proper error checking here. |
ASSERT(!target_function.IsNull()); |
// TODO(iposva): Allocate the proper port number here. |
- const Instance& local_port = Instance::Handle(ReceivePortCreate(port_id)); |
+ const Object& local_port = Object::Handle(ReceivePortCreate(port_id)); |
+ if (local_port.IsError()) { |
+ ProcessError(local_port); |
+ } |
GrowableArray<const Object*> arguments(1); |
arguments.Add(&local_port); |
const Array& kNoArgumentNames = Array::Handle(); |
@@ -330,16 +333,13 @@ |
library_url, |
class_name); |
} |
- const Instance& port = Instance::Handle(SendPortCreate(port_id)); |
+ |
+ // TODO(turnidge): Move this code up before we launch the new |
+ // thread. That way we won't have a thread hanging around that we |
+ // can't talk to. |
+ const Object& port = Object::Handle(SendPortCreate(port_id)); |
if (port.IsError()) { |
- if (port.IsUnhandledException()) { |
- ThrowErrorException(Exceptions::kInternalError, |
- "Unable to create send port to isolate", |
- library_url, |
- class_name); |
- } else { |
- ProcessError(port); |
- } |
+ Exceptions::PropagateError(port); |
} |
arguments->SetReturn(port); |
} |
@@ -349,7 +349,10 @@ |
ASSERT(AbstractTypeArguments::CheckedHandle(arguments->At(0)).IsNull()); |
intptr_t port_id = |
PortMap::CreatePort(arguments->isolate()->message_handler()); |
- const Instance& port = Instance::Handle(ReceivePortCreate(port_id)); |
+ const Object& port = Object::Handle(ReceivePortCreate(port_id)); |
+ if (port.IsError()) { |
+ Exceptions::PropagateError(port); |
+ } |
arguments->SetReturn(port); |
} |