Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: runtime/vm/dart_entry.cc

Issue 19662003: Refactor resolution code in the vm to properly handle ambiguity errors. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/dart_api_impl_test.cc ('k') | runtime/vm/dart_entry_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl_test.cc ('k') | runtime/vm/dart_entry_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698