LLVM: include/llvm/Support/ExtensibleRTTI.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60#ifndef LLVM_SUPPORT_EXTENSIBLERTTI_H
61#define LLVM_SUPPORT_EXTENSIBLERTTI_H
62
64
65namespace llvm {
66
67
68
69
70
72public:
74
75
76 static const void *classID() { return &ID; }
77
78
80
81
82 virtual bool isA(const void *const ClassID) const {
83 return ClassID == classID();
84 }
85
86private:
87 virtual void anchor();
88
89 static char ID;
90};
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127template <typename ThisT, typename ParentT, typename... ParentTs>
129public:
130
131 using ParentT::ParentT;
132
133 static const void *classID() { return &ThisT::ID; }
134
135 const void *dynamicClassID() const override { return &ThisT::ID; }
136
137
138 template bool isA() const { return isA(QueryT::classID()); }
139
140 bool isA(const void *const ClassID) const override {
141 return ClassID == classID() || ParentT::isA(ClassID) ||
142 (ParentTs::isA(ClassID) || ...);
143 }
144
145 template static bool classof(const T *R) {
147 }
148};
149
150}
151
152#endif
Inheritance utility for extensible RTTI.
Definition ExtensibleRTTI.h:128
bool isA(const void *const ClassID) const override
Definition ExtensibleRTTI.h:140
bool isA() const
Check whether this instance is a subclass of QueryT.
Definition ExtensibleRTTI.h:138
static const void * classID()
Definition ExtensibleRTTI.h:133
const void * dynamicClassID() const override
Definition ExtensibleRTTI.h:135
static bool classof(const T *R)
Definition ExtensibleRTTI.h:145
Base class for the extensible RTTI hierarchy.
Definition ExtensibleRTTI.h:71
static const void * classID()
Returns the class ID for this type.
Definition ExtensibleRTTI.h:76
virtual bool isA(const void *const ClassID) const
Returns true if this class's ID matches the given class ID.
Definition ExtensibleRTTI.h:82
virtual ~RTTIRoot()=default
virtual const void * dynamicClassID() const =0
Returns the class ID for the dynamic type of this RTTIRoot instance.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
This is an optimization pass for GlobalISel generic memory operations.