15#ifndef LLVM_CLANG_AST_INTERP_FUNCTION_H
16#define LLVM_CLANG_AST_INTERP_FUNCTION_H
22#include "llvm/Support/raw_ostream.h"
48 llvm::iterator_range<LocalVectorTy::const_iterator>
locals()
const {
49 return llvm::make_range(Descriptors.begin(), Descriptors.end());
112 llvm::iterator_range<llvm::SmallVector<Scope, 2>::const_iterator>
114 return llvm::make_range(Scopes.begin(), Scopes.end());
121 return llvm::reverse(ParamTypes);
144 if (
const auto *MD = dyn_cast<CXXMethodDecl>(F))
152 if (
const auto *MD = dyn_cast<CXXMethodDecl>(F))
153 return MD->isLambdaStaticInvoker();
160 if (
const auto *MD = dyn_cast<CXXMethodDecl>(F))
187 return ParamOffsets[ParamIndex];
194 llvm::DenseMap<unsigned, ParamDescriptor> &&Params,
196 bool HasRVO,
bool UnevaluatedBuiltin);
199 void setCode(
unsigned NewFrameSize, std::vector<std::byte> &&NewCode,
202 FrameSize = NewFrameSize;
203 Code = std::move(NewCode);
204 SrcMap = std::move(NewSrcMap);
205 Scopes = std::move(NewScopes);
207 HasBody = NewHasBody;
210 void setIsFullyCompiled(
bool FC) { IsFullyCompiled = FC; }
211 void setDefined(
bool D) { Defined = D; }
224 unsigned FrameSize = 0;
228 std::vector<std::byte> Code;
236 llvm::DenseMap<unsigned, ParamDescriptor> Params;
240 bool IsValid =
false;
243 bool IsFullyCompiled =
false;
246 bool HasThisPointer =
false;
252 bool HasBody =
false;
253 bool Defined =
false;
254 bool Variadic =
false;
255 bool IsUnevaluatedBuiltin =
false;
260 void dump(llvm::raw_ostream &OS)
const;
This file provides some common utility functions for processing Lambda related AST Constructs.
Represents a C++ struct/union/class.
DeclContext * getParent()
getParent - Returns the containing DeclContext.
Represents a function declaration or definition.
unsigned getBuiltinID(bool ConsiderWrapperFunctions=false) const
Returns a value indicating whether this function corresponds to a builtin function.
std::string getQualifiedNameAsString() const
Encodes a location in the source.
An emitter which links the program to bytecode for later use.
Pointer into the code segment.
Scope & getScope(unsigned Idx)
Returns a specific scope.
CodePtr getCodeBegin() const
Returns a pointer to the start of the code.
SourceLocation getLoc() const
Returns the location.
bool isDestructor() const
Checks if the function is a destructor.
CodePtr getCodeEnd() const
Returns a pointer to the end of the code.
const std::string getName() const
Returns the name of the function decl this code was generated for.
unsigned getNumParams() const
bool isDefined() const
Checks if the function is defined.
std::pair< PrimType, Descriptor * > ParamDescriptor
const CXXRecordDecl * getParentDecl() const
Returns the parent record decl, if any.
unsigned getFrameSize() const
Returns the size of the function's local stack.
bool isLambdaCallOperator() const
Returns whether this function is the call operator of a lambda record decl.
bool isFullyCompiled() const
Checks if the function is fully done compiling.
bool isConstructor() const
Checks if the function is a constructor.
unsigned getParamOffset(unsigned ParamIndex) const
const FunctionDecl * getDecl() const
Returns the original FunctionDecl.
bool hasBody() const
Checks if the function already has a body attached.
bool hasThisPointer() const
bool isVirtual() const
Checks if the function is virtual.
unsigned getBuiltinID() const
void dump() const
Dumps the disassembled bytecode to llvm::errs().
bool isUnevaluatedBuiltin() const
llvm::iterator_range< arg_reverse_iterator > args_reverse() const
bool isConstexpr() const
Checks if the function is valid to call in constexpr.
const Scope & getScope(unsigned Idx) const
unsigned getArgSize() const
Returns the size of the argument stack.
bool isLambdaStaticInvoker() const
Returns whether this function is a lambda static invoker, which we generate custom byte code for.
SmallVectorImpl< PrimType >::const_reverse_iterator arg_reverse_iterator
Range over argument types.
SourceInfo getSource(CodePtr PC) const
Returns the source information at a given PC.
ParamDescriptor getParamDescriptor(unsigned Offset) const
Returns a parameter descriptor.
llvm::iterator_range< llvm::SmallVector< Scope, 2 >::const_iterator > scopes() const
Range over the scope blocks.
bool hasRVO() const
Checks if the first argument is a RVO pointer.
The program contains and links the bytecode for all functions.
llvm::SmallVector< Local, 8 > LocalVectorTy
llvm::iterator_range< LocalVectorTy::const_iterator > locals() const
Scope(LocalVectorTy &&Descriptors)
Describes the statement/declaration an opcode was generated from.
std::vector< std::pair< unsigned, SourceInfo > > SourceMap
PrimType
Enumeration of the primitive types of the VM.
bool isLambdaCallOperator(const CXXMethodDecl *MD)
Describes a memory block created by an allocation site.
Information about a local's storage.
unsigned Offset
Offset of the local in frame.
Descriptor * Desc
Descriptor of the local.