clang: lib/AST/ByteCode/Boolean.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9#ifndef LLVM_CLANG_AST_INTERP_BOOLEAN_H

10#define LLVM_CLANG_AST_INTERP_BOOLEAN_H

11

15#include "llvm/ADT/APSInt.h"

16#include "llvm/Support/MathExtras.h"

17#include "llvm/Support/raw_ostream.h"

18#include

19#include

20

23

24

26private:

27

28 bool V;

29

30public:

31

33 explicit Boolean(bool V) : V(V) {}

34

37 bool operator>(unsigned RHS) const { return static_cast<unsigned>(V) > RHS; }

38

43

44 template <typename Ty, typename = std::enable_if_t<std::is_integral_v>>

45 explicit operator Ty() const {

46 return V;

47 }

48

50 return APSInt(APInt(1, static_cast<uint64_t>(V), false), true);

51 }

56

58

59 constexpr static unsigned bitWidth() { return 1; }

60 bool isZero() const { return !V; }

62

63 constexpr static bool isMinusOne() { return false; }

64

65 constexpr static bool isSigned() { return false; }

66

67 constexpr static bool isNegative() { return false; }

69

73

75

77

79

80 bool Val = static_cast<bool>(*Buff);

82 }

83

84 void bitcastToMemory(std::byte *Buff) { std::memcpy(Buff, &V, sizeof(V)); }

85

86 void print(llvm::raw_ostream &OS) const { OS << (V ? "true" : "false"); }

88 std::string NameStr;

89 llvm::raw_string_ostream OS(NameStr);

91 return NameStr;

92 }

93

96

98 if constexpr (std::is_integral::value)

100 return Boolean(static_cast<decltype(Boolean::V)>(Value) != 0);

101 }

102

103 template <unsigned SrcBits, bool SrcSign>

104 static std::enable_if_t<SrcBits != 0, Boolean>

108

110

114

118

123

125 llvm_unreachable("Cannot decrement booleans");

126 }

127

129 *R = Boolean(A.V || B.V);

130 return false;

131 }

132

137

139 *R = Boolean(A.V && B.V);

140 return false;

141 }

142

147

152};

153

154inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const Boolean &B) {

156 return OS;

157}

158

159}

160}

161

162#endif

APValue - This class implements a discriminated union of [uninitialized] [APSInt] [APFloat],...

Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...

Wrapper around boolean types.

Definition Boolean.h:25

Boolean operator-() const

Definition Boolean.h:39

static Boolean from(T Value, unsigned NumBits)

Definition Boolean.h:111

ComparisonCategoryResult compare(const Boolean &RHS) const

Definition Boolean.h:70

static Boolean max(unsigned NumBits)

Definition Boolean.h:95

static Boolean min(unsigned NumBits)

Definition Boolean.h:94

Boolean operator-(const Boolean &Other) const

Definition Boolean.h:40

static bool inv(Boolean A, Boolean *R)

Definition Boolean.h:143

static bool decrement(Boolean A, Boolean *R)

Definition Boolean.h:124

APSInt toAPSInt() const

Definition Boolean.h:49

bool operator>(unsigned RHS) const

Definition Boolean.h:37

APSInt toAPSInt(unsigned NumBits) const

Definition Boolean.h:52

Boolean toUnsigned() const

Definition Boolean.h:57

static constexpr unsigned bitWidth()

Definition Boolean.h:59

static constexpr bool isSigned()

Definition Boolean.h:65

std::string toDiagnosticString(const ASTContext &Ctx) const

Definition Boolean.h:87

bool operator<(Boolean RHS) const

Definition Boolean.h:35

APValue toAPValue(const ASTContext &) const

Definition Boolean.h:55

static Boolean zero()

Definition Boolean.h:109

Boolean truncate(unsigned TruncBits) const

Definition Boolean.h:76

bool isZero() const

Definition Boolean.h:60

bool operator>(Boolean RHS) const

Definition Boolean.h:36

static std::enable_if_t< SrcBits !=0, Boolean > from(Integral< SrcBits, SrcSign > Value)

Definition Boolean.h:105

Boolean operator!() const

Definition Boolean.h:42

static constexpr bool isNegative()

Definition Boolean.h:67

static bool mul(Boolean A, Boolean B, unsigned OpBits, Boolean *R)

Definition Boolean.h:138

unsigned countLeadingZeros() const

Definition Boolean.h:74

void print(llvm::raw_ostream &OS) const

Definition Boolean.h:86

static constexpr bool isPositive()

Definition Boolean.h:68

Boolean()

Zero-initializes a boolean.

Definition Boolean.h:32

static bool neg(Boolean A, Boolean *R)

Definition Boolean.h:148

static Boolean from(T Value)

Definition Boolean.h:97

static bool inRange(int64_t Value, unsigned NumBits)

Definition Boolean.h:115

Boolean(bool V)

Definition Boolean.h:33

bool isMin() const

Definition Boolean.h:61

static bool increment(Boolean A, Boolean *R)

Definition Boolean.h:119

static bool sub(Boolean A, Boolean B, unsigned OpBits, Boolean *R)

Definition Boolean.h:133

static constexpr bool isMinusOne()

Definition Boolean.h:63

static bool add(Boolean A, Boolean B, unsigned OpBits, Boolean *R)

Definition Boolean.h:128

static Boolean bitcastFromMemory(const std::byte *Buff, unsigned BitWidth)

Definition Boolean.h:78

void bitcastToMemory(std::byte *Buff)

Definition Boolean.h:84

Boolean operator~() const

Definition Boolean.h:41

Wrapper around numeric types.

llvm::raw_ostream & operator<<(llvm::raw_ostream &OS, const Boolean &B)

Definition Boolean.h:154

ComparisonCategoryResult Compare(const T &X, const T &Y)

Helper to compare two comparable types.

The JSON file list parser is used to communicate input to InstallAPI.

ComparisonCategoryResult

An enumeration representing the possible results of a three-way comparison.

const FunctionProtoType * T

@ Other

Other implicit parameter.