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. | |
siva
2013/07/22 22:21:46
ASSERT(!function.IsNull());
regis
2013/07/22 23:51:27
Done here and at other locations in this source.
| |
448 isolate->object_store()->set_lookup_receive_port_function(function); | 451 isolate->object_store()->set_lookup_receive_port_function(function); |
449 } | 452 } |
450 const Array& args = Array::Handle(Array::New(kNumArguments)); | 453 const Array& args = Array::Handle(Array::New(kNumArguments)); |
451 args.SetAt(0, Integer::Handle(Integer::New(port_id))); | 454 args.SetAt(0, Integer::Handle(Integer::New(port_id))); |
452 const Object& result = | 455 const Object& result = |
453 Object::Handle(DartEntry::InvokeFunction(function, args)); | 456 Object::Handle(DartEntry::InvokeFunction(function, args)); |
454 return result.raw(); | 457 return result.raw(); |
455 } | 458 } |
456 | 459 |
457 | 460 |
(...skipping 10 matching lines...) Expand all Loading... | |
468 ASSERT(!isolate_lib.IsNull()); | 471 ASSERT(!isolate_lib.IsNull()); |
469 const String& class_name = | 472 const String& class_name = |
470 String::Handle(isolate_lib.PrivateName(Symbols::_ReceivePortImpl())); | 473 String::Handle(isolate_lib.PrivateName(Symbols::_ReceivePortImpl())); |
471 const String& function_name = | 474 const String& function_name = |
472 String::Handle(isolate_lib.PrivateName(Symbols::_handleMessage())); | 475 String::Handle(isolate_lib.PrivateName(Symbols::_handleMessage())); |
473 function = Resolver::ResolveStatic(isolate_lib, | 476 function = Resolver::ResolveStatic(isolate_lib, |
474 class_name, | 477 class_name, |
475 function_name, | 478 function_name, |
476 kNumArguments, | 479 kNumArguments, |
477 Object::empty_array(), | 480 Object::empty_array(), |
478 Resolver::kIsQualified); | 481 Resolver::kIsQualified, |
482 NULL); // No ambiguity error expected. | |
siva
2013/07/22 22:21:46
ASSERT(!function.IsNull());
regis
2013/07/22 23:51:27
Done.
| |
479 isolate->object_store()->set_handle_message_function(function); | 483 isolate->object_store()->set_handle_message_function(function); |
480 } | 484 } |
481 const Array& args = Array::Handle(isolate, Array::New(kNumArguments)); | 485 const Array& args = Array::Handle(isolate, Array::New(kNumArguments)); |
482 args.SetAt(0, receive_port); | 486 args.SetAt(0, receive_port); |
483 args.SetAt(1, Integer::Handle(isolate, Integer::New(reply_port_id))); | 487 args.SetAt(1, Integer::Handle(isolate, Integer::New(reply_port_id))); |
484 args.SetAt(2, message); | 488 args.SetAt(2, message); |
485 if (isolate->debugger()->IsStepping()) { | 489 if (isolate->debugger()->IsStepping()) { |
486 // If the isolate is being debugged and the debugger was stepping | 490 // If the isolate is being debugged and the debugger was stepping |
487 // through code, enable single stepping so debugger will stop | 491 // through code, enable single stepping so debugger will stop |
488 // at the first location the user is interested in. | 492 // at the first location the user is interested in. |
(...skipping 13 matching lines...) Expand all Loading... | |
502 String::Handle(isolate_lib.PrivateName(Symbols::_SendPortImpl())); | 506 String::Handle(isolate_lib.PrivateName(Symbols::_SendPortImpl())); |
503 const int kNumArguments = 1; | 507 const int kNumArguments = 1; |
504 const String& function_name = | 508 const String& function_name = |
505 String::Handle(isolate_lib.PrivateName(Symbols::_create())); | 509 String::Handle(isolate_lib.PrivateName(Symbols::_create())); |
506 const Function& function = Function::Handle( | 510 const Function& function = Function::Handle( |
507 Resolver::ResolveStatic(isolate_lib, | 511 Resolver::ResolveStatic(isolate_lib, |
508 class_name, | 512 class_name, |
509 function_name, | 513 function_name, |
510 kNumArguments, | 514 kNumArguments, |
511 Object::empty_array(), | 515 Object::empty_array(), |
512 Resolver::kIsQualified)); | 516 Resolver::kIsQualified, |
517 NULL)); // No ambiguity error expected. | |
siva
2013/07/22 22:21:46
ASSERT(!function.IsNull());
regis
2013/07/22 23:51:27
Done.
| |
513 const Array& args = Array::Handle(Array::New(kNumArguments)); | 518 const Array& args = Array::Handle(Array::New(kNumArguments)); |
514 args.SetAt(0, Integer::Handle(Integer::New(port_id))); | 519 args.SetAt(0, Integer::Handle(Integer::New(port_id))); |
515 return DartEntry::InvokeFunction(function, args); | 520 return DartEntry::InvokeFunction(function, args); |
516 } | 521 } |
517 | 522 |
518 | 523 |
519 RawObject* DartLibraryCalls::MapSetAt(const Instance& map, | 524 RawObject* DartLibraryCalls::MapSetAt(const Instance& map, |
520 const Instance& key, | 525 const Instance& key, |
521 const Instance& value) { | 526 const Instance& value) { |
522 const int kNumArguments = 3; | 527 const int kNumArguments = 3; |
(...skipping 22 matching lines...) Expand all Loading... | |
545 String::Handle(Field::GetterName(Symbols::_id())))); | 550 String::Handle(Field::GetterName(Symbols::_id())))); |
546 const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name)); | 551 const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name)); |
547 ASSERT(!func.IsNull()); | 552 ASSERT(!func.IsNull()); |
548 const Array& args = Array::Handle(Array::New(1)); | 553 const Array& args = Array::Handle(Array::New(1)); |
549 args.SetAt(0, port); | 554 args.SetAt(0, port); |
550 return DartEntry::InvokeFunction(func, args); | 555 return DartEntry::InvokeFunction(func, args); |
551 } | 556 } |
552 | 557 |
553 | 558 |
554 } // namespace dart | 559 } // namespace dart |
OLD | NEW |