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

Unified Diff: runtime/vm/code_generator.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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/lib/mirrors.cc ('k') | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/code_generator.cc
===================================================================
--- runtime/vm/code_generator.cc (revision 25039)
+++ runtime/vm/code_generator.cc (working copy)
@@ -801,16 +801,13 @@
const ICData& ic_data) {
ArgumentsDescriptor
arguments_descriptor(Array::Handle(ic_data.arguments_descriptor()));
- intptr_t num_arguments = arguments_descriptor.Count();
- int num_named_arguments = arguments_descriptor.NamedCount();
String& function_name = String::Handle(ic_data.target_name());
ASSERT(function_name.IsSymbol());
Function& function = Function::Handle();
function = Resolver::ResolveDynamic(receiver,
function_name,
- num_arguments,
- num_named_arguments);
+ arguments_descriptor);
if (function.IsNull()) {
return Code::null();
} else {
@@ -1063,15 +1060,11 @@
cls.ToCString(), name.ToCString());
}
- intptr_t arg_count =
- Smi::Cast(Object::Handle(descriptor.At(0))).Value();
- intptr_t named_arg_count =
- arg_count - Smi::Cast(Object::Handle(descriptor.At(1))).Value();
+ ArgumentsDescriptor args_desc(descriptor);
const Function& target = Function::Handle(
Resolver::ResolveDynamicForReceiverClass(cls,
name,
- arg_count,
- named_arg_count));
+ args_desc));
Instructions& instructions = Instructions::Handle();
if (!target.IsNull()) {
@@ -1112,12 +1105,12 @@
args.Add(&receiver);
args.Add(&arg1);
const intptr_t kNumArguments = 2;
- const intptr_t kNumNamedArguments = 0;
- Function& target_function = Function::Handle();
- target_function = Resolver::ResolveDynamic(receiver,
- target_name,
- kNumArguments,
- kNumNamedArguments);
+ ArgumentsDescriptor args_desc(
+ Array::Handle(ArgumentsDescriptor::New(kNumArguments)));
+ const Function& target_function = Function::Handle(
+ Resolver::ResolveDynamic(receiver,
+ target_name,
+ args_desc));
ASSERT(!target_function.IsNull());
GrowableArray<intptr_t> class_ids(kNumArguments);
ASSERT(ic_data.num_args_tested() == kNumArguments);
@@ -1189,12 +1182,12 @@
// 1. Check if there is a getter with the same name.
const String& getter_name = String::Handle(Field::GetterName(target_name));
const int kNumArguments = 1;
- const int kNumNamedArguments = 0;
+ ArgumentsDescriptor args_desc(
+ Array::Handle(ArgumentsDescriptor::New(kNumArguments)));
const Function& getter = Function::Handle(
Resolver::ResolveDynamicForReceiverClass(receiver_class,
getter_name,
- kNumArguments,
- kNumNamedArguments));
+ args_desc));
if (getter.IsNull() || getter.IsMethodExtractor()) {
return false;
}
« no previous file with comments | « runtime/lib/mirrors.cc ('k') | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698