35#include "cling/Interpreter/Value.h"
37#include <llvm/ADT/SmallVector.h>
66 std::unique_ptr<TClingMethodInfo>
fMethod;
68 const clang::FunctionDecl *
fDecl =
nullptr;
74 mutable llvm::SmallVector<cling::Value, 8>
fArgVals;
89 const std::string& wrapper,
90 bool withAccessControl =
true);
93 std::ostringstream& callbuf, std::string& type_name,
97 void make_narg_call(
const std::string &return_type,
const unsigned N, std::ostringstream &typedefbuf,
98 std::ostringstream &callbuf,
const std::string &class_name,
int indent_level);
101 std::ostringstream& callbuf,
102 const std::string& class_name,
int indent_level);
105 const std::string& class_name,
106 std::ostringstream& buf,
int indent_level);
109 const std::string& class_name,
110 std::ostringstream& buf,
int indent_level);
121 template <
typename T>
123 template <
typename T>
132 void exec(
void* address,
void* ret);
147 template <
typename T>
155 explicit TClingCallFunc(cling::Interpreter *interp,
const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt)
179 unsigned long nary = 0UL);
181 unsigned long nary = 0UL,
bool withFree =
true);
184 const void* args[] = 0,
195 void Init(std::unique_ptr<TClingMethodInfo>);
211 return fMethod->GetMethodDecl();
215 void SetArg(
unsigned long arg);
218 void SetArg(
long long arg);
219 void SetArg(
unsigned long long arg);
221 void SetArgs(
const char* args);
223 const char* arglist,
long* poffset);
225 const char* arglist,
bool objectIsConst,
long* poffset);
228 const char*
proto,
long* poffset,
231 const char*
proto,
bool objectIsConst,
long* poffset,
234 const llvm::SmallVectorImpl<clang::QualType>&
proto,
238 const llvm::SmallVectorImpl<clang::QualType>&
proto,
239 bool objectIsConst,
long* poffset,
void(* tcling_callfunc_ctor_Wrapper_t)(void **, void *, unsigned long)
void(* tcling_callfunc_Wrapper_t)(void *, int, void **, void *)
void(* tcling_callfunc_dtor_Wrapper_t)(void *, unsigned long, int)
typedef void((*Func_t)())
Emulation of the CINT CallFunc class.
long ExecInt(void *address)
std::unique_ptr< TClingMethodInfo > fMethod
Current method, we own.
ExecWithRetFunc_t InitRetAndExec(const clang::FunctionDecl *FD, cling::Value &ret)
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)
const clang::FunctionDecl * GetDecl() const
tcling_callfunc_ctor_Wrapper_t make_ctor_wrapper(const TClingClassInfo *info)
void ExecWithReturn(void *address, void *ret=0)
void SetArgs(const char *args)
size_t fMinRequiredArguments
Number of required arguments.
TClingCallFunc(cling::Interpreter *interp, const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt)
size_t CalculateMinRequiredArguments()
double ExecDouble(void *address)
void SetFunc(const TClingClassInfo *info, const char *method, const char *arglist, long *poffset)
bool fIgnoreExtraArgs
If true, do not limit number of function arguments to declared number.
tcling_callfunc_Wrapper_t make_wrapper()
ExecWithRetFunc_t InitRetAndExecNoCtor(clang::QualType QT, cling::Value &ret)
tcling_callfunc_dtor_Wrapper_t make_dtor_wrapper(const TClingClassInfo *info)
~TClingCallFunc()=default
std::function< void(void *address, cling::Value &ret)> ExecWithRetFunc_t
void execWithLL(void *address, cling::Value *val)
void SetFuncProto(const TClingClassInfo *info, const char *method, const char *proto, long *poffset, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
void * compile_wrapper(const std::string &wrapper_name, const std::string &wrapper, bool withAccessControl=true)
TInterpreter::CallFuncIFacePtr_t IFacePtr()
void exec(void *address, void *ret)
void exec_with_valref_return(void *address, cling::Value *ret)
void Invoke(cling::Value *result=0) const
void make_narg_ctor(const unsigned N, std::ostringstream &typedefbuf, std::ostringstream &callbuf, const std::string &class_name, int indent_level)
TClingCallFunc(const TClingMethodInfo &minfo, const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt)
const clang::FunctionDecl * GetDecl()
void execWithULL(void *address, cling::Value *val)
void EvaluateArgList(const std::string &ArgList)
void ExecWithArgsAndReturn(void *address, const void *args[]=0, int nargs=0, void *ret=0)
void SetArgArray(long *argArr, int narg)
TClingCallFunc(const TClingCallFunc &rhs)
void Exec(void *address, TInterpreterValue *interpVal=0)
TClingMethodInfo * FactoryMethod() const
void ExecDestructor(const TClingClassInfo *info, void *address=0, unsigned long nary=0UL, bool withFree=true)
ExecWithRetFunc_t InitRetAndExecIntegral(clang::QualType QT, cling::Value &ret)
int get_wrapper_code(std::string &wrapper_name, std::string &wrapper)
size_t GetMinRequiredArguments()
const ROOT::TMetaUtils::TNormalizedCtxt & fNormCtxt
ROOT normalized context for that interpreter.
void IgnoreExtraArgs(bool ignore)
tcling_callfunc_Wrapper_t fWrapper
Pointer to compiled wrapper, we do not own.
void * ExecDefaultConstructor(const TClingClassInfo *info, void *address=0, unsigned long nary=0UL)
TClingCallFunc & operator=(const TClingCallFunc &rhs)=delete
long long ExecInt64(void *address)
cling::Interpreter * fInterp
Cling interpreter, we do not own.
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)
const clang::FunctionDecl * fDecl
Decl for the method.
void make_narg_call_with_return(const unsigned N, const std::string &class_name, std::ostringstream &buf, int indent_level)
llvm::SmallVector< cling::Value, 8 > fArgVals
Stored function arguments, we own.
void make_narg_ctor_with_return(const unsigned N, const std::string &class_name, std::ostringstream &buf, int indent_level)
ExecWithRetFunc_t InitRetAndExecBuiltin(clang::QualType QT, const clang::BuiltinType *BT, cling::Value &ret)
Emulation of the CINT ClassInfo class.
Emulation of the CINT MethodInfo class.
void function(const Char_t *name_, T fun, const Char_t *docstring=0)