clang
19.0.0git
lib
AST
Interp
FunctionPointer.h
Go to the documentation of this file.
1
//===--- FunctionPointer.h - Types for the constexpr VM ---------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLVM_CLANG_AST_INTERP_FUNCTION_POINTER_H
10
#define LLVM_CLANG_AST_INTERP_FUNCTION_POINTER_H
11
12
#include "
Function.h
"
13
#include "
Primitives.h
"
14
#include "
clang/AST/APValue.h
"
15
16
namespace
clang
{
17
class
ASTContext;
18
namespace
interp {
19
20
class
FunctionPointer
final {
21
private
:
22
const
Function
*Func;
23
bool
Valid;
24
25
public
:
26
FunctionPointer
(
const
Function
*Func) :
Func
(
Func
), Valid(
true
) {
27
assert(
Func
);
28
}
29
30
FunctionPointer
(
uintptr_t
IntVal = 0,
const
Descriptor
*Desc =
nullptr
)
31
:
Func
(reinterpret_cast<const
Function
*>(IntVal)), Valid(
false
) {}
32
33
const
Function
*
getFunction
()
const
{
return
Func
; }
34
bool
isZero
()
const
{
return
!
Func
; }
35
bool
isValid
()
const
{
return
Valid; }
36
bool
isWeak
()
const
{
37
if
(!
Func
|| !Valid)
38
return
false
;
39
40
return
Func
->getDecl()->isWeak();
41
}
42
43
APValue
toAPValue
()
const
{
44
if
(!
Func
)
45
return
APValue
(
static_cast<
Expr
*
>
(
nullptr
),
CharUnits::Zero
(), {},
46
/*OnePastTheEnd=*/
false
,
/*IsNull=*/
true
);
47
48
if
(!Valid)
49
return
APValue
(
static_cast<
Expr
*
>
(
nullptr
),
50
CharUnits::fromQuantity
(
getIntegerRepresentation
()), {},
51
/*OnePastTheEnd=*/
false
,
/*IsNull=*/
false
);
52
53
return
APValue
(
Func
->getDecl(),
CharUnits::Zero
(), {},
54
/*OnePastTheEnd=*/
false
,
/*IsNull=*/
false
);
55
}
56
57
void
print
(llvm::raw_ostream &OS)
const
{
58
OS <<
"FnPtr("
;
59
if
(
Func
&& Valid)
60
OS <<
Func
->getName();
61
else
if
(
Func
)
62
OS << reinterpret_cast<uintptr_t>(
Func
);
63
else
64
OS <<
"nullptr"
;
65
OS <<
")"
;
66
}
67
68
std::string
toDiagnosticString
(
const
ASTContext
&Ctx)
const
{
69
if
(!
Func
)
70
return
"nullptr"
;
71
72
return
toAPValue
().
getAsString
(Ctx,
Func
->getDecl()->getType());
73
}
74
75
uint64_t
getIntegerRepresentation
()
const
{
76
return
static_cast<
uint64_t
>
(
reinterpret_cast<
uintptr_t
>
(
Func
));
77
}
78
79
ComparisonCategoryResult
compare
(
const
FunctionPointer
&RHS)
const
{
80
if
(
Func
== RHS.Func)
81
return
ComparisonCategoryResult::Equal
;
82
return
ComparisonCategoryResult::Unordered
;
83
}
84
};
85
86
inline
llvm::raw_ostream &
operator<<
(llvm::raw_ostream &OS,
87
FunctionPointer
FP) {
88
FP.
print
(OS);
89
return
OS;
90
}
91
92
}
// namespace interp
93
}
// namespace clang
94
95
#endif
APValue.h
Function.h
Primitives.h
clang::APValue
APValue - This class implements a discriminated union of [uninitialized] [APSInt] [APFloat],...
Definition:
APValue.h:122
clang::APValue::getAsString
std::string getAsString(const ASTContext &Ctx, QualType Ty) const
Definition:
APValue.cpp:946
clang::ASTContext
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Definition:
ASTContext.h:182
clang::CharUnits::fromQuantity
static CharUnits fromQuantity(QuantityType Quantity)
fromQuantity - Construct a CharUnits quantity from a raw integer type.
Definition:
CharUnits.h:63
clang::CharUnits::Zero
static CharUnits Zero()
Zero - Construct a CharUnits quantity of zero.
Definition:
CharUnits.h:53
clang::Expr
This represents one expression.
Definition:
Expr.h:110
clang::interp::FunctionPointer
Definition:
FunctionPointer.h:20
clang::interp::FunctionPointer::isWeak
bool isWeak() const
Definition:
FunctionPointer.h:36
clang::interp::FunctionPointer::FunctionPointer
FunctionPointer(uintptr_t IntVal=0, const Descriptor *Desc=nullptr)
Definition:
FunctionPointer.h:30
clang::interp::FunctionPointer::print
void print(llvm::raw_ostream &OS) const
Definition:
FunctionPointer.h:57
clang::interp::FunctionPointer::getFunction
const Function * getFunction() const
Definition:
FunctionPointer.h:33
clang::interp::FunctionPointer::FunctionPointer
FunctionPointer(const Function *Func)
Definition:
FunctionPointer.h:26
clang::interp::FunctionPointer::compare
ComparisonCategoryResult compare(const FunctionPointer &RHS) const
Definition:
FunctionPointer.h:79
clang::interp::FunctionPointer::getIntegerRepresentation
uint64_t getIntegerRepresentation() const
Definition:
FunctionPointer.h:75
clang::interp::FunctionPointer::isValid
bool isValid() const
Definition:
FunctionPointer.h:35
clang::interp::FunctionPointer::toAPValue
APValue toAPValue() const
Definition:
FunctionPointer.h:43
clang::interp::FunctionPointer::toDiagnosticString
std::string toDiagnosticString(const ASTContext &Ctx) const
Definition:
FunctionPointer.h:68
clang::interp::FunctionPointer::isZero
bool isZero() const
Definition:
FunctionPointer.h:34
clang::interp::Function
Bytecode function.
Definition:
Function.h:77
clang::interp::operator<<
llvm::raw_ostream & operator<<(llvm::raw_ostream &OS, const Boolean &B)
Definition:
Boolean.h:156
clang
The JSON file list parser is used to communicate input to InstallAPI.
Definition:
CalledOnceCheck.h:17
clang::ComparisonCategoryResult
ComparisonCategoryResult
An enumeration representing the possible results of a three-way comparison.
Definition:
ComparisonCategories.h:67
clang::ComparisonCategoryResult::Unordered
@ Unordered
clang::ComparisonCategoryResult::Equal
@ Equal
clang::PredefinedIdentKind::Func
@ Func
uintptr_t
__UINTPTR_TYPE__ uintptr_t
An unsigned integer type with the property that any valid pointer to void can be converted to this ty...
Definition:
opencl-c-base.h:160
true
#define true
Definition:
stdbool.h:21
false
#define false
Definition:
stdbool.h:22
clang::interp::Descriptor
Describes a memory block created by an allocation site.
Definition:
Descriptor.h:88
Generated on Tue Apr 23 2024 18:04:03 for clang by
1.9.6