Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/bootstrap_natives.h" | 5 #include "vm/bootstrap_natives.h" |
| 6 | 6 |
| 7 #include "vm/assert.h" | 7 #include "vm/assert.h" |
| 8 #include "vm/class_finalizer.h" | 8 #include "vm/class_finalizer.h" |
| 9 #include "vm/dart.h" | 9 #include "vm/dart.h" |
| 10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 80 str ^= String::Concat(str, name); | 80 str ^= String::Concat(str, name); |
| 81 GrowableArray<const Object*> arguments(1); | 81 GrowableArray<const Object*> arguments(1); |
| 82 arguments.Add(&str); | 82 arguments.Add(&str); |
| 83 Exceptions::ThrowByType(type, arguments); | 83 Exceptions::ThrowByType(type, arguments); |
| 84 } | 84 } |
| 85 | 85 |
| 86 | 86 |
| 87 RawInstance* ReceivePortCreate(intptr_t port_id) { | 87 RawInstance* ReceivePortCreate(intptr_t port_id) { |
| 88 const String& class_name = | 88 const String& class_name = |
| 89 String::Handle(String::NewSymbol("ReceivePortImpl")); | 89 String::Handle(String::NewSymbol("ReceivePortImpl")); |
| 90 const String& function_name = String::Handle(String::NewSymbol("create_")); | 90 const String& function_name = String::Handle(String::NewSymbol("_create")); |
| 91 const int kNumArguments = 1; | 91 const int kNumArguments = 1; |
| 92 const Array& kNoArgumentNames = Array::Handle(); | 92 const Array& kNoArgumentNames = Array::Handle(); |
| 93 const Function& function = Function::Handle( | 93 const Function& function = Function::Handle( |
| 94 Resolver::ResolveStatic(Library::Handle(Library::CoreLibrary()), | 94 Resolver::ResolveStatic(Library::Handle(Library::CoreLibrary()), |
| 95 class_name, | 95 class_name, |
| 96 function_name, | 96 function_name, |
| 97 kNumArguments, | 97 kNumArguments, |
| 98 kNoArgumentNames, | 98 kNoArgumentNames, |
| 99 Resolver::kIsQualified)); | 99 Resolver::kIsQualified)); |
| 100 GrowableArray<const Object*> arguments(kNumArguments); | 100 GrowableArray<const Object*> arguments(kNumArguments); |
| 101 arguments.Add(&Integer::Handle(Integer::New(port_id))); | 101 arguments.Add(&Integer::Handle(Integer::New(port_id))); |
| 102 const Instance& result = Instance::Handle( | 102 const Instance& result = Instance::Handle( |
| 103 DartEntry::InvokeStatic(function, arguments, kNoArgumentNames)); | 103 DartEntry::InvokeStatic(function, arguments, kNoArgumentNames)); |
| 104 if (result.IsUnhandledException()) { | 104 if (result.IsUnhandledException()) { |
| 105 UnhandledException& uhe = UnhandledException::Handle(); | 105 UnhandledException& uhe = UnhandledException::Handle(); |
| 106 uhe ^= result.raw(); | 106 uhe ^= result.raw(); |
| 107 ProcessUnhandledException(uhe); | 107 ProcessUnhandledException(uhe); |
| 108 } else { | |
| 109 PortMap::SetLive(port_id); | |
|
siva
2011/11/29 19:50:27
I think we should add a comment that a port once i
turnidge
2011/12/05 17:53:34
Added comment in port.h.
On 2011/11/29 19:50:27,
| |
| 108 } | 110 } |
| 109 return result.raw(); | 111 return result.raw(); |
| 110 } | 112 } |
| 111 | 113 |
| 112 | 114 |
| 113 static RawInstance* SendPortCreate(intptr_t port_id) { | 115 static RawInstance* SendPortCreate(intptr_t port_id) { |
| 114 const String& class_name = String::Handle(String::NewSymbol("SendPortImpl")); | 116 const String& class_name = String::Handle(String::NewSymbol("SendPortImpl")); |
| 115 const String& function_name = String::Handle(String::NewSymbol("create_")); | 117 const String& function_name = String::Handle(String::NewSymbol("_create")); |
| 116 const int kNumArguments = 1; | 118 const int kNumArguments = 1; |
| 117 const Array& kNoArgumentNames = Array::Handle(); | 119 const Array& kNoArgumentNames = Array::Handle(); |
| 118 const Function& function = Function::Handle( | 120 const Function& function = Function::Handle( |
| 119 Resolver::ResolveStatic(Library::Handle(Library::CoreLibrary()), | 121 Resolver::ResolveStatic(Library::Handle(Library::CoreLibrary()), |
| 120 class_name, | 122 class_name, |
| 121 function_name, | 123 function_name, |
| 122 kNumArguments, | 124 kNumArguments, |
| 123 kNoArgumentNames, | 125 kNoArgumentNames, |
| 124 Resolver::kIsQualified)); | 126 Resolver::kIsQualified)); |
| 125 GrowableArray<const Object*> arguments(kNumArguments); | 127 GrowableArray<const Object*> arguments(kNumArguments); |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 269 spawned_isolate->set_long_jump_base(&jump); | 271 spawned_isolate->set_long_jump_base(&jump); |
| 270 if (setjmp(*jump.Set()) == 0) { | 272 if (setjmp(*jump.Set()) == 0) { |
| 271 Dart::InitializeIsolate(NULL, preserved_isolate->init_callback_data()); | 273 Dart::InitializeIsolate(NULL, preserved_isolate->init_callback_data()); |
| 272 } else { | 274 } else { |
| 273 init_successful = false; | 275 init_successful = false; |
| 274 } | 276 } |
| 275 spawned_isolate->set_long_jump_base(base); | 277 spawned_isolate->set_long_jump_base(base); |
| 276 // Check arguments to see if the specified library and classes are | 278 // Check arguments to see if the specified library and classes are |
| 277 // loaded, this check will throw an exception if they are not loaded. | 279 // loaded, this check will throw an exception if they are not loaded. |
| 278 if (init_successful && CheckArguments(library_url, class_name)) { | 280 if (init_successful && CheckArguments(library_url, class_name)) { |
| 279 port_id = PortMap::CreatePort(); | 281 port_id = spawned_isolate->main_port(); |
| 280 uword data = reinterpret_cast<uword>( | 282 uword data = reinterpret_cast<uword>( |
| 281 new IsolateStartData(spawned_isolate, | 283 new IsolateStartData(spawned_isolate, |
| 282 strdup(library_url), | 284 strdup(library_url), |
| 283 strdup(class_name), | 285 strdup(class_name), |
| 284 port_id)); | 286 port_id)); |
| 285 new Thread(RunIsolate, data); | 287 new Thread(RunIsolate, data); |
| 286 } else { | 288 } else { |
| 287 // Error spawning the isolate, maybe due to initialization errors or | 289 // Error spawning the isolate, maybe due to initialization errors or |
| 288 // errors while loading the application into spawned isolate, shut | 290 // errors while loading the application into spawned isolate, shut |
| 289 // it down and report error. | 291 // it down and report error. |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 347 intptr_t send_id = Smi::CheckedHandle(arguments->At(0)).Value(); | 349 intptr_t send_id = Smi::CheckedHandle(arguments->At(0)).Value(); |
| 348 intptr_t reply_id = Smi::CheckedHandle(arguments->At(1)).Value(); | 350 intptr_t reply_id = Smi::CheckedHandle(arguments->At(1)).Value(); |
| 349 // TODO(iposva): Allow for arbitrary messages to be sent. | 351 // TODO(iposva): Allow for arbitrary messages to be sent. |
| 350 void* data = SerializeObject(Instance::CheckedHandle(arguments->At(2))); | 352 void* data = SerializeObject(Instance::CheckedHandle(arguments->At(2))); |
| 351 | 353 |
| 352 // TODO(turnidge): Throw an exception when the return value is false? | 354 // TODO(turnidge): Throw an exception when the return value is false? |
| 353 PortMap::PostMessage(send_id, reply_id, data); | 355 PortMap::PostMessage(send_id, reply_id, data); |
| 354 } | 356 } |
| 355 | 357 |
| 356 } // namespace dart | 358 } // namespace dart |
| OLD | NEW |