| Index: src/compiler/code-assembler.h
 | 
| diff --git a/src/compiler/code-assembler.h b/src/compiler/code-assembler.h
 | 
| index 62e211cad399549c68f52960da69f40f8031fcfe..573e8e58cd6478b599f39d9b20734893d23505db 100644
 | 
| --- a/src/compiler/code-assembler.h
 | 
| +++ b/src/compiler/code-assembler.h
 | 
| @@ -12,6 +12,7 @@
 | 
|  // Do not include anything from src/compiler here!
 | 
|  #include "src/allocation.h"
 | 
|  #include "src/builtins/builtins.h"
 | 
| +#include "src/code-factory.h"
 | 
|  #include "src/globals.h"
 | 
|  #include "src/heap/heap.h"
 | 
|  #include "src/machine-type.h"
 | 
| @@ -316,32 +317,24 @@ class V8_EXPORT_PRIVATE CodeAssembler {
 | 
|      Node* const value;
 | 
|    };
 | 
|  
 | 
| -  Node* CallStub(Callable const& callable, Node* context, Node* arg1,
 | 
| -                 size_t result_size = 1);
 | 
| -  Node* CallStub(Callable const& callable, Node* context, Node* arg1,
 | 
| -                 Node* arg2, size_t result_size = 1);
 | 
| -  Node* CallStub(Callable const& callable, Node* context, Node* arg1,
 | 
| -                 Node* arg2, Node* arg3, size_t result_size = 1);
 | 
| -  Node* CallStub(Callable const& callable, Node* context, Node* arg1,
 | 
| -                 Node* arg2, Node* arg3, Node* arg4, size_t result_size = 1);
 | 
| -  Node* CallStubN(Callable const& callable, Node** args,
 | 
| -                  size_t result_size = 1);
 | 
| +  template <class... TArgs>
 | 
| +  Node* CallStub(Callable const& callable, Node* context, TArgs... args) {
 | 
| +    Node* target = HeapConstant(callable.code());
 | 
| +    return CallStub(callable.descriptor(), target, context, args...);
 | 
| +  }
 | 
|  
 | 
| +  template <class... TArgs>
 | 
|    Node* CallStub(const CallInterfaceDescriptor& descriptor, Node* target,
 | 
| -                 Node* context, size_t result_size = 1);
 | 
| -  Node* CallStub(const CallInterfaceDescriptor& descriptor, Node* target,
 | 
| -                 Node* context, Node* arg1, size_t result_size = 1);
 | 
| -  Node* CallStub(const CallInterfaceDescriptor& descriptor, Node* target,
 | 
| -                 Node* context, Node* arg1, Node* arg2, size_t result_size = 1);
 | 
| -  Node* CallStub(const CallInterfaceDescriptor& descriptor, Node* target,
 | 
| -                 Node* context, Node* arg1, Node* arg2, Node* arg3,
 | 
| -                 size_t result_size = 1);
 | 
| -  Node* CallStub(const CallInterfaceDescriptor& descriptor, Node* target,
 | 
| -                 Node* context, Node* arg1, Node* arg2, Node* arg3, Node* arg4,
 | 
| -                 size_t result_size = 1);
 | 
| -  Node* CallStub(const CallInterfaceDescriptor& descriptor, Node* target,
 | 
| -                 Node* context, Node* arg1, Node* arg2, Node* arg3, Node* arg4,
 | 
| -                 Node* arg5, size_t result_size = 1);
 | 
| +                 Node* context, TArgs... args) {
 | 
| +    return CallStubR(descriptor, 1, target, context, args...);
 | 
| +  }
 | 
| +
 | 
| +  template <class... TArgs>
 | 
| +  Node* CallStubR(const CallInterfaceDescriptor& descriptor, size_t result_size,
 | 
| +                  Node* target, Node* context, TArgs... args);
 | 
| +
 | 
| +  Node* CallStubN(const CallInterfaceDescriptor& descriptor, size_t result_size,
 | 
| +                  int input_count, Node* const* inputs);
 | 
|  
 | 
|    Node* CallStub(const CallInterfaceDescriptor& descriptor, Node* target,
 | 
|                   Node* context, const Arg& arg1, const Arg& arg2,
 | 
| 
 |