xref: /freebsd/contrib/llvm-project/clang/lib/AST/ByteCode/FunctionPointer.cpp (revision 770cf0a5f02dc8983a89c6568d741fbc25baa999)
1 //===----------------------- FunctionPointer.cpp ----------------*- 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 #include "FunctionPointer.h"
10 
11 namespace clang {
12 namespace interp {
13 
14 APValue FunctionPointer::toAPValue(const ASTContext &) const {
15   if (!Func)
16     return APValue(static_cast<Expr *>(nullptr), CharUnits::Zero(), {},
17                    /*OnePastTheEnd=*/false, /*IsNull=*/true);
18 
19   if (Func->getDecl())
20     return APValue(Func->getDecl(), CharUnits::fromQuantity(0), {},
21                    /*OnePastTheEnd=*/false, /*IsNull=*/false);
22   return APValue(Func->getExpr(), CharUnits::fromQuantity(0), {},
23                  /*OnePastTheEnd=*/false, /*IsNull=*/false);
24 }
25 
26 void FunctionPointer::print(llvm::raw_ostream &OS) const {
27   OS << "FnPtr(";
28   if (Func)
29     OS << Func->getName();
30   else
31     OS << "nullptr";
32   OS << ")";
33 }
34 
35 } // namespace interp
36 } // namespace clang
37