Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TClingCallFunc Class Reference

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.
 

#include </github/home/ROOT-CI/src/core/metacling/src/TClingCallFunc.h>

Member Typedef Documentation

◆ ExecWithRetFunc_t

using TClingCallFunc::ExecWithRetFunc_t = std::function<void(void* address, cling::Value &ret)>
private

Definition at line 84 of file TClingCallFunc.h.

Member Enumeration Documentation

◆ EReferenceType

Enumerator
kNotReference 
kLValueReference 
kRValueReference 

Definition at line 78 of file TClingCallFunc.h.

Constructor & Destructor Documentation

◆ ~TClingCallFunc()

TClingCallFunc::~TClingCallFunc ( )
default

◆ TClingCallFunc() [1/3]

TClingCallFunc::TClingCallFunc ( cling::Interpreter * interp)
inlineexplicit

Definition at line 141 of file TClingCallFunc.h.

◆ TClingCallFunc() [2/3]

TClingCallFunc::TClingCallFunc ( const TClingMethodInfo & minfo)
inlineexplicit

Definition at line 147 of file TClingCallFunc.h.

◆ TClingCallFunc() [3/3]

TClingCallFunc::TClingCallFunc ( const TClingCallFunc & rhs)
inline

Definition at line 154 of file TClingCallFunc.h.

Member Function Documentation

◆ CalculateMinRequiredArguments()

size_t TClingCallFunc::CalculateMinRequiredArguments ( )
private

Definition at line 142 of file TClingCallFunc.cxx.

◆ collect_type_info()

void TClingCallFunc::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 )
private

Definition at line 186 of file TClingCallFunc.cxx.

◆ compile_wrapper()

void * TClingCallFunc::compile_wrapper ( const std::string & wrapper_name,
const std::string & wrapper,
bool withAccessControl = true )
private

Definition at line 148 of file TClingCallFunc.cxx.

◆ EvaluateArgList()

void TClingCallFunc::EvaluateArgList ( const std::string & ArgList)
private

Definition at line 1511 of file TClingCallFunc.cxx.

◆ Exec()

void TClingCallFunc::Exec ( void * address,
TInterpreterValue * interpVal = 0 )

Definition at line 1535 of file TClingCallFunc.cxx.

◆ exec()

void TClingCallFunc::exec ( void * address,
void * ret )
private

Definition at line 1414 of file TClingCallFunc.cxx.

◆ exec_with_valref_return()

void TClingCallFunc::exec_with_valref_return ( void * address,
cling::Value & ret )
private

Definition at line 1489 of file TClingCallFunc.cxx.

◆ ExecDefaultConstructor()

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 1610 of file TClingCallFunc.cxx.

◆ ExecDestructor()

void TClingCallFunc::ExecDestructor ( const TClingClassInfo * info,
void * address = nullptr,
unsigned long nary = 0UL,
bool withFree = true )

Definition at line 1636 of file TClingCallFunc.cxx.

◆ ExecDouble()

double TClingCallFunc::ExecDouble ( void * address)

Definition at line 1582 of file TClingCallFunc.cxx.

◆ ExecInt()

Longptr_t TClingCallFunc::ExecInt ( void * address)

Definition at line 1572 of file TClingCallFunc.cxx.

◆ ExecInt64()

long long TClingCallFunc::ExecInt64 ( void * address)

Definition at line 1577 of file TClingCallFunc.cxx.

◆ ExecT()

template<typename T >
T TClingCallFunc::ExecT ( void * address)
private

Definition at line 1552 of file TClingCallFunc.cxx.

◆ ExecWithArgsAndReturn()

void TClingCallFunc::ExecWithArgsAndReturn ( void * address,
const void * args[] = 0,
int nargs = 0,
void * ret = 0 )

Definition at line 1587 of file TClingCallFunc.cxx.

◆ ExecWithReturn()

