// Part of the Carbon Language project, under the Apache License v2.0 with LLVM // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #ifndef CARBON_TOOLCHAIN_SEM_IR_BUILTIN_FUNCTION_KIND_H_ #define CARBON_TOOLCHAIN_SEM_IR_BUILTIN_FUNCTION_KIND_H_ #include #include "common/enum_base.h" #include "toolchain/sem_ir/ids.h" namespace Carbon::SemIR { class File; CARBON_DEFINE_RAW_ENUM_CLASS(BuiltinFunctionKind, std::uint8_t) { #define CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(Name) \ CARBON_RAW_ENUM_ENUMERATOR(Name) #include "toolchain/sem_ir/builtin_function_kind.def" }; // A kind of builtin function. class BuiltinFunctionKind : public CARBON_ENUM_BASE(BuiltinFunctionKind) { public: #define CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(Name) \ CARBON_ENUM_CONSTANT_DECL(Name) #include "toolchain/sem_ir/builtin_function_kind.def" using EnumBase::AsInt; using EnumBase::FromInt; // Returns the builtin function kind with the given name, or None if the name // is unknown. static auto ForBuiltinName(llvm::StringRef name) -> BuiltinFunctionKind; // Determines whether this builtin function kind can have the specified // function type. auto IsValidType(const File& sem_ir, llvm::ArrayRef call_params, TypeId return_type) const -> bool; // Returns whether this is a compile-time-only function. auto IsCompTimeOnly(const File& sem_ir, llvm::ArrayRef arg_ids, TypeId return_type_id) const -> bool; }; #define CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(Name) \ CARBON_ENUM_CONSTANT_DEFINITION(BuiltinFunctionKind, Name) #include "toolchain/sem_ir/builtin_function_kind.def" } // namespace Carbon::SemIR #endif // CARBON_TOOLCHAIN_SEM_IR_BUILTIN_FUNCTION_KIND_H_