| Index: runtime/vm/code_generator.cc | 
| diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc | 
| index a4d3cf4c495edf71b0aabb613c0d748d61b0f75c..e2efe293ebc8566f0b26da51421053d2cf9ce021 100644 | 
| --- a/runtime/vm/code_generator.cc | 
| +++ b/runtime/vm/code_generator.cc | 
| @@ -1282,23 +1282,43 @@ DEFINE_RUNTIME_ENTRY(InvokeNoSuchMethodFunction, 4) { | 
| const String& original_function_name = String::Handle(ic_data.target_name()); | 
| ASSERT(!Array::CheckedHandle(arguments.At(2)).IsNull()); | 
| const Array& orig_arguments = Array::CheckedHandle(arguments.At(3)); | 
| -  // TODO(regis): The signature of the "noSuchMethod" method has to change from | 
| -  // noSuchMethod(String name, Array arguments) to something like | 
| -  // noSuchMethod(InvocationMirror call). | 
| -  const int kNumArguments = 3; | 
| -  const int kNumNamedArguments = 0; | 
| +  // Allocate an InvocationMirror object. | 
| +  // TODO(regis): Fill in the InvocationMirror object correctly at | 
| +  // this point we do not deal with named arguments and treat them | 
| +  // all as positional. | 
| +  const Library& core_lib = Library::Handle(Library::CoreLibrary()); | 
| +  const String& invocation_mirror_name = String::Handle( | 
| +      Symbols::InvocationMirror()); | 
| +  Class& invocation_mirror_class = Class::Handle( | 
| +      core_lib.LookupClassAllowPrivate(invocation_mirror_name)); | 
| +  ASSERT(!invocation_mirror_class.IsNull()); | 
| +  const String& allocation_function_name = String::Handle( | 
| +      Symbols::AllocateInvocationMirror()); | 
| +  const Function& allocation_function = Function::ZoneHandle( | 
| +      Resolver::ResolveStaticByName(invocation_mirror_class, | 
| +                                    allocation_function_name, | 
| +                                    Resolver::kIsQualified)); | 
| +  ASSERT(!allocation_function.IsNull()); | 
| +  GrowableArray<const Object*> allocation_arguments(2); | 
| +  allocation_arguments.Add(&original_function_name); | 
| +  allocation_arguments.Add(&orig_arguments); | 
| const Array& kNoArgumentNames = Array::Handle(); | 
| -  const String& function_name = | 
| -      String::Handle(Symbols::NoSuchMethod()); | 
| +  const Object& invocation_mirror = Object::Handle( | 
| +      DartEntry::InvokeStatic(allocation_function, | 
| +                              allocation_arguments, | 
| +                              kNoArgumentNames)); | 
| + | 
| +  const int kNumArguments = 2; | 
| +  const int kNumNamedArguments = 0; | 
| +  const String& function_name = String::Handle(Symbols::NoSuchMethod()); | 
| const Function& function = Function::ZoneHandle( | 
| Resolver::ResolveDynamic(receiver, | 
| function_name, | 
| kNumArguments, | 
| kNumNamedArguments)); | 
| ASSERT(!function.IsNull()); | 
| -  GrowableArray<const Object*> invoke_arguments(2); | 
| -  invoke_arguments.Add(&original_function_name); | 
| -  invoke_arguments.Add(&orig_arguments); | 
| +  GrowableArray<const Object*> invoke_arguments(1); | 
| +  invoke_arguments.Add(&invocation_mirror); | 
| const Object& result = Object::Handle( | 
| DartEntry::InvokeDynamic(receiver, | 
| function, | 
|  |