Chromium Code Reviews| Index: src/hydrogen.cc |
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
| index 475b9ffeb03f692df2671f075918534812902783..e7d2a14b6862f3e1585b0ab52fb32078802cea24 100644 |
| --- a/src/hydrogen.cc |
| +++ b/src/hydrogen.cc |
| @@ -9535,6 +9535,22 @@ const HOptimizedGraphBuilder::InlineFunctionGenerator |
| #undef INLINE_FUNCTION_GENERATOR_ADDRESS |
| +HOptimizedGraphBuilder::InlineFunctionGenerator |
| +HOptimizedGraphBuilder::FindInlineFunctionGenerator(CallRuntime* expr) { |
| + const Runtime::Function* function = expr->function(); |
| + if (function == nullptr || function->intrinsic_type != Runtime::INLINE) { |
| + return nullptr; |
| + } |
| + Runtime::FunctionId id = function->function_id; |
| + if (id < Runtime::kFirstInlineFunction) return nullptr; |
| + int lookup_index = |
| + static_cast<int>(id) - static_cast<int>(Runtime::kFirstInlineFunction); |
| + DCHECK(static_cast<size_t>(lookup_index) < |
| + arraysize(kInlineFunctionGenerators)); |
| + return kInlineFunctionGenerators[lookup_index]; |
| +} |
| + |
| + |
| template <class ViewClass> |
| void HGraphBuilder::BuildArrayBufferViewInitialization( |
| HValue* obj, |
| @@ -9914,21 +9930,13 @@ void HOptimizedGraphBuilder::VisitCallRuntime(CallRuntime* expr) { |
| const Runtime::Function* function = expr->function(); |
| DCHECK(function != NULL); |
| + InlineFunctionGenerator generator = FindInlineFunctionGenerator(expr); |
| if (function->intrinsic_type == Runtime::INLINE) { |
| DCHECK(expr->name()->length() > 0); |
| DCHECK(expr->name()->Get(0) == '_'); |
| - // Call to an inline function. |
| - int lookup_index = static_cast<int>(function->function_id) - |
| - static_cast<int>(Runtime::kFirstInlineFunction); |
| - DCHECK(lookup_index >= 0); |
| - DCHECK(static_cast<size_t>(lookup_index) < |
| - arraysize(kInlineFunctionGenerators)); |
| - InlineFunctionGenerator generator = kInlineFunctionGenerators[lookup_index]; |
| - |
| // Call the inline code generator using the pointer-to-member. |
| (this->*generator)(expr); |
|
Michael Starzinger
2015/03/06 14:13:16
nit: DCHECK(generator != nullptr) or make sure the
Sven Panne
2015/03/06 14:33:15
Ooops, forgot to actually change the condition in
|
| } else { |
| - DCHECK(function->intrinsic_type == Runtime::RUNTIME); |
| Handle<String> name = expr->name(); |
| int argument_count = expr->arguments()->length(); |
| CHECK_ALIVE(VisitExpressions(expr->arguments())); |