| 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/dart_entry.h" | 5 #include "vm/dart_entry.h" |
| 6 | 6 |
| 7 #include "vm/code_generator.h" | 7 #include "vm/code_generator.h" |
| 8 #include "vm/compiler.h" | 8 #include "vm/compiler.h" |
| 9 #include "vm/object_store.h" | 9 #include "vm/object_store.h" |
| 10 #include "vm/resolver.h" | 10 #include "vm/resolver.h" |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 const Array& args = Array::Handle(Array::New(kNumArguments)); | 364 const Array& args = Array::Handle(Array::New(kNumArguments)); |
| 365 args.SetAt(0, left); | 365 args.SetAt(0, left); |
| 366 args.SetAt(1, right); | 366 args.SetAt(1, right); |
| 367 const Object& result = Object::Handle(DartEntry::InvokeDynamic(function, | 367 const Object& result = Object::Handle(DartEntry::InvokeDynamic(function, |
| 368 args)); | 368 args)); |
| 369 ASSERT(result.IsInstance() || result.IsError()); | 369 ASSERT(result.IsInstance() || result.IsError()); |
| 370 return result.raw(); | 370 return result.raw(); |
| 371 } | 371 } |
| 372 | 372 |
| 373 | 373 |
| 374 RawObject* DartLibraryCalls::LookupReceivePort(Dart_Port port_id) { | 374 RawObject* DartLibraryCalls::HandleMessage(Dart_Port dest_port_id, |
| 375 Isolate* isolate = Isolate::Current(); | |
| 376 Function& function = | |
| 377 Function::Handle(isolate, | |
| 378 isolate->object_store()->lookup_receive_port_function()); | |
| 379 const int kNumArguments = 1; | |
| 380 if (function.IsNull()) { | |
| 381 Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); | |
| 382 ASSERT(!isolate_lib.IsNull()); | |
| 383 const String& public_class_name = | |
| 384 String::Handle(Symbols::New("_ReceivePortImpl")); | |
| 385 const String& class_name = | |
| 386 String::Handle(isolate_lib.PrivateName(public_class_name)); | |
| 387 const String& function_name = | |
| 388 String::Handle(Symbols::New("_lookupReceivePort")); | |
| 389 const Array& kNoArgumentNames = Array::Handle(); | |
| 390 function = Resolver::ResolveStatic(isolate_lib, | |
| 391 class_name, | |
| 392 function_name, | |
| 393 kNumArguments, | |
| 394 kNoArgumentNames, | |
| 395 Resolver::kIsQualified); | |
| 396 isolate->object_store()->set_lookup_receive_port_function(function); | |
| 397 } | |
| 398 const Array& args = Array::Handle(Array::New(kNumArguments)); | |
| 399 args.SetAt(0, Integer::Handle(Integer::New(port_id))); | |
| 400 const Object& result = | |
| 401 Object::Handle(DartEntry::InvokeStatic(function, args)); | |
| 402 return result.raw(); | |
| 403 } | |
| 404 | |
| 405 | |
| 406 RawObject* DartLibraryCalls::HandleMessage(const Object& receive_port, | |
| 407 Dart_Port reply_port_id, | 375 Dart_Port reply_port_id, |
| 408 const Instance& message) { | 376 const Instance& message) { |
| 409 Isolate* isolate = Isolate::Current(); | 377 Isolate* isolate = Isolate::Current(); |
| 410 Function& function = | 378 Function& function = |
| 411 Function::Handle(isolate, | 379 Function::Handle(isolate, |
| 412 isolate->object_store()->handle_message_function()); | 380 isolate->object_store()->handle_message_function()); |
| 413 const int kNumArguments = 3; | 381 const int kNumArguments = 3; |
| 414 if (function.IsNull()) { | 382 if (function.IsNull()) { |
| 415 Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); | 383 Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); |
| 416 ASSERT(!isolate_lib.IsNull()); | 384 ASSERT(!isolate_lib.IsNull()); |
| 417 const String& public_class_name = | 385 const String& public_class_name = |
| 418 String::Handle(Symbols::New("_ReceivePortImpl")); | 386 String::Handle(Symbols::New("_ReceivePortImpl")); |
| 419 const String& class_name = | 387 const String& class_name = |
| 420 String::Handle(isolate_lib.PrivateName(public_class_name)); | 388 String::Handle(isolate_lib.PrivateName(public_class_name)); |
| 421 const String& function_name = | 389 const String& function_name = |
| 422 String::Handle(Symbols::New("_handleMessage")); | 390 String::Handle(Symbols::New("_handleMessage")); |
| 423 const Array& kNoArgumentNames = Array::Handle(); | 391 const Array& kNoArgumentNames = Array::Handle(); |
| 424 function = Resolver::ResolveStatic(isolate_lib, | 392 function = Resolver::ResolveStatic(isolate_lib, |
| 425 class_name, | 393 class_name, |
| 426 function_name, | 394 function_name, |
| 427 kNumArguments, | 395 kNumArguments, |
| 428 kNoArgumentNames, | 396 kNoArgumentNames, |
| 429 Resolver::kIsQualified); | 397 Resolver::kIsQualified); |
| 430 isolate->object_store()->set_handle_message_function(function); | 398 isolate->object_store()->set_handle_message_function(function); |
| 431 } | 399 } |
| 432 const Array& args = Array::Handle(isolate, Array::New(kNumArguments)); | 400 const Array& args = Array::Handle(isolate, Array::New(kNumArguments)); |
| 433 args.SetAt(0, receive_port); | 401 args.SetAt(0, Integer::Handle(isolate, Integer::New(dest_port_id))); |
| 434 args.SetAt(1, Integer::Handle(isolate, Integer::New(reply_port_id))); | 402 args.SetAt(1, Integer::Handle(isolate, Integer::New(reply_port_id))); |
| 435 args.SetAt(2, message); | 403 args.SetAt(2, message); |
| 436 const Object& result = | 404 const Object& result = |
| 437 Object::Handle(isolate, DartEntry::InvokeStatic(function, args)); | 405 Object::Handle(isolate, DartEntry::InvokeStatic(function, args)); |
| 438 ASSERT(result.IsNull() || result.IsError()); | 406 ASSERT(result.IsNull() || result.IsError()); |
| 439 return result.raw(); | 407 return result.raw(); |
| 440 } | 408 } |
| 441 | 409 |
| 442 | 410 |
| 443 RawObject* DartLibraryCalls::NewSendPort(intptr_t port_id) { | 411 RawObject* DartLibraryCalls::NewSendPort(intptr_t port_id) { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 const String& func_name = String::Handle(Field::GetterName(field_name)); | 455 const String& func_name = String::Handle(Field::GetterName(field_name)); |
| 488 const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name)); | 456 const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name)); |
| 489 ASSERT(!func.IsNull()); | 457 ASSERT(!func.IsNull()); |
| 490 const Array& args = Array::Handle(Array::New(1)); | 458 const Array& args = Array::Handle(Array::New(1)); |
| 491 args.SetAt(0, port); | 459 args.SetAt(0, port); |
| 492 return DartEntry::InvokeDynamic(func, args); | 460 return DartEntry::InvokeDynamic(func, args); |
| 493 } | 461 } |
| 494 | 462 |
| 495 | 463 |
| 496 } // namespace dart | 464 } // namespace dart |
| OLD | NEW |