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

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

Issue 19200002: Change resolving of instance methods to check early for name mismatch. (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.cc ('k') | runtime/vm/flow_graph_compiler_arm.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 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/flow_graph_compiler_arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698