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 59 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 >) |
template<class T > | |
TClingCallFunc::ExecWithRetFunc_t | InitRetAndExecIntegral (QualType QT, cling::Value &ret) |
void * | InterfaceMethod () |
void | Invoke (cling::Value *result=0) const |
bool | IsValid () const |
TClingCallFunc & | operator= (const TClingCallFunc &rhs)=delete |
void | ResetArg () |
void | SetArg (double arg) |
void | SetArg (float arg) |
void | SetArg (long arg) |
void | SetArg (long long arg) |
void | SetArg (unsigned long arg) |
void | SetArg (unsigned long long 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) |
template<typename T > | |
void | execWithLL (void *address, cling::Value *val) |
template<typename T > | |
void | execWithULL (void *address, cling::Value *val) |
size_t | GetMinRequiredArguments () |
ExecWithRetFunc_t | InitRetAndExec (const clang::FunctionDecl *FD, cling::Value &ret) |
ExecWithRetFunc_t | InitRetAndExecBuiltin (clang::QualType QT, const clang::BuiltinType *BT, cling::Value &ret) |
template<class T > | |
ExecWithRetFunc_t | InitRetAndExecIntegral (clang::QualType QT, cling::Value &ret) |
ExecWithRetFunc_t | InitRetAndExecNoCtor (clang::QualType QT, cling::Value &ret) |
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 83 of file TClingCallFunc.h.
|
private |
Enumerator | |
---|---|
kNotReference | |
kLValueReference | |
kRValueReference |
Definition at line 77 of file TClingCallFunc.h.
|
default |
|
inlineexplicit |
Definition at line 152 of file TClingCallFunc.h.
|
inlineexplicit |
Definition at line 158 of file TClingCallFunc.h.
|
inline |
Definition at line 165 of file TClingCallFunc.h.
|
private |
Definition at line 131 of file TClingCallFunc.cxx.
|
private |
Definition at line 156 of file TClingCallFunc.cxx.
|
private |
Definition at line 137 of file TClingCallFunc.cxx.
|
private |
Definition at line 1772 of file TClingCallFunc.cxx.
void TClingCallFunc::Exec | ( | void * | address, |
TInterpreterValue * | interpVal = 0 |
||
) |
Definition at line 1796 of file TClingCallFunc.cxx.
|
private |
Definition at line 1420 of file TClingCallFunc.cxx.
|
private |
Definition at line 1753 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 1870 of file TClingCallFunc.cxx.
void TClingCallFunc::ExecDestructor | ( | const TClingClassInfo * | info, |
void * | address = nullptr , |
||
unsigned long | nary = 0UL , |
||
bool | withFree = true |
||
) |
Definition at line 1908 of file TClingCallFunc.cxx.
double TClingCallFunc::ExecDouble | ( | void * | address | ) |
Definition at line 1842 of file TClingCallFunc.cxx.
Longptr_t TClingCallFunc::ExecInt | ( | void * | address | ) |
Definition at line 1832 of file TClingCallFunc.cxx.
long long TClingCallFunc::ExecInt64 | ( | void * | address | ) |
Definition at line 1837 of file TClingCallFunc.cxx.
|
private |
Definition at line 1813 of file TClingCallFunc.cxx.
void TClingCallFunc::ExecWithArgsAndReturn | ( | void * | address, |
const void * | args[] = 0 , |
||
int | nargs = 0 , |
||
void * | ret = 0 |
||
) |
Definition at line 1847 of file TClingCallFunc.cxx.
|
private |
Definition at line 1550 of file TClingCallFunc.cxx.
void TClingCallFunc::ExecWithReturn | ( | void * | address, |
void * | ret = nullptr |
||
) |
Definition at line 1859 of file TClingCallFunc.cxx.
|
private |
Definition at line 1558 of file TClingCallFunc.cxx.
TClingMethodInfo * TClingCallFunc::FactoryMethod | ( | ) | const |
Definition at line 1936 of file TClingCallFunc.cxx.
int TClingCallFunc::get_wrapper_code | ( | std::string & | wrapper_name, |
std::string & | wrapper | ||
) |
Definition at line 478 of file TClingCallFunc.cxx.
|
inline |
Definition at line 201 of file TClingCallFunc.h.
|
inline |
Definition at line 206 of file TClingCallFunc.h.
const clang::DeclContext * TClingCallFunc::GetDeclContext | ( | ) | const |
Definition at line 474 of file TClingCallFunc.cxx.
|
inline |
Definition at line 211 of file TClingCallFunc.h.
|
inlineprivate |
Definition at line 137 of file TClingCallFunc.h.
TInterpreter::CallFuncIFacePtr_t TClingCallFunc::IFacePtr | ( | ) |
Definition at line 1992 of file TClingCallFunc.cxx.
|
inline |
Definition at line 189 of file TClingCallFunc.h.
void TClingCallFunc::Init | ( | ) |
Definition at line 1941 of file TClingCallFunc.cxx.
void TClingCallFunc::Init | ( | const TClingMethodInfo & | minfo | ) |
Definition at line 1950 of file TClingCallFunc.cxx.
void TClingCallFunc::Init | ( | std::unique_ptr< TClingMethodInfo > | minfo | ) |
Definition at line 1956 of file TClingCallFunc.cxx.
|
private |
Definition at line 1738 of file TClingCallFunc.cxx.
|
private |
Definition at line 1579 of file TClingCallFunc.cxx.
|
private |
TClingCallFunc::ExecWithRetFunc_t TClingCallFunc::InitRetAndExecIntegral | ( | QualType | QT, |
cling::Value & | ret | ||
) |
Definition at line 1567 of file TClingCallFunc.cxx.
|
private |
Definition at line 1697 of file TClingCallFunc.cxx.
void * TClingCallFunc::InterfaceMethod | ( | ) |
Definition at line 1962 of file TClingCallFunc.cxx.
void TClingCallFunc::Invoke | ( | cling::Value * | result = 0 | ) | const |
bool TClingCallFunc::IsValid | ( | ) | const |
Definition at line 1984 of file TClingCallFunc.cxx.
|
private |
Definition at line 1017 of file TClingCallFunc.cxx.
|
private |
Definition at line 1228 of file TClingCallFunc.cxx.
|
private |
Definition at line 275 of file TClingCallFunc.cxx.
|
private |
Definition at line 863 of file TClingCallFunc.cxx.
|
private |
Definition at line 230 of file TClingCallFunc.cxx.
|
private |
Definition at line 392 of file TClingCallFunc.cxx.
|
private |
Definition at line 992 of file TClingCallFunc.cxx.
|
delete |
void TClingCallFunc::ResetArg | ( | ) |
Definition at line 2017 of file TClingCallFunc.cxx.
void TClingCallFunc::SetArg | ( | double | arg | ) |
Definition at line 2043 of file TClingCallFunc.cxx.
void TClingCallFunc::SetArg | ( | float | arg | ) |
Definition at line 2036 of file TClingCallFunc.cxx.
void TClingCallFunc::SetArg | ( | long | arg | ) |
Definition at line 2029 of file TClingCallFunc.cxx.
void TClingCallFunc::SetArg | ( | long long | arg | ) |
Definition at line 2050 of file TClingCallFunc.cxx.
void TClingCallFunc::SetArg | ( | unsigned long | arg | ) |
Definition at line 2022 of file TClingCallFunc.cxx.
void TClingCallFunc::SetArg | ( | unsigned long long | arg | ) |
Definition at line 2057 of file TClingCallFunc.cxx.
Definition at line 2064 of file TClingCallFunc.cxx.
void TClingCallFunc::SetArgs | ( | const char * | args | ) |
Definition at line 2072 of file TClingCallFunc.cxx.
void TClingCallFunc::SetFunc | ( | const TClingClassInfo * | info, |
const char * | method, | ||
const char * | arglist, | ||
bool | objectIsConst, | ||
Longptr_t * | poffset | ||
) |
Definition at line 2084 of file TClingCallFunc.cxx.
void TClingCallFunc::SetFunc | ( | const TClingClassInfo * | info, |
const char * | method, | ||
const char * | arglist, | ||
Longptr_t * | poffset | ||
) |
Definition at line 2078 of file TClingCallFunc.cxx.
void TClingCallFunc::SetFunc | ( | const TClingMethodInfo * | info | ) |
Definition at line 2112 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 2128 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 2121 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 2156 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 2149 of file TClingCallFunc.cxx.
|
mutableprivate |
Stored function arguments, we own.
Definition at line 74 of file TClingCallFunc.h.
|
private |
Decl for the method.
Definition at line 68 of file TClingCallFunc.h.
|
private |
Cling interpreter, we do not own.
Definition at line 64 of file TClingCallFunc.h.
|
private |
Current method, we own.
Definition at line 66 of file TClingCallFunc.h.
|
private |
Number of required arguments.
Definition at line 70 of file TClingCallFunc.h.
|
private |
Pointer to compiled wrapper, we do not own.
Definition at line 72 of file TClingCallFunc.h.