1// Copyright 2017 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_BUILTINS_BUILTINS_CALL_GEN_H_
6#define V8_BUILTINS_BUILTINS_CALL_GEN_H_
7
8#include "src/code-stub-assembler.h"
9
10namespace v8 {
11namespace internal {
12
13class CallOrConstructBuiltinsAssembler : public CodeStubAssembler {
14 public:
15 explicit CallOrConstructBuiltinsAssembler(compiler::CodeAssemblerState* state)
16 : CodeStubAssembler(state) {}
17
18 void CallOrConstructWithArrayLike(TNode<Object> target,
19 SloppyTNode<Object> new_target,
20 TNode<Object> arguments_list,
21 TNode<Context> context);
22 void CallOrConstructDoubleVarargs(TNode<Object> target,
23 SloppyTNode<Object> new_target,
24 TNode<FixedDoubleArray> elements,
25 TNode<Int32T> length,
26 TNode<Int32T> args_count,
27 TNode<Context> context, TNode<Int32T> kind);
28 void CallOrConstructWithSpread(TNode<Object> target, TNode<Object> new_target,
29 TNode<Object> spread, TNode<Int32T> args_count,
30 TNode<Context> context);
31
32 enum class CallFunctionTemplateMode : uint8_t {
33 kCheckAccess,
34 kCheckCompatibleReceiver,
35 kCheckAccessAndCompatibleReceiver,
36 };
37
38 void CallFunctionTemplate(CallFunctionTemplateMode mode,
39 TNode<FunctionTemplateInfo> function_template_info,
40 TNode<IntPtrT> argc, TNode<Context> context);
41
42 private:
43 TNode<JSReceiver> GetCompatibleReceiver(TNode<JSReceiver> receiver,
44 TNode<HeapObject> signature,
45 TNode<Context> context);
46};
47
48} // namespace internal
49} // namespace v8
50
51#endif // V8_BUILTINS_BUILTINS_CALL_GEN_H_
52