Emulation of the CINT CallFunc class.
The CINT C++ interpreter provides an interface for calling functions through the generated wrappers in dictionaries with the CallFunc class. This class provides the same functionality, using an interface as close as possible to CallFunc but the function metadata and calling service comes from the Cling C++ interpreter and the Clang C++ compiler, not CINT.
Definition at line 60 of file TClingCallFunc.h.
Public Member Functions | |
TClingCallFunc (cling::Interpreter *interp) | |
TClingCallFunc (const TClingCallFunc &rhs) | |
TClingCallFunc (const TClingMethodInfo &minfo) | |
~TClingCallFunc ()=default | |
void | Exec (void *address, TInterpreterValue *interpVal=0) |
void * | ExecDefaultConstructor (const TClingClassInfo *info, ROOT::TMetaUtils::EIOCtorCategory kind, const std::string &type_name, void *address=nullptr, unsigned long nary=0UL) |
void | ExecDestructor (const TClingClassInfo *info, void *address=nullptr, unsigned long nary=0UL, bool withFree=true) |
double | ExecDouble (void *address) |
Longptr_t | ExecInt (void *address) |
long long | ExecInt64 (void *address) |
void | ExecWithArgsAndReturn (void *address, const void *args[]=0, int nargs=0, void *ret=0) |
void | ExecWithReturn (void *address, void *ret=nullptr) |
TClingMethodInfo * | FactoryMethod () const |
int | get_wrapper_code (std::string &wrapper_name, std::string &wrapper) |
const clang::FunctionDecl * | GetDecl () |
const clang::FunctionDecl * | GetDecl () const |
const clang::DeclContext * | GetDeclContext () const |
const clang::Decl * | GetFunctionOrShadowDecl () const |
TInterpreter::CallFuncIFacePtr_t | IFacePtr () |
void | IgnoreExtraArgs (bool ignore) |
void | Init () |
void | Init (const TClingMethodInfo &) |
void | Init (std::unique_ptr< TClingMethodInfo >) |
void * | InterfaceMethod () |
void | Invoke (cling::Value *result=0) const |
bool | IsValid () const |
TClingCallFunc & | operator= (const TClingCallFunc &rhs)=delete |
void | ResetArg () |
template<typename T , std::enable_if_t< std::is_fundamental< T >::value, bool > = true> | |
void | SetArg (T arg) |
void | SetArgArray (Longptr_t *argArr, int narg) |
void | SetArgs (const char *args) |
void | SetFunc (const TClingClassInfo *info, const char *method, const char *arglist, bool objectIsConst, Longptr_t *poffset) |
void | SetFunc (const TClingClassInfo *info, const char *method, const char *arglist, Longptr_t *poffset) |
void | SetFunc (const TClingMethodInfo *info) |
void | SetFuncProto (const TClingClassInfo *info, const char *method, const char *proto, bool objectIsConst, Longptr_t *poffset, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch) |
void | SetFuncProto (const TClingClassInfo *info, const char *method, const char *proto, Longptr_t *poffset, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch) |
void | SetFuncProto (const TClingClassInfo *info, const char *method, const llvm::SmallVectorImpl< clang::QualType > &proto, bool objectIsConst, Longptr_t *poffset, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch) |
void | SetFuncProto (const TClingClassInfo *info, const char *method, const llvm::SmallVectorImpl< clang::QualType > &proto, Longptr_t *poffset, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch) |
Private Types | |
enum | EReferenceType { kNotReference , kLValueReference , kRValueReference } |
using | ExecWithRetFunc_t = std::function< void(void *address, cling::Value &ret)> |
Private Member Functions | |
size_t | CalculateMinRequiredArguments () |
void | collect_type_info (clang::QualType &QT, std::ostringstream &typedefbuf, std::ostringstream &callbuf, std::string &type_name, EReferenceType &refType, bool &isPointer, int indent_level, bool forArgument) |
void * | compile_wrapper (const std::string &wrapper_name, const std::string &wrapper, bool withAccessControl=true) |
void | EvaluateArgList (const std::string &ArgList) |
void | exec (void *address, void *ret) |
void | exec_with_valref_return (void *address, cling::Value &ret) |
template<typename T > | |
T | ExecT (void *address) |
size_t | GetMinRequiredArguments () |
tcling_callfunc_ctor_Wrapper_t | make_ctor_wrapper (const TClingClassInfo *, ROOT::TMetaUtils::EIOCtorCategory, const std::string &) |
tcling_callfunc_dtor_Wrapper_t | make_dtor_wrapper (const TClingClassInfo *info) |
void | make_narg_call (const std::string &return_type, const unsigned N, std::ostringstream &typedefbuf, std::ostringstream &callbuf, const std::string &class_name, int indent_level) |
void | make_narg_call_with_return (const unsigned N, const std::string &class_name, std::ostringstream &buf, int indent_level) |
void | make_narg_ctor (const unsigned N, std::ostringstream &typedefbuf, std::ostringstream &callbuf, const std::string &class_name, int indent_level) |
void | make_narg_ctor_with_return (const unsigned N, const std::string &class_name, std::ostringstream &buf, int indent_level) |
tcling_callfunc_Wrapper_t | make_wrapper () |
Private Attributes | |
llvm::SmallVector< cling::Value, 8 > | fArgVals |
Stored function arguments, we own. | |
const clang::FunctionDecl * | fDecl = nullptr |
Decl for the method. | |
cling::Interpreter * | fInterp |
Cling interpreter, we do not own. | |
std::unique_ptr< TClingMethodInfo > | fMethod |
Current method, we own. | |
size_t | fMinRequiredArguments = -1 |
Number of required arguments. | |
std::atomic< tcling_callfunc_Wrapper_t > | fWrapper |
Pointer to compiled wrapper, we do not own. | |
|
private |
Definition at line 84 of file TClingCallFunc.h.
|
private |
Enumerator | |
---|---|
kNotReference | |
kLValueReference | |
kRValueReference |
Definition at line 78 of file TClingCallFunc.h.
|
default |
|
inlineexplicit |
Definition at line 141 of file TClingCallFunc.h.
|
inlineexplicit |
Definition at line 147 of file TClingCallFunc.h.
|
inline |
Definition at line 154 of file TClingCallFunc.h.
|
private |
Definition at line 133 of file TClingCallFunc.cxx.
|
private |
Definition at line 158 of file TClingCallFunc.cxx.
|
private |
Definition at line 139 of file TClingCallFunc.cxx.
|
private |
Definition at line 1544 of file TClingCallFunc.cxx.
void TClingCallFunc::Exec | ( | void * | address, |
TInterpreterValue * | interpVal = 0 |
||
) |
Definition at line 1568 of file TClingCallFunc.cxx.
|
private |
Definition at line 1447 of file TClingCallFunc.cxx.
|
private |
Definition at line 1522 of file TClingCallFunc.cxx.
void * TClingCallFunc::ExecDefaultConstructor | ( | const TClingClassInfo * | info, |
ROOT::TMetaUtils::EIOCtorCategory | kind, | ||
const std::string & | type_name, | ||
void * | address = nullptr , |
||
unsigned long | nary = 0UL |
||
) |
Definition at line 1643 of file TClingCallFunc.cxx.
void TClingCallFunc::ExecDestructor | ( | const TClingClassInfo * | info, |
void * | address = nullptr , |
||
unsigned long | nary = 0UL , |
||
bool | withFree = true |
||
) |
Definition at line 1681 of file TClingCallFunc.cxx.
double TClingCallFunc::ExecDouble | ( | void * | address | ) |
Definition at line 1615 of file TClingCallFunc.cxx.
Longptr_t TClingCallFunc::ExecInt | ( | void * | address | ) |
Definition at line 1605 of file TClingCallFunc.cxx.
long long TClingCallFunc::ExecInt64 | ( | void * | address | ) |
Definition at line 1610 of file TClingCallFunc.cxx.
|
private |
Definition at line 1585 of file TClingCallFunc.cxx.
void TClingCallFunc::ExecWithArgsAndReturn | ( | void * | address, |
const void * | args[] = 0 , |
||
int | nargs = 0 , |
||
void * | ret = 0 |
||
) |
Definition at line 1620 of file TClingCallFunc.cxx.
void TClingCallFunc::ExecWithReturn | ( | void * | address, |
void * | ret = nullptr |
||
) |
Definition at line 1632 of file TClingCallFunc.cxx.
TClingMethodInfo * TClingCallFunc::FactoryMethod | ( | ) | const |
Definition at line 1709 of file TClingCallFunc.cxx.
int TClingCallFunc::get_wrapper_code | ( | std::string & | wrapper_name, |
std::string & | wrapper | ||
) |
Definition at line 533 of file TClingCallFunc.cxx.
|
inline |
Definition at line 190 of file TClingCallFunc.h.
|
inline |
Definition at line 196 of file TClingCallFunc.h.
const clang::DeclContext * TClingCallFunc::GetDeclContext | ( | ) | const |
Definition at line 529 of file TClingCallFunc.cxx.
|
inline |
Definition at line 201 of file TClingCallFunc.h.
|
inlineprivate |
Definition at line 126 of file TClingCallFunc.h.
TInterpreter::CallFuncIFacePtr_t TClingCallFunc::IFacePtr | ( | ) |
Definition at line 1765 of file TClingCallFunc.cxx.
|
inline |
Definition at line 178 of file TClingCallFunc.h.
void TClingCallFunc::Init | ( | ) |
Definition at line 1714 of file TClingCallFunc.cxx.
void TClingCallFunc::Init | ( | const TClingMethodInfo & | minfo | ) |
Definition at line 1723 of file TClingCallFunc.cxx.
void TClingCallFunc::Init | ( | std::unique_ptr< TClingMethodInfo > | minfo | ) |
Definition at line 1729 of file TClingCallFunc.cxx.
void * TClingCallFunc::InterfaceMethod | ( | ) |
Definition at line 1735 of file TClingCallFunc.cxx.
void TClingCallFunc::Invoke | ( | cling::Value * | result = 0 | ) | const |
bool TClingCallFunc::IsValid | ( | ) | const |
Definition at line 1757 of file TClingCallFunc.cxx.
|
private |
Definition at line 1072 of file TClingCallFunc.cxx.
|
private |
Definition at line 1283 of file TClingCallFunc.cxx.
|
private |
Definition at line 318 of file TClingCallFunc.cxx.
|
private |
Definition at line 918 of file TClingCallFunc.cxx.
|
private |
Definition at line 259 of file TClingCallFunc.cxx.
|
private |
Definition at line 447 of file TClingCallFunc.cxx.
|
private |
Definition at line 1047 of file TClingCallFunc.cxx.
|
delete |
void TClingCallFunc::ResetArg | ( | ) |
Definition at line 1790 of file TClingCallFunc.cxx.
|
inline |
Definition at line 206 of file TClingCallFunc.h.
Definition at line 1795 of file TClingCallFunc.cxx.
void TClingCallFunc::SetArgs | ( | const char * | args | ) |
Definition at line 1803 of file TClingCallFunc.cxx.
void TClingCallFunc::SetFunc | ( | const TClingClassInfo * | info, |
const char * | method, | ||
const char * | arglist, | ||
bool | objectIsConst, | ||
Longptr_t * | poffset | ||
) |
Definition at line 1815 of file TClingCallFunc.cxx.
void TClingCallFunc::SetFunc | ( | const TClingClassInfo * | info, |
const char * | method, | ||
const char * | arglist, | ||
Longptr_t * | poffset | ||
) |
Definition at line 1809 of file TClingCallFunc.cxx.
void TClingCallFunc::SetFunc | ( | const TClingMethodInfo * | info | ) |
Definition at line 1843 of file TClingCallFunc.cxx.
void TClingCallFunc::SetFuncProto | ( | const TClingClassInfo * | info, |
const char * | method, | ||
const char * | proto, | ||
bool | objectIsConst, | ||
Longptr_t * | poffset, | ||
ROOT::EFunctionMatchMode | mode = ROOT::kConversionMatch |
||
) |
Definition at line 1859 of file TClingCallFunc.cxx.
void TClingCallFunc::SetFuncProto | ( | const TClingClassInfo * | info, |
const char * | method, | ||
const char * | proto, | ||
Longptr_t * | poffset, | ||
ROOT::EFunctionMatchMode | mode = ROOT::kConversionMatch |
||
) |
Definition at line 1852 of file TClingCallFunc.cxx.
void TClingCallFunc::SetFuncProto | ( | const TClingClassInfo * | info, |
const char * | method, | ||
const llvm::SmallVectorImpl< clang::QualType > & | proto, | ||
bool | objectIsConst, | ||
Longptr_t * | poffset, | ||
ROOT::EFunctionMatchMode | mode = ROOT::kConversionMatch |
||
) |
Definition at line 1887 of file TClingCallFunc.cxx.
void TClingCallFunc::SetFuncProto | ( | const TClingClassInfo * | info, |
const char * | method, | ||
const llvm::SmallVectorImpl< clang::QualType > & | proto, | ||
Longptr_t * | poffset, | ||
ROOT::EFunctionMatchMode | mode = ROOT::kConversionMatch |
||
) |
Definition at line 1880 of file TClingCallFunc.cxx.
|
mutableprivate |
Stored function arguments, we own.
Definition at line 75 of file TClingCallFunc.h.
|
private |
Decl for the method.
Definition at line 69 of file TClingCallFunc.h.
|
private |
Cling interpreter, we do not own.
Definition at line 65 of file TClingCallFunc.h.
|
private |
Current method, we own.
Definition at line 67 of file TClingCallFunc.h.
|
private |
Number of required arguments.
Definition at line 71 of file TClingCallFunc.h.
|
private |
Pointer to compiled wrapper, we do not own.
Definition at line 73 of file TClingCallFunc.h.