| Index: src/code-stubs.cc
 | 
| diff --git a/src/code-stubs.cc b/src/code-stubs.cc
 | 
| index 2bc3de9e8c6a5876ddfed46002824b16091c2ca3..eca0b91ed4beea7a214ff07a9625e910095578be 100644
 | 
| --- a/src/code-stubs.cc
 | 
| +++ b/src/code-stubs.cc
 | 
| @@ -4298,11 +4298,11 @@ void TypeofStub::GenerateAheadOfTime(Isolate* isolate) {
 | 
|    stub.GetCode();
 | 
|  }
 | 
|  
 | 
| -// static
 | 
| -compiler::Node* HasPropertyStub::Generate(CodeStubAssembler* assembler,
 | 
| -                                          compiler::Node* key,
 | 
| -                                          compiler::Node* object,
 | 
| -                                          compiler::Node* context) {
 | 
| +namespace {
 | 
| +
 | 
| +compiler::Node* GenerateHasProperty(
 | 
| +    CodeStubAssembler* assembler, compiler::Node* object, compiler::Node* key,
 | 
| +    compiler::Node* context, Runtime::FunctionId fallback_runtime_function_id) {
 | 
|    typedef compiler::Node Node;
 | 
|    typedef CodeStubAssembler::Label Label;
 | 
|    typedef CodeStubAssembler::Variable Variable;
 | 
| @@ -4347,8 +4347,8 @@ compiler::Node* HasPropertyStub::Generate(CodeStubAssembler* assembler,
 | 
|  
 | 
|    assembler->Bind(&call_runtime);
 | 
|    {
 | 
| -    result.Bind(
 | 
| -        assembler->CallRuntime(Runtime::kHasProperty, context, key, object));
 | 
| +    result.Bind(assembler->CallRuntime(fallback_runtime_function_id, context,
 | 
| +                                       object, key));
 | 
|      assembler->Goto(&end);
 | 
|    }
 | 
|  
 | 
| @@ -4356,6 +4356,56 @@ compiler::Node* HasPropertyStub::Generate(CodeStubAssembler* assembler,
 | 
|    return result.value();
 | 
|  }
 | 
|  
 | 
| +}  // namespace
 | 
| +
 | 
| +// static
 | 
| +compiler::Node* HasPropertyStub::Generate(CodeStubAssembler* assembler,
 | 
| +                                          compiler::Node* key,
 | 
| +                                          compiler::Node* object,
 | 
| +                                          compiler::Node* context) {
 | 
| +  return GenerateHasProperty(assembler, object, key, context,
 | 
| +                             Runtime::kHasProperty);
 | 
| +}
 | 
| +
 | 
| +// static
 | 
| +compiler::Node* ForInFilterStub::Generate(CodeStubAssembler* assembler,
 | 
| +                                          compiler::Node* key,
 | 
| +                                          compiler::Node* object,
 | 
| +                                          compiler::Node* context) {
 | 
| +  typedef compiler::Node Node;
 | 
| +  typedef CodeStubAssembler::Label Label;
 | 
| +  typedef CodeStubAssembler::Variable Variable;
 | 
| +
 | 
| +  Label return_undefined(assembler, Label::kDeferred),
 | 
| +      return_to_name(assembler), end(assembler);
 | 
| +
 | 
| +  Variable var_result(assembler, MachineRepresentation::kTagged);
 | 
| +
 | 
| +  Node* has_property = GenerateHasProperty(assembler, object, key, context,
 | 
| +                                           Runtime::kForInHasProperty);
 | 
| +
 | 
| +  assembler->Branch(
 | 
| +      assembler->WordEqual(has_property, assembler->BooleanConstant(true)),
 | 
| +      &return_to_name, &return_undefined);
 | 
| +
 | 
| +  assembler->Bind(&return_to_name);
 | 
| +  {
 | 
| +    // TODO(cbruni): inline ToName here.
 | 
| +    Callable callable = CodeFactory::ToName(assembler->isolate());
 | 
| +    var_result.Bind(assembler->CallStub(callable, context, key));
 | 
| +    assembler->Goto(&end);
 | 
| +  }
 | 
| +
 | 
| +  assembler->Bind(&return_undefined);
 | 
| +  {
 | 
| +    var_result.Bind(assembler->UndefinedConstant());
 | 
| +    assembler->Goto(&end);
 | 
| +  }
 | 
| +
 | 
| +  assembler->Bind(&end);
 | 
| +  return var_result.value();
 | 
| +}
 | 
| +
 | 
|  void GetPropertyStub::GenerateAssembly(CodeStubAssembler* assembler) const {
 | 
|    typedef compiler::Node Node;
 | 
|    typedef CodeStubAssembler::Label Label;
 | 
| 
 |