33#ifndef LLVM_CLANG_INTERPRETER_VALUE_H
34#define LLVM_CLANG_INTERPRETER_VALUE_H
36#include "llvm/Config/llvm-config.h"
37#include "llvm/Support/Compiler.h"
66#define REPL_EXTERNAL_VISIBILITY __declspec(dllexport)
67#elif __has_attribute(visibility)
68#if defined(LLVM_BUILD_LLVM_DYLIB) || defined(LLVM_BUILD_SHARED_LIBS)
69#define REPL_EXTERNAL_VISIBILITY __attribute__((visibility("default")))
71#define REPL_EXTERNAL_VISIBILITY
74#define REPL_EXTERNAL_VISIBILITY
77#define REPL_BUILTIN_TYPES \
80 X(signed char, SChar) \
81 X(unsigned char, Char_U) \
82 X(unsigned char, UChar) \
84 X(unsigned short, UShort) \
86 X(unsigned int, UInt) \
88 X(unsigned long, ULong) \
89 X(long long, LongLong) \
90 X(unsigned long long, ULongLong) \
93 X(long double, LongDouble)
97#define X(type, name) type m_##name;
101 unsigned char m_RawBits[
sizeof(
long double) * 8];
106#define X(type, name) K_##name,
123 void printType(llvm::raw_ostream &Out)
const;
124 void printData(llvm::raw_ostream &Out)
const;
125 void print(llvm::raw_ostream &Out)
const;
133 bool isValid()
const {
return ValueKind != K_Unspecified; }
134 bool isVoid()
const {
return ValueKind == K_Void; }
135 bool hasValue()
const {
return isValid() && !isVoid(); }
141 void *getPtr()
const;
143 void setRawBits(
void *Ptr,
unsigned NBits =
sizeof(Storage));
145#define X(type, name) \
146 void set##name(type Val) { Data.m_##name = Val; } \
147 type get##name() const { return Data.m_##name; }
165 template <
typename T>
T as()
const {
169#define X(type, name) \
170 case Value::K_##name: \
171 return (T)Data.m_##name;
180 if (
V.isPointerOrObjectType())
182 if (!
V.isValid() ||
V.isVoid()) {
191 if (
V.isPointerOrObjectType())
198 void *OpaqueType =
nullptr;
200 Kind ValueKind = K_Unspecified;
201 bool IsManuallyAlloc =
false;
207 return (
void *)as<uintptr_t>();
static void dump(llvm::raw_ostream &OS, StringRef FunctionName, ArrayRef< CounterExpression > Expressions, ArrayRef< CounterMappingRegion > Regions)
static void print(llvm::raw_ostream &OS, const T &V, ASTContext &ASTCtx, QualType Ty)
#define REPL_EXTERNAL_VISIBILITY
#define REPL_BUILTIN_TYPES
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Provides top-level interfaces for incremental compilation and execution.
A (possibly-)qualified type.
bool isManuallyAlloc() const
bool isPointerOrObjectType() const
REPL_BUILTIN_TYPES T convertTo() const
Get the value with cast.
T as() const
Get to the value with type checking casting the underlying stored value to T.
void setOpaqueType(void *Ty)
The JSON file list parser is used to communicate input to InstallAPI.
const FunctionProtoType * T
Diagnostic wrappers for TextAPI types for error reporting.
__UINTPTR_TYPE__ uintptr_t
An unsigned integer type with the property that any valid pointer to void can be converted to this ty...
static T * cast(const Value &V)
static T cast(const Value &V)