mini-llvm 0.1.0
Loading...
Searching...
No Matches
FunctionType.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2
3#pragma once
4
5#include <cstddef>
6#include <cstdint>
7#include <cstdlib>
8#include <memory>
9#include <ranges>
10#include <string>
11#include <utility>
12#include <vector>
13
15#include "mini-llvm/ir/Type.h"
19
20namespace mini_llvm::ir {
21
22class MINI_LLVM_EXPORT FunctionType final : public Type {
23public:
25
26 FunctionType(std::unique_ptr<Type> returnType, std::vector<std::unique_ptr<Type>> paramTypes, bool isVarArgs)
27 : returnType_(std::move(returnType)), paramTypes_(std::move(paramTypes)), isVarArgs_(isVarArgs) {}
28
29 std::unique_ptr<Type> returnType() const {
30 return returnType_->clone();
31 }
32
34 return param_type_iterator(paramTypes_.begin());
35 }
36
38 return param_type_iterator(paramTypes_.end());
39 }
40
41 bool param_type_empty() const {
42 return paramTypes_.empty();
43 }
44
45 size_t param_type_size() const {
46 return paramTypes_.size();
47 }
48
49 bool isVarArgs() const {
50 return isVarArgs_;
51 }
52
53 int size() const override {
54 abort();
55 }
56
57 int alignment() const override {
58 abort();
59 }
60
61 std::unique_ptr<Constant> zeroValue() const override {
62 abort();
63 }
64
65 std::unique_ptr<Constant> constant(int64_t) const override {
66 abort();
67 }
68
69 std::unique_ptr<Type> promoted() const override {
70 abort();
71 }
72
73 std::unique_ptr<Type> demoted() const override {
74 abort();
75 }
76
77 std::string format() const override;
78 std::unique_ptr<Type> clone() const override;
79
80 void accept(TypeVisitor &visitor) override {
81 visitor.visitFunctionType(*this);
82 }
83
84 void accept(TypeVisitor &visitor) const override {
85 visitor.visitFunctionType(*this);
86 }
87
88protected:
89 bool equals(const Type &other) const override;
90
91private:
92 std::unique_ptr<Type> returnType_;
93 std::vector<std::unique_ptr<Type>> paramTypes_;
94 bool isVarArgs_;
95};
96
97inline auto paramTypes(const FunctionType &type) {
98 return std::ranges::subrange(type.param_type_begin(), type.param_type_end());
99}
100
101} // namespace mini_llvm::ir
#define MINI_LLVM_EXPORT
Definition Compiler.h:17
Definition IndirectIterator.h:16
Definition FunctionType.h:22
std::unique_ptr< Type > promoted() const override
Definition FunctionType.h:69
std::unique_ptr< Type > clone() const override
bool equals(const Type &other) const override
size_t param_type_size() const
Definition FunctionType.h:45
std::unique_ptr< Constant > constant(int64_t) const override
Definition FunctionType.h:65
bool isVarArgs() const
Definition FunctionType.h:49
std::unique_ptr< Type > returnType() const
Definition FunctionType.h:29
FunctionType(std::unique_ptr< Type > returnType, std::vector< std::unique_ptr< Type > > paramTypes, bool isVarArgs)
Definition FunctionType.h:26
param_type_iterator param_type_begin() const
Definition FunctionType.h:33
param_type_iterator param_type_end() const
Definition FunctionType.h:37
std::unique_ptr< Constant > zeroValue() const override
Definition FunctionType.h:61
int alignment() const override
Definition FunctionType.h:57
std::string format() const override
void accept(TypeVisitor &visitor) override
Definition FunctionType.h:80
bool param_type_empty() const
Definition FunctionType.h:41
IndirectIterator< std::vector< std::unique_ptr< Type > >::const_iterator, Type > param_type_iterator
Definition FunctionType.h:24
std::unique_ptr< Type > demoted() const override
Definition FunctionType.h:73
void accept(TypeVisitor &visitor) const override
Definition FunctionType.h:84
int size() const override
Definition FunctionType.h:53
Definition TypeVisitor.h:25
virtual void visitFunctionType(FunctionType &type)
Definition TypeVisitor.h:41
Definition Argument.h:13
auto paramTypes(const FunctionType &type)
Definition FunctionType.h:97