mini-llvm 0.1.0
Loading...
Searching...
No Matches
Constant.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2
3#pragma once
4
5#include <concepts>
6#include <format>
7#include <string>
8
11
12namespace mini_llvm::mir {
13
15public:
16 virtual ~Constant() = default;
17
18 Constant() = default;
19
20 Constant(const Constant &) = delete;
21 Constant &operator=(const Constant &) = delete;
22
23 Constant(Constant &&) = delete;
25
26 virtual int size() const = 0;
27 virtual std::string format() const = 0;
28 virtual void accept(ConstantVisitor &visitor) = 0;
29 virtual void accept(ConstantVisitor &visitor) const = 0;
30};
31
32} // namespace mini_llvm::mir
33
34template <typename ConstantT>
35 requires std::derived_from<ConstantT, mini_llvm::mir::Constant>
36struct std::formatter<ConstantT> {
37 constexpr auto parse(std::format_parse_context &ctx) {
38 return ctx.begin();
39 }
40
41 template <typename FormatContext>
42 auto format(const ConstantT &C, FormatContext &ctx) const {
43 return std::format_to(ctx.out(), "{}", C.format());
44 }
45};
#define MINI_LLVM_EXPORT
Definition Compiler.h:17
Definition ConstantVisitor.h:24
virtual void accept(ConstantVisitor &visitor) const =0
Constant & operator=(const Constant &)=delete
Constant(Constant &&)=delete
Constant(const Constant &)=delete
virtual int size() const =0
virtual ~Constant()=default
virtual void accept(ConstantVisitor &visitor)=0
Constant & operator=(Constant &&)=delete
virtual std::string format() const =0
Definition BasicBlock.h:22
constexpr auto parse(std::format_parse_context &ctx)
Definition Constant.h:37
auto format(const ConstantT &C, FormatContext &ctx) const
Definition Constant.h:42