| Index: src/objects.cc | 
| diff --git a/src/objects.cc b/src/objects.cc | 
| index 4601bd127076246d34ed55f991a7c3cc795030d1..9ec776ddafdbe4b463ce158307192bbd97948479 100644 | 
| --- a/src/objects.cc | 
| +++ b/src/objects.cc | 
| @@ -234,6 +234,25 @@ bool FunctionTemplateInfo::IsTemplateFor(Map* map) { | 
| } | 
|  | 
|  | 
| +// TODO(dcarney): CallOptimization duplicates this logic, merge. | 
| +Object* FunctionTemplateInfo::GetCompatibleReceiver(Isolate* isolate, | 
| +                                                    Object* receiver) { | 
| +  // API calls are only supported with JSObject receivers. | 
| +  if (!receiver->IsJSObject()) return isolate->heap()->null_value(); | 
| +  Object* recv_type = this->signature(); | 
| +  // No signature, return holder. | 
| +  if (recv_type->IsUndefined()) return receiver; | 
| +  FunctionTemplateInfo* signature = FunctionTemplateInfo::cast(recv_type); | 
| +  // Check the receiver. | 
| +  for (PrototypeIterator iter(isolate, receiver, | 
| +                              PrototypeIterator::START_AT_RECEIVER); | 
| +       !iter.IsAtEnd(PrototypeIterator::END_AT_NON_HIDDEN); iter.Advance()) { | 
| +    if (signature->IsTemplateFor(iter.GetCurrent())) return iter.GetCurrent(); | 
| +  } | 
| +  return isolate->heap()->null_value(); | 
| +} | 
| + | 
| + | 
| Handle<FixedArray> JSObject::EnsureWritableFastElements( | 
| Handle<JSObject> object) { | 
| DCHECK(object->HasFastSmiOrObjectElements()); | 
|  |