Chromium Code Reviews| Index: src/code-stubs.cc |
| diff --git a/src/code-stubs.cc b/src/code-stubs.cc |
| index 2bc3de9e8c6a5876ddfed46002824b16091c2ca3..0482d63e8c4345d9ae86207758f04f5fbf5e23a5 100644 |
| --- a/src/code-stubs.cc |
| +++ b/src/code-stubs.cc |
| @@ -4298,11 +4298,12 @@ void TypeofStub::GenerateAheadOfTime(Isolate* isolate) { |
| stub.GetCode(); |
| } |
| +namespace { |
| + |
| // static |
|
Michael Starzinger
2016/07/19 15:06:01
nit: The "static" comment no longer applies.
|
| -compiler::Node* HasPropertyStub::Generate(CodeStubAssembler* assembler, |
| - compiler::Node* key, |
| - compiler::Node* object, |
| - compiler::Node* context) { |
| +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 +4348,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 +4357,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); |
| +} |
| + |
| +// stati c |
|
Michael Starzinger
2016/07/19 15:06:02
nit: s/stati c/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; |