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/debugger.h" | 9 #include "vm/debugger.h" |
10 #include "vm/object_store.h" | 10 #include "vm/object_store.h" |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 RawObject* DartEntry::InvokeNoSuchMethod(const Instance& receiver, | 112 RawObject* DartEntry::InvokeNoSuchMethod(const Instance& receiver, |
113 const String& target_name, | 113 const String& target_name, |
114 const Array& arguments, | 114 const Array& arguments, |
115 const Array& arguments_descriptor) { | 115 const Array& arguments_descriptor) { |
116 ASSERT(receiver.raw() == arguments.At(0)); | 116 ASSERT(receiver.raw() == arguments.At(0)); |
117 // Allocate an Invocation object. | 117 // Allocate an Invocation object. |
118 const Library& core_lib = Library::Handle(Library::CoreLibrary()); | 118 const Library& core_lib = Library::Handle(Library::CoreLibrary()); |
119 | 119 |
120 Class& invocation_mirror_class = Class::Handle( | 120 Class& invocation_mirror_class = Class::Handle( |
121 core_lib.LookupClass( | 121 core_lib.LookupClass( |
122 String::Handle(core_lib.PrivateName(Symbols::InvocationMirror())))); | 122 String::Handle(core_lib.PrivateName(Symbols::InvocationMirror())), |
| 123 NULL)); // No ambiguity error expected. |
123 ASSERT(!invocation_mirror_class.IsNull()); | 124 ASSERT(!invocation_mirror_class.IsNull()); |
124 const String& function_name = | 125 const String& function_name = |
125 String::Handle(core_lib.PrivateName(Symbols::AllocateInvocationMirror())); | 126 String::Handle(core_lib.PrivateName(Symbols::AllocateInvocationMirror())); |
126 const Function& allocation_function = Function::Handle( | 127 const Function& allocation_function = Function::Handle( |
127 Resolver::ResolveStaticByName(invocation_mirror_class, | 128 Resolver::ResolveStaticByName(invocation_mirror_class, |
128 function_name, | 129 function_name, |
129 Resolver::kIsQualified)); | 130 Resolver::kIsQualified)); |
130 ASSERT(!allocation_function.IsNull()); | 131 ASSERT(!allocation_function.IsNull()); |
131 const int kNumAllocationArgs = 3; | 132 const int kNumAllocationArgs = 3; |
132 const Array& allocation_args = Array::Handle(Array::New(kNumAllocationArgs)); | 133 const Array& allocation_args = Array::Handle(Array::New(kNumAllocationArgs)); |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 for (int i = 0; i < kCachedDescriptorCount; i++) { | 349 for (int i = 0; i < kCachedDescriptorCount; i++) { |
349 cached_args_descriptors_[i] = ArgumentsDescriptor::NewNonCached(i, false); | 350 cached_args_descriptors_[i] = ArgumentsDescriptor::NewNonCached(i, false); |
350 } | 351 } |
351 } | 352 } |
352 | 353 |
353 | 354 |
354 RawObject* DartLibraryCalls::InstanceCreate(const Library& lib, | 355 RawObject* DartLibraryCalls::InstanceCreate(const Library& lib, |
355 const String& class_name, | 356 const String& class_name, |
356 const String& constructor_name, | 357 const String& constructor_name, |
357 const Array& arguments) { | 358 const Array& arguments) { |
358 const Class& cls = Class::Handle(lib.LookupClassAllowPrivate(class_name)); | 359 const Class& cls = Class::Handle( |
| 360 lib.LookupClassAllowPrivate(class_name, NULL)); // No ambiguity expected. |
359 ASSERT(!cls.IsNull()); | 361 ASSERT(!cls.IsNull()); |
360 // For now, we only support a non-parameterized or raw type. | 362 // For now, we only support a non-parameterized or raw type. |
361 const int kNumExtraArgs = 2; // implicit rcvr and construction phase args. | 363 const int kNumExtraArgs = 2; // implicit rcvr and construction phase args. |
362 const Instance& exception_object = Instance::Handle(Instance::New(cls)); | 364 const Instance& exception_object = Instance::Handle(Instance::New(cls)); |
363 const Array& constructor_arguments = | 365 const Array& constructor_arguments = |
364 Array::Handle(Array::New(arguments.Length() + kNumExtraArgs)); | 366 Array::Handle(Array::New(arguments.Length() + kNumExtraArgs)); |
365 constructor_arguments.SetAt(0, exception_object); | 367 constructor_arguments.SetAt(0, exception_object); |
366 constructor_arguments.SetAt( | 368 constructor_arguments.SetAt( |
367 1, Smi::Handle(Smi::New(Function::kCtorPhaseAll))); | 369 1, Smi::Handle(Smi::New(Function::kCtorPhaseAll))); |
368 Object& obj = Object::Handle(); | 370 Object& obj = Object::Handle(); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 ASSERT(!isolate_lib.IsNull()); | 439 ASSERT(!isolate_lib.IsNull()); |
438 const String& class_name = | 440 const String& class_name = |
439 String::Handle(isolate_lib.PrivateName(Symbols::_ReceivePortImpl())); | 441 String::Handle(isolate_lib.PrivateName(Symbols::_ReceivePortImpl())); |
440 const String& function_name = | 442 const String& function_name = |
441 String::Handle(isolate_lib.PrivateName(Symbols::_lookupReceivePort())); | 443 String::Handle(isolate_lib.PrivateName(Symbols::_lookupReceivePort())); |
442 function = Resolver::ResolveStatic(isolate_lib, | 444 function = Resolver::ResolveStatic(isolate_lib, |
443 class_name, | 445 class_name, |
444 function_name, | 446 function_name, |
445 kNumArguments, | 447 kNumArguments, |
446 Object::empty_array(), | 448 Object::empty_array(), |
447 Resolver::kIsQualified); | 449 Resolver::kIsQualified, |
| 450 NULL); // No ambiguity error expected. |
| 451 ASSERT(!function.IsNull()); |
448 isolate->object_store()->set_lookup_receive_port_function(function); | 452 isolate->object_store()->set_lookup_receive_port_function(function); |
449 } | 453 } |
450 const Array& args = Array::Handle(Array::New(kNumArguments)); | 454 const Array& args = Array::Handle(Array::New(kNumArguments)); |
451 args.SetAt(0, Integer::Handle(Integer::New(port_id))); | 455 args.SetAt(0, Integer::Handle(Integer::New(port_id))); |
452 const Object& result = | 456 const Object& result = |
453 Object::Handle(DartEntry::InvokeFunction(function, args)); | 457 Object::Handle(DartEntry::InvokeFunction(function, args)); |
454 return result.raw(); | 458 return result.raw(); |
455 } | 459 } |
456 | 460 |
457 | 461 |
(...skipping 10 matching lines...) Expand all Loading... |
468 ASSERT(!isolate_lib.IsNull()); | 472 ASSERT(!isolate_lib.IsNull()); |
469 const String& class_name = | 473 const String& class_name = |
470 String::Handle(isolate_lib.PrivateName(Symbols::_ReceivePortImpl())); | 474 String::Handle(isolate_lib.PrivateName(Symbols::_ReceivePortImpl())); |
471 const String& function_name = | 475 const String& function_name = |
472 String::Handle(isolate_lib.PrivateName(Symbols::_handleMessage())); | 476 String::Handle(isolate_lib.PrivateName(Symbols::_handleMessage())); |
473 function = Resolver::ResolveStatic(isolate_lib, | 477 function = Resolver::ResolveStatic(isolate_lib, |
474 class_name, | 478 class_name, |
475 function_name, | 479 function_name, |
476 kNumArguments, | 480 kNumArguments, |
477 Object::empty_array(), | 481 Object::empty_array(), |
478 Resolver::kIsQualified); | 482 Resolver::kIsQualified, |
| 483 NULL); // No ambiguity error expected. |
| 484 ASSERT(!function.IsNull()); |
479 isolate->object_store()->set_handle_message_function(function); | 485 isolate->object_store()->set_handle_message_function(function); |
480 } | 486 } |
481 const Array& args = Array::Handle(isolate, Array::New(kNumArguments)); | 487 const Array& args = Array::Handle(isolate, Array::New(kNumArguments)); |
482 args.SetAt(0, receive_port); | 488 args.SetAt(0, receive_port); |
483 args.SetAt(1, Integer::Handle(isolate, Integer::New(reply_port_id))); | 489 args.SetAt(1, Integer::Handle(isolate, Integer::New(reply_port_id))); |
484 args.SetAt(2, message); | 490 args.SetAt(2, message); |
485 if (isolate->debugger()->IsStepping()) { | 491 if (isolate->debugger()->IsStepping()) { |
486 // If the isolate is being debugged and the debugger was stepping | 492 // If the isolate is being debugged and the debugger was stepping |
487 // through code, enable single stepping so debugger will stop | 493 // through code, enable single stepping so debugger will stop |
488 // at the first location the user is interested in. | 494 // at the first location the user is interested in. |
(...skipping 13 matching lines...) Expand all Loading... |
502 String::Handle(isolate_lib.PrivateName(Symbols::_SendPortImpl())); | 508 String::Handle(isolate_lib.PrivateName(Symbols::_SendPortImpl())); |
503 const int kNumArguments = 1; | 509 const int kNumArguments = 1; |
504 const String& function_name = | 510 const String& function_name = |
505 String::Handle(isolate_lib.PrivateName(Symbols::_create())); | 511 String::Handle(isolate_lib.PrivateName(Symbols::_create())); |
506 const Function& function = Function::Handle( | 512 const Function& function = Function::Handle( |
507 Resolver::ResolveStatic(isolate_lib, | 513 Resolver::ResolveStatic(isolate_lib, |
508 class_name, | 514 class_name, |
509 function_name, | 515 function_name, |
510 kNumArguments, | 516 kNumArguments, |
511 Object::empty_array(), | 517 Object::empty_array(), |
512 Resolver::kIsQualified)); | 518 Resolver::kIsQualified, |
| 519 NULL)); // No ambiguity error expected. |
| 520 ASSERT(!function.IsNull()); |
513 const Array& args = Array::Handle(Array::New(kNumArguments)); | 521 const Array& args = Array::Handle(Array::New(kNumArguments)); |
514 args.SetAt(0, Integer::Handle(Integer::New(port_id))); | 522 args.SetAt(0, Integer::Handle(Integer::New(port_id))); |
515 return DartEntry::InvokeFunction(function, args); | 523 return DartEntry::InvokeFunction(function, args); |
516 } | 524 } |
517 | 525 |
518 | 526 |
519 RawObject* DartLibraryCalls::MapSetAt(const Instance& map, | 527 RawObject* DartLibraryCalls::MapSetAt(const Instance& map, |
520 const Instance& key, | 528 const Instance& key, |
521 const Instance& value) { | 529 const Instance& value) { |
522 const int kNumArguments = 3; | 530 const int kNumArguments = 3; |
(...skipping 22 matching lines...) Expand all Loading... |
545 String::Handle(Field::GetterName(Symbols::_id())))); | 553 String::Handle(Field::GetterName(Symbols::_id())))); |
546 const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name)); | 554 const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name)); |
547 ASSERT(!func.IsNull()); | 555 ASSERT(!func.IsNull()); |
548 const Array& args = Array::Handle(Array::New(1)); | 556 const Array& args = Array::Handle(Array::New(1)); |
549 args.SetAt(0, port); | 557 args.SetAt(0, port); |
550 return DartEntry::InvokeFunction(func, args); | 558 return DartEntry::InvokeFunction(func, args); |
551 } | 559 } |
552 | 560 |
553 | 561 |
554 } // namespace dart | 562 } // namespace dart |
OLD | NEW |