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/codegen/code-stub-assembler.h" 9 10 namespace v8 { 11 namespace internal { 12 13 class CallOrConstructBuiltinsAssembler : public CodeStubAssembler { 14 public: CallOrConstructBuiltinsAssembler(compiler::CodeAssemblerState * state)15 explicit CallOrConstructBuiltinsAssembler(compiler::CodeAssemblerState* state) 16 : CodeStubAssembler(state) {} 17 18 void CallOrConstructWithArrayLike(TNode<Object> target, 19 base::Optional<TNode<Object>> new_target, 20 TNode<Object> arguments_list, 21 TNode<Context> context); 22 void CallOrConstructDoubleVarargs(TNode<Object> target, 23 base::Optional<TNode<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, 29 base::Optional<TNode<Object>> new_target, 30 TNode<Object> spread, TNode<Int32T> args_count, 31 TNode<Context> context); 32 33 enum class CallFunctionTemplateMode : uint8_t { 34 kCheckAccess, 35 kCheckCompatibleReceiver, 36 kCheckAccessAndCompatibleReceiver, 37 }; 38 39 void CallFunctionTemplate(CallFunctionTemplateMode mode, 40 TNode<FunctionTemplateInfo> function_template_info, 41 TNode<IntPtrT> argc, TNode<Context> context); 42 43 private: 44 TNode<JSReceiver> GetCompatibleReceiver(TNode<JSReceiver> receiver, 45 TNode<HeapObject> signature, 46 TNode<Context> context); 47 }; 48 49 } // namespace internal 50 } // namespace v8 51 52 #endif // V8_BUILTINS_BUILTINS_CALL_GEN_H_ 53