void TClingCallFunc::ExecWithReturn ( void * address,
void * ret = nullptr )

Definition at line 1599 of file TClingCallFunc.cxx.

◆ FactoryMethod()

TClingMethodInfo * TClingCallFunc::FactoryMethod ( ) const

Definition at line 1653 of file TClingCallFunc.cxx.

◆ get_wrapper_code()

int TClingCallFunc::get_wrapper_code ( std::string & wrapper_name,
std::string & wrapper )

Definition at line 543 of file TClingCallFunc.cxx.

◆ GetDecl() [1/2]

const clang::FunctionDecl * TClingCallFunc::GetDecl ( )
inline

Definition at line 190 of file TClingCallFunc.h.

◆ GetDecl() [2/2]

const clang::FunctionDecl * TClingCallFunc::GetDecl ( ) const
inline

Definition at line 196 of file TClingCallFunc.h.

◆ GetDeclContext()

const clang::DeclContext * TClingCallFunc::GetDeclContext ( ) const

Definition at line 539 of file TClingCallFunc.cxx.

◆ GetFunctionOrShadowDecl()

const clang::Decl * TClingCallFunc::GetFunctionOrShadowDecl ( ) const
inline

Definition at line 201 of file TClingCallFunc.h.

◆ GetMinRequiredArguments()

size_t TClingCallFunc::GetMinRequiredArguments ( )
inlineprivate

Definition at line 126 of file TClingCallFunc.h.

◆ IFacePtr()

TInterpreter::CallFuncIFacePtr_t TClingCallFunc::IFacePtr ( )

Definition at line 1699 of file TClingCallFunc.cxx.

◆ IgnoreExtraArgs()

void TClingCallFunc::IgnoreExtraArgs ( bool ignore)
inline

Definition at line 178 of file TClingCallFunc.h.

◆ Init() [1/3]

void TClingCallFunc::Init ( )

Definition at line 1658 of file TClingCallFunc.cxx.

◆ Init() [2/3]

void TClingCallFunc::Init ( const TClingMethodInfo & minfo)

Definition at line 1667 of file TClingCallFunc.cxx.

◆ Init() [3/3]

void TClingCallFunc::Init ( std::unique_ptr< TClingMethodInfo > minfo)

Definition at line 1673 of file TClingCallFunc.cxx.

◆ InterfaceMethod()

void * TClingCallFunc::InterfaceMethod ( )

Definition at line 1679 of file TClingCallFunc.cxx.

◆ Invoke()

void TClingCallFunc::Invoke ( cling::Value * result = 0) const

◆ IsValid()

bool TClingCallFunc::IsValid ( ) const

Definition at line 1691 of file TClingCallFunc.cxx.

◆ make_ctor_wrapper()

tcling_callfunc_ctor_Wrapper_t TClingCallFunc::make_ctor_wrapper ( const TClingClassInfo * info,
ROOT::TMetaUtils::EIOCtorCategory kind,
const std::string & type_name )
private

Definition at line 1079 of file TClingCallFunc.cxx.

◆ make_dtor_wrapper()

tcling_callfunc_dtor_Wrapper_t TClingCallFunc::make_dtor_wrapper ( const TClingClassInfo * info)
private

Definition at line 1269 of file TClingCallFunc.cxx.

◆ make_narg_call()

void TClingCallFunc::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 )
private

Definition at line 338 of file TClingCallFunc.cxx.

◆ make_narg_call_with_return()

void TClingCallFunc::make_narg_call_with_return ( const unsigned N,
const std::string & class_name,
std::ostringstream & buf,
int indent_level )
private

Definition at line 914 of file TClingCallFunc.cxx.

◆ make_narg_ctor()

void TClingCallFunc::make_narg_ctor ( const unsigned N,
std::ostringstream & typedefbuf,
std::ostringstream & callbuf,
const std::string & class_name,
int indent_level )
private

Definition at line 281 of file TClingCallFunc.cxx.

