Chromium Code Reviews| Index: src/hydrogen.cc | 
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc | 
| index 9007d0903b5b7d92f262ac3c6e70c22000247745..d6c1ec6d28871e1a75165d270bdc4ca3f4cdbeac 100644 | 
| --- a/src/hydrogen.cc | 
| +++ b/src/hydrogen.cc | 
| @@ -5530,7 +5530,21 @@ void HGraphBuilder::GenerateSwapElements(CallRuntime* call) { | 
| // Fast call for custom callbacks. | 
| void HGraphBuilder::GenerateCallFunction(CallRuntime* call) { | 
| - return Bailout("inlined runtime function: CallFunction"); | 
| + // 1 ~ The function to call is not itself an argument to the call. | 
| + int arg_count = call->arguments()->length() - 1; | 
| + ASSERT(arg_count >= 1); // There's always at least a receiver. | 
| 
 
fschneider
2011/04/13 16:59:30
Can this also be >= 2 (receiver + function)?
 
 | 
| + | 
| + for (int i = 0; i < arg_count; ++i) { | 
| + CHECK_ALIVE(VisitArgument(call->arguments()->at(i))); | 
| + } | 
| + CHECK_ALIVE(VisitForValue(call->arguments()->last())); | 
| + HValue* function = Pop(); | 
| + HContext* context = new HContext; | 
| + AddInstruction(context); | 
| + HInvokeFunction* result = | 
| + new(zone()) HInvokeFunction(context, function, arg_count); | 
| + Drop(arg_count); | 
| + ast_context()->ReturnInstruction(result, call->id()); | 
| } |