| 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 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 const int kNumAllocationArgs = 3; | 131 const int kNumAllocationArgs = 3; |
| 132 const Array& allocation_args = Array::Handle(Array::New(kNumAllocationArgs)); | 132 const Array& allocation_args = Array::Handle(Array::New(kNumAllocationArgs)); |
| 133 allocation_args.SetAt(0, target_name); | 133 allocation_args.SetAt(0, target_name); |
| 134 allocation_args.SetAt(1, arguments_descriptor); | 134 allocation_args.SetAt(1, arguments_descriptor); |
| 135 allocation_args.SetAt(2, arguments); | 135 allocation_args.SetAt(2, arguments); |
| 136 const Object& invocation_mirror = Object::Handle( | 136 const Object& invocation_mirror = Object::Handle( |
| 137 InvokeFunction(allocation_function, allocation_args)); | 137 InvokeFunction(allocation_function, allocation_args)); |
| 138 | 138 |
| 139 // Now use the invocation mirror object and invoke NoSuchMethod. | 139 // Now use the invocation mirror object and invoke NoSuchMethod. |
| 140 const int kNumArguments = 2; | 140 const int kNumArguments = 2; |
| 141 const int kNumNamedArguments = 0; | 141 ArgumentsDescriptor args_desc( |
| 142 Array::Handle(ArgumentsDescriptor::New(kNumArguments))); |
| 142 const Function& function = Function::Handle( | 143 const Function& function = Function::Handle( |
| 143 Resolver::ResolveDynamic(receiver, | 144 Resolver::ResolveDynamic(receiver, |
| 144 Symbols::NoSuchMethod(), | 145 Symbols::NoSuchMethod(), |
| 145 kNumArguments, | 146 args_desc)); |
| 146 kNumNamedArguments)); | |
| 147 ASSERT(!function.IsNull()); | 147 ASSERT(!function.IsNull()); |
| 148 const Array& args = Array::Handle(Array::New(kNumArguments)); | 148 const Array& args = Array::Handle(Array::New(kNumArguments)); |
| 149 args.SetAt(0, receiver); | 149 args.SetAt(0, receiver); |
| 150 args.SetAt(1, invocation_mirror); | 150 args.SetAt(1, invocation_mirror); |
| 151 return InvokeFunction(function, args); | 151 return InvokeFunction(function, args); |
| 152 } | 152 } |
| 153 | 153 |
| 154 | 154 |
| 155 RawObject* DartEntry::InvokeConstructor(const Class& klass, | 155 RawObject* DartEntry::InvokeConstructor(const Class& klass, |
| 156 const Function& constructor, | 156 const Function& constructor, |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 ASSERT(retval.IsNull() || retval.IsError()); | 382 ASSERT(retval.IsNull() || retval.IsError()); |
| 383 if (retval.IsError()) { | 383 if (retval.IsError()) { |
| 384 return retval.raw(); | 384 return retval.raw(); |
| 385 } | 385 } |
| 386 return exception_object.raw(); | 386 return exception_object.raw(); |
| 387 } | 387 } |
| 388 | 388 |
| 389 | 389 |
| 390 RawObject* DartLibraryCalls::ToString(const Instance& receiver) { | 390 RawObject* DartLibraryCalls::ToString(const Instance& receiver) { |
| 391 const int kNumArguments = 1; // Receiver. | 391 const int kNumArguments = 1; // Receiver. |
| 392 const int kNumNamedArguments = 0; // None. | 392 ArgumentsDescriptor args_desc( |
| 393 Array::Handle(ArgumentsDescriptor::New(kNumArguments))); |
| 393 const Function& function = Function::Handle( | 394 const Function& function = Function::Handle( |
| 394 Resolver::ResolveDynamic(receiver, | 395 Resolver::ResolveDynamic(receiver, |
| 395 Symbols::toString(), | 396 Symbols::toString(), |
| 396 kNumArguments, | 397 args_desc)); |
| 397 kNumNamedArguments)); | |
| 398 ASSERT(!function.IsNull()); | 398 ASSERT(!function.IsNull()); |
| 399 const Array& args = Array::Handle(Array::New(kNumArguments)); | 399 const Array& args = Array::Handle(Array::New(kNumArguments)); |
| 400 args.SetAt(0, receiver); | 400 args.SetAt(0, receiver); |
| 401 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, | 401 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, |
| 402 args)); | 402 args)); |
| 403 ASSERT(result.IsInstance() || result.IsError()); | 403 ASSERT(result.IsInstance() || result.IsError()); |
| 404 return result.raw(); | 404 return result.raw(); |
| 405 } | 405 } |
| 406 | 406 |
| 407 | 407 |
| 408 RawObject* DartLibraryCalls::Equals(const Instance& left, | 408 RawObject* DartLibraryCalls::Equals(const Instance& left, |
| 409 const Instance& right) { | 409 const Instance& right) { |
| 410 const int kNumArguments = 2; | 410 const int kNumArguments = 2; |
| 411 const int kNumNamedArguments = 0; | 411 ArgumentsDescriptor args_desc( |
| 412 Array::Handle(ArgumentsDescriptor::New(kNumArguments))); |
| 412 const Function& function = Function::Handle( | 413 const Function& function = Function::Handle( |
| 413 Resolver::ResolveDynamic(left, | 414 Resolver::ResolveDynamic(left, |
| 414 Symbols::EqualOperator(), | 415 Symbols::EqualOperator(), |
| 415 kNumArguments, | 416 args_desc)); |
| 416 kNumNamedArguments)); | |
| 417 ASSERT(!function.IsNull()); | 417 ASSERT(!function.IsNull()); |
| 418 | 418 |
| 419 const Array& args = Array::Handle(Array::New(kNumArguments)); | 419 const Array& args = Array::Handle(Array::New(kNumArguments)); |
| 420 args.SetAt(0, left); | 420 args.SetAt(0, left); |
| 421 args.SetAt(1, right); | 421 args.SetAt(1, right); |
| 422 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, | 422 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, |
| 423 args)); | 423 args)); |
| 424 ASSERT(result.IsInstance() || result.IsError()); | 424 ASSERT(result.IsInstance() || result.IsError()); |
| 425 return result.raw(); | 425 return result.raw(); |
| 426 } | 426 } |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 const Array& args = Array::Handle(Array::New(kNumArguments)); | 513 const Array& args = Array::Handle(Array::New(kNumArguments)); |
| 514 args.SetAt(0, Integer::Handle(Integer::New(port_id))); | 514 args.SetAt(0, Integer::Handle(Integer::New(port_id))); |
| 515 return DartEntry::InvokeFunction(function, args); | 515 return DartEntry::InvokeFunction(function, args); |
| 516 } | 516 } |
| 517 | 517 |
| 518 | 518 |
| 519 RawObject* DartLibraryCalls::MapSetAt(const Instance& map, | 519 RawObject* DartLibraryCalls::MapSetAt(const Instance& map, |
| 520 const Instance& key, | 520 const Instance& key, |
| 521 const Instance& value) { | 521 const Instance& value) { |
| 522 const int kNumArguments = 3; | 522 const int kNumArguments = 3; |
| 523 ArgumentsDescriptor args_desc( |
| 524 Array::Handle(ArgumentsDescriptor::New(kNumArguments))); |
| 523 const Function& function = Function::Handle( | 525 const Function& function = Function::Handle( |
| 524 Resolver::ResolveDynamic(map, | 526 Resolver::ResolveDynamic(map, |
| 525 Symbols::AssignIndexToken(), | 527 Symbols::AssignIndexToken(), |
| 526 kNumArguments, | 528 args_desc)); |
| 527 0)); | |
| 528 ASSERT(!function.IsNull()); | 529 ASSERT(!function.IsNull()); |
| 529 const Array& args = Array::Handle(Array::New(kNumArguments)); | 530 const Array& args = Array::Handle(Array::New(kNumArguments)); |
| 530 args.SetAt(0, map); | 531 args.SetAt(0, map); |
| 531 args.SetAt(1, key); | 532 args.SetAt(1, key); |
| 532 args.SetAt(2, value); | 533 args.SetAt(2, value); |
| 533 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, | 534 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, |
| 534 args)); | 535 args)); |
| 535 return result.raw(); | 536 return result.raw(); |
| 536 } | 537 } |
| 537 | 538 |
| 538 | 539 |
| 539 RawObject* DartLibraryCalls::PortGetId(const Instance& port) { | 540 RawObject* DartLibraryCalls::PortGetId(const Instance& port) { |
| 540 const Class& cls = Class::Handle(port.clazz()); | 541 const Class& cls = Class::Handle(port.clazz()); |
| 541 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); | 542 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); |
| 542 const String& func_name = | 543 const String& func_name = |
| 543 String::Handle(isolate_lib.PrivateName( | 544 String::Handle(isolate_lib.PrivateName( |
| 544 String::Handle(Field::GetterName(Symbols::_id())))); | 545 String::Handle(Field::GetterName(Symbols::_id())))); |
| 545 const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name)); | 546 const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name)); |
| 546 ASSERT(!func.IsNull()); | 547 ASSERT(!func.IsNull()); |
| 547 const Array& args = Array::Handle(Array::New(1)); | 548 const Array& args = Array::Handle(Array::New(1)); |
| 548 args.SetAt(0, port); | 549 args.SetAt(0, port); |
| 549 return DartEntry::InvokeFunction(func, args); | 550 return DartEntry::InvokeFunction(func, args); |
| 550 } | 551 } |
| 551 | 552 |
| 552 | 553 |
| 553 } // namespace dart | 554 } // namespace dart |
| OLD | NEW |