Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index 475b9ffeb03f692df2671f075918534812902783..be4c9ac0ea18c966247f476e95b5c0068fb0eadf 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); |
- if (function->intrinsic_type == Runtime::INLINE) { |
+ InlineFunctionGenerator generator = FindInlineFunctionGenerator(expr); |
+ if (generator != nullptr) { |
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); |
} else { |
- DCHECK(function->intrinsic_type == Runtime::RUNTIME); |
Handle<String> name = expr->name(); |
int argument_count = expr->arguments()->length(); |
CHECK_ALIVE(VisitExpressions(expr->arguments())); |