1 // Copyright 2021 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_COMPILER_FAST_API_CALLS_H_ 6 #define V8_COMPILER_FAST_API_CALLS_H_ 7 8 #include "include/v8-fast-api-calls.h" 9 #include "src/compiler/graph-assembler.h" 10 11 namespace v8 { 12 namespace internal { 13 namespace compiler { 14 namespace fast_api_call { 15 16 struct OverloadsResolutionResult { Invalidv8::internal::compiler::fast_api_call::OverloadsResolutionResult17 static OverloadsResolutionResult Invalid() { 18 return OverloadsResolutionResult(-1, CTypeInfo::Type::kVoid); 19 } 20 OverloadsResolutionResultv8::internal::compiler::fast_api_call::OverloadsResolutionResult21 OverloadsResolutionResult(int distinguishable_arg_index_, 22 CTypeInfo::Type element_type_) 23 : distinguishable_arg_index(distinguishable_arg_index_), 24 element_type(element_type_) { 25 DCHECK(distinguishable_arg_index_ < 0 || 26 element_type_ != CTypeInfo::Type::kVoid); 27 } 28 29 bool is_valid() const { return distinguishable_arg_index >= 0; } 30 31 // The index of the distinguishable overload argument. Only the case where the 32 // types of this argument is a JSArray vs a TypedArray is supported. 33 int distinguishable_arg_index; 34 35 // The element type in the typed array argument. 36 CTypeInfo::Type element_type; 37 }; 38 39 ElementsKind GetTypedArrayElementsKind(CTypeInfo::Type type); 40 41 OverloadsResolutionResult ResolveOverloads( 42 Zone* zone, const FastApiCallFunctionVector& candidates, 43 unsigned int arg_count); 44 45 bool CanOptimizeFastSignature(const CFunctionInfo* c_signature); 46 47 } // namespace fast_api_call 48 } // namespace compiler 49 } // namespace internal 50 } // namespace v8 51 52 #endif // V8_COMPILER_FAST_API_CALLS_H_ 53