13#ifndef LLVM_CLANG_AST_INTERP_TYPE_H
14#define LLVM_CLANG_AST_INTERP_TYPE_H
16#include "llvm/Support/raw_ostream.h"
29template <
bool Signed>
class IntegralAP;
30template <
unsigned Bits,
bool Signed>
class Integral;
59inline llvm::raw_ostream &
operator<<(llvm::raw_ostream &OS,
63 OS <<
"reinterpret_cast";
104constexpr size_t align(
size_t Size) {
105 return ((Size +
alignof(
void *) - 1) /
alignof(
void *)) *
alignof(
void *);
109static_assert(
aligned(
sizeof(
void *)));
120#define TYPE_SWITCH_CASE(Name, B) \
121 case Name: { using T = PrimConv<Name>::T; B; break; }
122#define TYPE_SWITCH(Expr, B) \
125 TYPE_SWITCH_CASE(PT_Sint8, B) \
126 TYPE_SWITCH_CASE(PT_Uint8, B) \
127 TYPE_SWITCH_CASE(PT_Sint16, B) \
128 TYPE_SWITCH_CASE(PT_Uint16, B) \
129 TYPE_SWITCH_CASE(PT_Sint32, B) \
130 TYPE_SWITCH_CASE(PT_Uint32, B) \
131 TYPE_SWITCH_CASE(PT_Sint64, B) \
132 TYPE_SWITCH_CASE(PT_Uint64, B) \
133 TYPE_SWITCH_CASE(PT_IntAP, B) \
134 TYPE_SWITCH_CASE(PT_IntAPS, B) \
135 TYPE_SWITCH_CASE(PT_Float, B) \
136 TYPE_SWITCH_CASE(PT_Bool, B) \
137 TYPE_SWITCH_CASE(PT_Ptr, B) \
138 TYPE_SWITCH_CASE(PT_FnPtr, B) \
139 TYPE_SWITCH_CASE(PT_MemberPtr, B) \
143#define INT_TYPE_SWITCH(Expr, B) \
146 TYPE_SWITCH_CASE(PT_Sint8, B) \
147 TYPE_SWITCH_CASE(PT_Uint8, B) \
148 TYPE_SWITCH_CASE(PT_Sint16, B) \
149 TYPE_SWITCH_CASE(PT_Uint16, B) \
150 TYPE_SWITCH_CASE(PT_Sint32, B) \
151 TYPE_SWITCH_CASE(PT_Uint32, B) \
152 TYPE_SWITCH_CASE(PT_Sint64, B) \
153 TYPE_SWITCH_CASE(PT_Uint64, B) \
154 TYPE_SWITCH_CASE(PT_IntAP, B) \
155 TYPE_SWITCH_CASE(PT_IntAPS, B) \
156 TYPE_SWITCH_CASE(PT_Bool, B) \
158 llvm_unreachable("Not an integer value"); \
162#define INT_TYPE_SWITCH_NO_BOOL(Expr, B) \
165 TYPE_SWITCH_CASE(PT_Sint8, B) \
166 TYPE_SWITCH_CASE(PT_Uint8, B) \
167 TYPE_SWITCH_CASE(PT_Sint16, B) \
168 TYPE_SWITCH_CASE(PT_Uint16, B) \
169 TYPE_SWITCH_CASE(PT_Sint32, B) \
170 TYPE_SWITCH_CASE(PT_Uint32, B) \
171 TYPE_SWITCH_CASE(PT_Sint64, B) \
172 TYPE_SWITCH_CASE(PT_Uint64, B) \
173 TYPE_SWITCH_CASE(PT_IntAP, B) \
174 TYPE_SWITCH_CASE(PT_IntAPS, B) \
176 llvm_unreachable("Not an integer value"); \
180#define COMPOSITE_TYPE_SWITCH(Expr, B, D) \
183 TYPE_SWITCH_CASE(PT_Ptr, B) \
184 default: { D; break; } \
The base class of the type hierarchy.
Wrapper around boolean types.
Wrapper around numeric types.
A pointer to a memory block, live or dead.
constexpr bool aligned(uintptr_t Value)
constexpr bool isPtrType(PrimType T)
constexpr size_t align(size_t Size)
Aligns a size to the pointer alignment.
PrimType
Enumeration of the primitive types of the VM.
llvm::raw_ostream & operator<<(llvm::raw_ostream &OS, const Boolean &B)
size_t primSize(PrimType Type)
Returns the size of a primitive type in bytes.
constexpr bool isIntegralType(PrimType T)
The JSON file list parser is used to communicate input to InstallAPI.
const FunctionProtoType * T
__UINTPTR_TYPE__ uintptr_t
An unsigned integer type with the property that any valid pointer to void can be converted to this ty...
Mapping from primitive types to their representation.