| 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 ArgumentsDescriptor::ArgumentsDescriptor(const Array& array) | 155 ArgumentsDescriptor::ArgumentsDescriptor(const Array& array) |
| 156 : array_(array) { | 156 : array_(array) { |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 ASSERT(retval.IsNull() || retval.IsError()); | 329 ASSERT(retval.IsNull() || retval.IsError()); |
| 330 if (retval.IsError()) { | 330 if (retval.IsError()) { |
| 331 return retval.raw(); | 331 return retval.raw(); |
| 332 } | 332 } |
| 333 return exception_object.raw(); | 333 return exception_object.raw(); |
| 334 } | 334 } |
| 335 | 335 |
| 336 | 336 |
| 337 RawObject* DartLibraryCalls::ToString(const Instance& receiver) { | 337 RawObject* DartLibraryCalls::ToString(const Instance& receiver) { |
| 338 const int kNumArguments = 1; // Receiver. | 338 const int kNumArguments = 1; // Receiver. |
| 339 const int kNumNamedArguments = 0; // None. | 339 ArgumentsDescriptor args_desc( |
| 340 Array::Handle(ArgumentsDescriptor::New(kNumArguments))); |
| 340 const Function& function = Function::Handle( | 341 const Function& function = Function::Handle( |
| 341 Resolver::ResolveDynamic(receiver, | 342 Resolver::ResolveDynamic(receiver, |
| 342 Symbols::toString(), | 343 Symbols::toString(), |
| 343 kNumArguments, | 344 args_desc)); |
| 344 kNumNamedArguments)); | |
| 345 ASSERT(!function.IsNull()); | 345 ASSERT(!function.IsNull()); |
| 346 const Array& args = Array::Handle(Array::New(kNumArguments)); | 346 const Array& args = Array::Handle(Array::New(kNumArguments)); |
| 347 args.SetAt(0, receiver); | 347 args.SetAt(0, receiver); |
| 348 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, | 348 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, |
| 349 args)); | 349 args)); |
| 350 ASSERT(result.IsInstance() || result.IsError()); | 350 ASSERT(result.IsInstance() || result.IsError()); |
| 351 return result.raw(); | 351 return result.raw(); |
| 352 } | 352 } |
| 353 | 353 |
| 354 | 354 |
| 355 RawObject* DartLibraryCalls::Equals(const Instance& left, | 355 RawObject* DartLibraryCalls::Equals(const Instance& left, |
| 356 const Instance& right) { | 356 const Instance& right) { |
| 357 const int kNumArguments = 2; | 357 const int kNumArguments = 2; |
| 358 const int kNumNamedArguments = 0; | 358 ArgumentsDescriptor args_desc( |
| 359 Array::Handle(ArgumentsDescriptor::New(kNumArguments))); |
| 359 const Function& function = Function::Handle( | 360 const Function& function = Function::Handle( |
| 360 Resolver::ResolveDynamic(left, | 361 Resolver::ResolveDynamic(left, |
| 361 Symbols::EqualOperator(), | 362 Symbols::EqualOperator(), |
| 362 kNumArguments, | 363 args_desc)); |
| 363 kNumNamedArguments)); | |
| 364 ASSERT(!function.IsNull()); | 364 ASSERT(!function.IsNull()); |
| 365 | 365 |
| 366 const Array& args = Array::Handle(Array::New(kNumArguments)); | 366 const Array& args = Array::Handle(Array::New(kNumArguments)); |
| 367 args.SetAt(0, left); | 367 args.SetAt(0, left); |
| 368 args.SetAt(1, right); | 368 args.SetAt(1, right); |
| 369 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, | 369 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, |
| 370 args)); | 370 args)); |
| 371 ASSERT(result.IsInstance() || result.IsError()); | 371 ASSERT(result.IsInstance() || result.IsError()); |
| 372 return result.raw(); | 372 return result.raw(); |
| 373 } | 373 } |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 460 const Array& args = Array::Handle(Array::New(kNumArguments)); | 460 const Array& args = Array::Handle(Array::New(kNumArguments)); |
| 461 args.SetAt(0, Integer::Handle(Integer::New(port_id))); | 461 args.SetAt(0, Integer::Handle(Integer::New(port_id))); |
| 462 return DartEntry::InvokeFunction(function, args); | 462 return DartEntry::InvokeFunction(function, args); |
| 463 } | 463 } |
| 464 | 464 |
| 465 | 465 |
| 466 RawObject* DartLibraryCalls::MapSetAt(const Instance& map, | 466 RawObject* DartLibraryCalls::MapSetAt(const Instance& map, |
| 467 const Instance& key, | 467 const Instance& key, |
| 468 const Instance& value) { | 468 const Instance& value) { |
| 469 const int kNumArguments = 3; | 469 const int kNumArguments = 3; |
| 470 ArgumentsDescriptor args_desc( |
| 471 Array::Handle(ArgumentsDescriptor::New(kNumArguments))); |
| 470 const Function& function = Function::Handle( | 472 const Function& function = Function::Handle( |
| 471 Resolver::ResolveDynamic(map, | 473 Resolver::ResolveDynamic(map, |
| 472 Symbols::AssignIndexToken(), | 474 Symbols::AssignIndexToken(), |
| 473 kNumArguments, | 475 args_desc)); |
| 474 0)); | |
| 475 ASSERT(!function.IsNull()); | 476 ASSERT(!function.IsNull()); |
| 476 const Array& args = Array::Handle(Array::New(kNumArguments)); | 477 const Array& args = Array::Handle(Array::New(kNumArguments)); |
| 477 args.SetAt(0, map); | 478 args.SetAt(0, map); |
| 478 args.SetAt(1, key); | 479 args.SetAt(1, key); |
| 479 args.SetAt(2, value); | 480 args.SetAt(2, value); |
| 480 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, | 481 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, |
| 481 args)); | 482 args)); |
| 482 return result.raw(); | 483 return result.raw(); |
| 483 } | 484 } |
| 484 | 485 |
| 485 | 486 |
| 486 RawObject* DartLibraryCalls::PortGetId(const Instance& port) { | 487 RawObject* DartLibraryCalls::PortGetId(const Instance& port) { |
| 487 const Class& cls = Class::Handle(port.clazz()); | 488 const Class& cls = Class::Handle(port.clazz()); |
| 488 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); | 489 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); |
| 489 const String& func_name = | 490 const String& func_name = |
| 490 String::Handle(isolate_lib.PrivateName( | 491 String::Handle(isolate_lib.PrivateName( |
| 491 String::Handle(Field::GetterName(Symbols::_id())))); | 492 String::Handle(Field::GetterName(Symbols::_id())))); |
| 492 const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name)); | 493 const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name)); |
| 493 ASSERT(!func.IsNull()); | 494 ASSERT(!func.IsNull()); |
| 494 const Array& args = Array::Handle(Array::New(1)); | 495 const Array& args = Array::Handle(Array::New(1)); |
| 495 args.SetAt(0, port); | 496 args.SetAt(0, port); |
| 496 return DartEntry::InvokeFunction(func, args); | 497 return DartEntry::InvokeFunction(func, args); |
| 497 } | 498 } |
| 498 | 499 |
| 499 | 500 |
| 500 } // namespace dart | 501 } // namespace dart |
| OLD | NEW |