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"
65#define REPL_EXTERNAL_VISIBILITY __declspec(dllexport)
66#elif __has_attribute(visibility)
67#if defined(LLVM_BUILD_LLVM_DYLIB) || defined(LLVM_BUILD_SHARED_LIBS)
68#define REPL_EXTERNAL_VISIBILITY __attribute__((visibility("default")))
70#define REPL_EXTERNAL_VISIBILITY
73#define REPL_EXTERNAL_VISIBILITY
76#define REPL_BUILTIN_TYPES \
79 X(signed char, SChar) \
80 X(unsigned char, Char_U) \
81 X(unsigned char, UChar) \
83 X(unsigned short, UShort) \
85 X(unsigned int, UInt) \
87 X(unsigned long, ULong) \
88 X(long long, LongLong) \
89 X(unsigned long long, ULongLong) \
92 X(long double, LongDouble)
96#define X(type, name) type m_##name;
104#define X(type, name) K_##name,
121 void printType(llvm::raw_ostream &Out)
const;
122 void printData(llvm::raw_ostream &Out)
const;
123 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;
144#define X(type, name) \
145 void set##name(type Val) { Data.m_##name = Val; } \
146 type get##name() const { return Data.m_##name; }
164 template <
typename T>
T as()
const {
168#define X(type, name) \
169 case Value::K_##name: \
170 return (T)Data.m_##name;
179 if (
V.isPointerOrObjectType())
181 if (!
V.isValid() ||
V.isVoid()) {
190 if (
V.isPointerOrObjectType())
197 void *OpaqueType =
nullptr;
199 Kind ValueKind = K_Unspecified;
200 bool IsManuallyAlloc =
false;
206 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)