◆ make_narg_ctor_with_return()

void TClingCallFunc::make_narg_ctor_with_return ( const unsigned N,
const std::string & class_name,
std::ostringstream & buf,
int indent_level )
private

Definition at line 463 of file TClingCallFunc.cxx.

◆ make_wrapper()

tcling_callfunc_Wrapper_t TClingCallFunc::make_wrapper ( )
private

Definition at line 1023 of file TClingCallFunc.cxx.

◆ operator=()

TClingCallFunc & TClingCallFunc::operator= ( const TClingCallFunc & rhs)
delete

◆ ResetArg()

void TClingCallFunc::ResetArg ( )

Definition at line 1714 of file TClingCallFunc.cxx.

◆ SetArg()

template<typename T , std::enable_if_t< std::is_fundamental< T >::value, bool > = true>
void TClingCallFunc::SetArg ( T arg)
inline

Definition at line 206 of file TClingCallFunc.h.

◆ SetArgArray()

void TClingCallFunc::SetArgArray ( Longptr_t * argArr,
int narg )

Definition at line 1719 of file TClingCallFunc.cxx.

◆ SetArgs()

void TClingCallFunc::SetArgs ( const char * args)

Definition at line 1727 of file TClingCallFunc.cxx.

◆ SetFunc() [1/3]

void TClingCallFunc::SetFunc ( const TClingClassInfo * info,
const char * method,
const char * arglist,
bool objectIsConst,
Longptr_t * poffset )

Definition at line 1739 of file TClingCallFunc.cxx.

◆ SetFunc() [2/3]

void TClingCallFunc::SetFunc ( const TClingClassInfo * info,
const char * method,
const char * arglist,
Longptr_t * poffset )

Definition at line 1733 of file TClingCallFunc.cxx.

◆ SetFunc() [3/3]

void TClingCallFunc::SetFunc ( const TClingMethodInfo * info)

Definition at line 1767 of file TClingCallFunc.cxx.

◆ SetFuncProto() [1/4]

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 1783 of file TClingCallFunc.cxx.

◆ SetFuncProto() [2/4]

void TClingCallFunc::SetFuncProto ( const TClingClassInfo * info,
const char * method,
const char * proto,
Longptr_t * poffset,
ROOT::EFunctionMatchMode mode = ROOT::kConversionMatch )

Definition at line 1776 of file TClingCallFunc.cxx.

◆ SetFuncProto() [3/4]

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 1811 of file TClingCallFunc.cxx.

◆ SetFuncProto() [4/4]

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 1804 of file TClingCallFunc.cxx.

Member Data Documentation

◆ fArgVals

llvm::SmallVector<cling::Value, 8> TClingCallFunc::fArgVals
mutableprivate

Stored function arguments, we own.

Definition at line 75 of file TClingCallFunc.h.

◆ fDecl

const clang::FunctionDecl* TClingCallFunc::fDecl = nullptr
private

Decl for the method.

Definition at line 69 of file TClingCallFunc.h.

◆ fInterp

cling::Interpreter* TClingCallFunc::fInterp
private

Cling interpreter, we do not own.

Definition at line 65 of file TClingCallFunc.h.

◆ fMethod

std::unique_ptr<TClingMethodInfo> TClingCallFunc::fMethod
private

Current method, we own.

Definition at line 67 of file TClingCallFunc.h.

◆ fMinRequiredArguments

size_t TClingCallFunc::fMinRequiredArguments = -1
private

Number of required arguments.

Definition at line 71 of file TClingCallFunc.h.

◆ fWrapper

std::atomic<tcling_callfunc_Wrapper_t> TClingCallFunc::fWrapper
private

Pointer to compiled wrapper, we do not own.

Definition at line 73 of file TClingCallFunc.h.

  • core/metacling/src/TClingCallFunc.h
  • core/metacling/src/TClingCallFunc.cxx