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

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
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 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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698