// 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 #include "explorer/interpreter/builtins.h" #include "explorer/common/error_builders.h" using llvm::dyn_cast; namespace Carbon { void Builtins::Register(Nonnull decl) { if (auto* interface = dyn_cast(decl)) { if (interface->name() == GetName(Builtin::ImplicitAs)) { builtins_[static_cast(Builtin::ImplicitAs)] = interface; } if (interface->name() == GetName(Builtin::As)) { builtins_[static_cast(Builtin::As)] = interface; } } } auto Builtins::Get(SourceLocation source_loc, Builtin builtin) const -> ErrorOr> { std::optional result = builtins_[static_cast(builtin)]; if (!result.has_value()) { return CompilationError(source_loc) << "missing declaration for builtin `" << GetName(builtin) << "`"; } return result.value(); } } // namespace Carbon