2#ifndef _CRT_SECURE_NO_WARNINGS
4#define _CRT_SECURE_NO_WARNINGS
58#define CLING_CATCH_UNCAUGHT_ \
59ARMUncaughtException guard; \
60if (setjmp(gExcJumBuf) == 0) {
61#define _CLING_CATCH_UNCAUGHT \
63 if (!std::getenv("CPPYY_UNCAUGHT_QUIET")) \
64 std::cerr << "Warning: uncaught exception in JIT is rethrown; resources may leak" \
65 << " (suppress with \"CPPYY_UNCAUGHT_QUIET=1\")" << std::endl;\
66 std::rethrow_exception(std::current_exception()); \
69#define CLING_CATCH_UNCAUGHT_
70#define _CLING_CATCH_UNCAUGHT
78#if defined(__GLIBCXX__) && __GLIBCXX__ >= 20220506
79template class std::allocator<char>;
80template class std::basic_string<char>;
81template class std::basic_string<wchar_t>;
99void arm_uncaught_exception() {
100 longjmp(gExcJumBuf, 1);
103class ARMUncaughtException {
104 std::terminate_handler m_Handler;
106 ARMUncaughtException() { m_Handler = std::set_terminate(arm_uncaught_exception); }
107 ~ARMUncaughtException() { std::set_terminate(m_Handler); }
118#define DIRECT_CALL ((size_t)1 << (8 * sizeof(size_t) - 1))
120 return nargs & ~DIRECT_CALL;
146std::string find_memoized_resolved_name(
const std::string&
name)
163 typedef const void* DeclId_t;
167 CallWrapper(DeclId_t fid,
const std::string&
n) : fDecl(fid), fName(
n), fTF(
nullptr) {}
186 CallWrapper* wrap =
new CallWrapper(
f);
194 CallWrapper* wrap =
new CallWrapper(fid,
n);
214 {
"bool",
"char",
"signed char",
"unsigned char",
"wchar_t",
"short",
"unsigned short",
215 "int",
"unsigned int",
"long",
"unsigned long",
"long long",
"unsigned long long",
216 "float",
"double",
"long double",
"void",
217 "allocator",
"array",
"basic_string",
"complex",
"initializer_list",
"less",
"list",
218 "map",
"pair",
"set",
"vector"};
222 {
"auto_ptr",
"std::auto_ptr",
"shared_ptr",
"std::shared_ptr",
223 "unique_ptr",
"std::unique_ptr",
"weak_ptr",
"std::weak_ptr"};
240const int SIGPIPE = 0;
241const int SIGQUIT = 0;
242const int SIGWINCH = 0;
243const int SIGALRM = 0;
244const int SIGCHLD = 0;
246const int SIGUSR1 = 0;
247const int SIGUSR2 = 0;
252 const char *fSigName;
254 { SIGBUS,
"bus error" },
255 { SIGSEGV,
"segmentation violation" },
256 { SIGSYS,
"bad argument to system call" },
257 { SIGPIPE,
"write on a pipe with no one to read it" },
258 { SIGILL,
"illegal instruction" },
259 { SIGABRT,
"abort" },
261 { SIGINT,
"interrupt" },
262 { SIGWINCH,
"window size change" },
263 { SIGALRM,
"alarm clock" },
264 { SIGCHLD,
"death of a child" },
265 { SIGURG,
"urgent data arrived on an I/O channel" },
266 { SIGFPE,
"floating point exception" },
267 { SIGTERM,
"termination signal" },
268 { SIGUSR1,
"user-defined signal 1" },
269 { SIGUSR2,
"user-defined signal 2" }
272static void inline do_trace(
int sig) {
279 void HandleException(
Int_t sig)
override {
286 if (!std::getenv(
"CPPYY_CRASH_QUIET"))
298class ApplicationStarter {
300 ApplicationStarter() {
321 for (
const auto&
name : bi) {
322 for (
const char*
a : {
"*",
"&",
"*&",
"[]",
"*[]"})
330 const char* stl_names[] = {
"allocator",
"auto_ptr",
"bad_alloc",
"bad_cast",
331 "bad_exception",
"bad_typeid",
"basic_filebuf",
"basic_fstream",
"basic_ifstream",
332 "basic_ios",
"basic_iostream",
"basic_istream",
"basic_istringstream",
333 "basic_ofstream",
"basic_ostream",
"basic_ostringstream",
"basic_streambuf",
334 "basic_string",
"basic_stringbuf",
"basic_stringstream",
"binary_function",
335 "binary_negate",
"bitset",
"byte",
"char_traits",
"codecvt_byname",
"codecvt",
"collate",
336 "collate_byname",
"compare",
"complex",
"ctype_byname",
"ctype",
"default_delete",
337 "deque",
"divides",
"domain_error",
"equal_to",
"exception",
"forward_list",
"fpos",
338 "function",
"greater_equal",
"greater",
"gslice_array",
"gslice",
"hash",
"indirect_array",
339 "integer_sequence",
"invalid_argument",
"ios_base",
"istream_iterator",
"istreambuf_iterator",
340 "istrstream",
"iterator_traits",
"iterator",
"length_error",
"less_equal",
"less",
341 "list",
"locale",
"localedef utility",
"locale utility",
"logic_error",
"logical_and",
342 "logical_not",
"logical_or",
"map",
"mask_array",
"mem_fun",
"mem_fun_ref",
"messages",
343 "messages_byname",
"minus",
"modulus",
"money_get",
"money_put",
"moneypunct",
344 "moneypunct_byname",
"multimap",
"multiplies",
"multiset",
"negate",
"not_equal_to",
345 "num_get",
"num_put",
"numeric_limits",
"numpunct",
"numpunct_byname",
346 "ostream_iterator",
"ostreambuf_iterator",
"ostrstream",
"out_of_range",
347 "overflow_error",
"pair",
"plus",
"pointer_to_binary_function",
348 "pointer_to_unary_function",
"priority_queue",
"queue",
"range_error",
349 "raw_storage_iterator",
"reverse_iterator",
"runtime_error",
"set",
"shared_ptr",
350 "slice_array",
"slice",
"stack",
"string",
"strstream",
"strstreambuf",
351 "time_get_byname",
"time_get",
"time_put_byname",
"time_put",
"unary_function",
352 "unary_negate",
"unique_ptr",
"underflow_error",
"unordered_map",
"unordered_multimap",
353 "unordered_multiset",
"unordered_set",
"valarray",
"vector",
"weak_ptr",
"wstring",
354 "__hash_not_enabled"};
355 for (
auto&
name : stl_names)
360 if (std::getenv(
"CPPYY_OPT_LEVEL")) optLevel = atoi(std::getenv(
"CPPYY_OPT_LEVEL"));
362 std::ostringstream s;
363 s <<
"#pragma cling optimize " << optLevel;
369 "#include <iostream>\n"
370 "#include <string>\n"
371 "#include <DllImport.h>\n"
372 "#include <vector>\n"
373 "#include <utility>";
378 "namespace __cppyy_internal { template<class C1, class C2>"
379 " bool is_equal(const C1& c1, const C2& c2) { return (bool)(c1 == c2); } }");
381 "namespace __cppyy_internal { template<class C1, class C2>"
382 " bool is_not_equal(const C1& c1, const C2& c2) { return (bool)(c1 != c2); } }");
385 gInterpreter->Declare(
"namespace __cppyy_internal { struct Sep; }");
388 gROOT->GetListOfGlobals(
true);
389 gROOT->GetListOfGlobalFunctions(
true);
390 std::set<std::string> initial;
403 gRootSOs.insert(
"libMathCore.dll ");
413 ~ApplicationStarter() {
418} _applicationStarter;
427 assert((ClassRefs_t::size_type)scope <
g_classrefs.size());
433 CallWrapper* wrap = ((CallWrapper*)method);
435 MethodInfo_t* mi =
gInterpreter->MethodInfo_Factory(wrap->fDecl);
456 char* cstr = (
char*)
malloc(cppstr.size()+1);
457 memcpy(cstr, cppstr.c_str(), cppstr.size()+1);
462bool match_name(
const std::string& tname,
const std::string fname)
465 if (fname.rfind(tname, 0) == 0) {
466 if ((tname.size() == fname.size()) ||
467 (tname.size() < fname.size() && fname[tname.size()] ==
'<'))
476 std::string::size_type pos =
name.find(
'<');
477 if (pos != std::string::npos)
503 std::string memoized = find_memoized_resolved_name(cppitem_name);
504 if (!memoized.empty())
return memoized;
507 std::string tclean = cppitem_name.compare(0, 2,
"::") == 0 ?
508 cppitem_name.substr(2, std::string::npos) : cppitem_name;
512 if (tclean.empty() )
return cppitem_name;
515 if (tclean[tclean.size()-1] ==
']')
516 tclean = tclean.substr(0, tclean.rfind(
'[')) +
"[]";
518 if (tclean.rfind(
"byte", 0) == 0 || tclean.rfind(
"std::byte", 0) == 0)
522 auto pos = tclean.rfind(
"__restrict");
523 if (pos != std::string::npos)
524 tclean = tclean.substr(0, pos);
526 if (tclean.compare(0, 9,
"std::byte") == 0)
538 pos = cppitem_name.size() > 20 ? \
539 cppitem_name.rfind(
"__type_pack_element", 5) : std::string::npos;
540 if (pos != std::string::npos) {
544 const char* str = cppitem_name.c_str();
545 char* endptr =
nullptr;
546 unsigned long index = strtoul(str+20+pos, &endptr, 0);
548 std::string tmplvars{endptr};
549 auto start = tmplvars.find(
',') + 1;
550 auto end = tmplvars.find(
',', start);
553 end = tmplvars.find(
',', start);
554 if (end == std::string::npos) end = tmplvars.rfind(
'>');
558 std::string resolved = tmplvars.substr(start, end-start);
559 auto cpd = tmplvars.rfind(
'>');
560 if (cpd != std::string::npos && cpd+1 != tmplvars.size())
561 return resolved + tmplvars.substr(cpd+1, std::string::npos);
569 while ((pos = tclean.find(
"::::", pos)) != std::string::npos) {
570 tclean.replace(pos, 4,
"::");
574 if (tclean.compare(0, 6,
"const ") != 0)
581static std::string extract_namespace(
const std::string&
name)
589 for (std::string::size_type pos =
name.size()-1; 0 < pos; --pos) {
590 std::string::value_type
c =
name[pos];
599 else if (tpl_open == 0 &&
c ==
':' &&
name[pos-1] ==
':') {
601 return name.substr(0, pos-1);
621 if (et_short.find(
"(unnamed") == std::string::npos) {
622 std::ostringstream decl;
624 for (
auto& itype : {
"unsigned int"}) {
628 decl <<
"_Pragma(\"clang diagnostic push\")"
629 "_Pragma(\"clang diagnostic ignored \\\"-Wdeprecated-declarations\\\"\")"
632 <<
", std::underlying_type<"
634 <<
">::type>::value;"
635 "_Pragma(\"clang diagnostic pop\")";
639 std::string resugared;
640 if (et_short.size() != enum_type.size()) {
641 auto pos = enum_type.find(et_short);
642 if (pos != std::string::npos) {
643 resugared = enum_type.substr(0, pos) + itype;
644 if (pos+et_short.size() < enum_type.size())
645 resugared += enum_type.substr(pos+et_short.size(), std::string::npos);
648 if (resugared.empty()) resugared = itype;
656 int ipos = (
int)enum_type.size()-1;
657 for (; 0 <= ipos; --ipos) {
658 char c = enum_type[ipos];
659 if (isspace(
c))
continue;
660 if (isalnum(
c) ||
c ==
'_' ||
c ==
'>' ||
c ==
')')
break;
662 bool isConst = enum_type.find(
"const ", 6) != std::string::npos;
663 std::string restype = isConst ?
"const " :
"";
664 restype +=
"internal_enum_type_t"+enum_type.substr((std::string::size_type)ipos+1, std::string::npos);
707 bool bHasAlias1 = sname != scope_name;
709 result = find_memoized_scope(scope_name);
718 if (b_scope_name_missclassified) {
719 result = find_memoized_scope(
"std::"+scope_name);
723 if (b_sname_missclassified) {
724 if (!
result)
result = find_memoized_scope(
"std::"+sname);
738 bool bHasAlias2 = cr->
GetName() != scope_name;
753 if (b_scope_name_missclassified)
755 if (b_sname_missclassified)
765 return (
bool)
gInterpreter->CheckClassTemplate(template_name.c_str());
771 virtual ~AutoCastRTTI() {}
778 if (!cr.
GetClass() || !obj)
return klass;
787 std::string clName = cr->
GetName();
788 if (clName.find(
"std::", 0, 5) == 0 && clName.find(
"stream") != std::string::npos)
796 volatile const char* raw =
nullptr;
799 AutoCastRTTI* pcst = (AutoCastRTTI*)obj;
800 raw =
typeid(*pcst).raw_name();
803 void* vfptr = *(
void**)((intptr_t)obj);
804 void* meta = (
void*)((intptr_t)*((
void**)((intptr_t)vfptr-
sizeof(
void*))));
805 if (*(intptr_t*)meta == 2) {
807 void* ptdescr = (
void*)((intptr_t)meta + 4*
sizeof(
unsigned long)+
sizeof(
void*));
808 if (ptdescr && *(
void**)ptdescr) {
809 auto rtti = *(std::type_info**)ptdescr;
810 raw = rtti->raw_name();
811 if (raw && raw[0] !=
'\0')
823 }
catch (std::bad_typeid) {
851 if (dt)
return dt->
Size();
864 if (strstr(tclean.c_str(),
"std::complex"))
881 ClassInfo_t* ci =
gInterpreter->ClassInfo_Factory(type_name.c_str());
937 CallWrapper* wrap = (CallWrapper*)method;
940 MethodInfo_t* meth =
gInterpreter->MethodInfo_Factory(wrap->fDecl);
944 if (!(callf &&
gInterpreter->CallFunc_IsValid(callf))) {
950 std::cerr <<
"TODO: report unresolved function error to Python\n";
960 wrap->fFaceptr =
gInterpreter->CallFunc_IFacePtr(callf);
964 return wrap->fFaceptr;
970 bool runRelease =
false;
971 for (
size_t i = 0; i < nargs; ++i) {
972 switch (args[i].fTypeCode) {
979 vargs[i] = args[i].
fRef;
982 vargs[i] = (
void*)&args[i].fValue.fVoidp;
992 for (
size_t i = 0; i < nargs; ++i) {
993 if (args[i].fTypeCode ==
'X')
994 free(args[i].fValue.fVoidp);
1004 CallWrapper* wrap = (CallWrapper*)method;
1010 bool runRelease =
false;
1013 if (nargs) runRelease =
copy_args(args, nargs, smallbuf);
1016 std::vector<void*> buf(nargs);
1017 runRelease =
copy_args(args, nargs, buf.data());
1025 bool runRelease =
false;
1028 if (nargs) runRelease =
copy_args(args, nargs, (
void**)smallbuf);
1029 faceptr.
fCtor((
void**)smallbuf,
result, (
unsigned long)nargs);
1031 std::vector<void*> buf(nargs);
1032 runRelease =
copy_args(args, nargs, buf.data());
1033 faceptr.
fCtor(buf.data(),
result, (
unsigned long)nargs);
1040 std::cerr <<
" DESTRUCTOR NOT IMPLEMENTED YET! " << std::endl;
1052 if (
WrapperCall(method, nargs, args, (
void*)self, &t))
1057#define CPPYY_IMP_CALL(typecode, rtype) \
1058rtype Cppyy::Call##typecode(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args)\
1060 return CallT<rtype>(method, self, nargs, args); \
1065 if (!
WrapperCall(method, nargs, args, (
void*)self,
nullptr))
1090 char* cstr =
nullptr;
1092 std::string* cppresult = (std::string*)
malloc(
sizeof(std::string));
1093 if (
WrapperCall(method, nargs, args, self, (
void*)cppresult)) {
1095 *
length = cppresult->size();
1096 cppresult->std::string::~basic_string();
1099 free((
void*)cppresult);
1106 void* obj =
nullptr;
1107 if (
WrapperCall(method, nargs, args,
nullptr, &obj))
1127 auto classSize =
gInterpreter->ClassInfo_Size(classInfo);
1132 void* obj = ::operator
new(classSize);
1135 ::operator
delete(obj);
1154 if (strstr(
f->GetName(),
"<")) {
1156 std::ostringstream sig;
1157 sig <<
"template " << fn <<
";";
1160 std::ostringstream sig;
1162 std::string sfn = fn;
1163 std::string::size_type pos = sfn.find(
'(');
1164 if (pos != std::string::npos) sfn = sfn.substr(0, pos);
1167 sig <<
'(' <<
f->GetReturnTypeName() <<
" (";
1170 pos = sfn.rfind(
':');
1171 if (pos != std::string::npos) {
1172 std::string scope_name = sfn.substr(0, pos-1);
1175 sig << scope_name <<
"::";
1237 if (type_name.empty())
return false;
1239 if (type_name.rfind(
"enum ", 0) == 0)
1243 if (tn_short.empty())
return false;
1244 return gInterpreter->ClassInfo_IsEnum(tn_short.c_str());
1259 TypeInfo_t *ti =
gInterpreter->TypeInfo_Factory(type_name.c_str());
1283 for (std::string::size_type pos = 0; pos <
name.size(); ++pos) {
1284 std::string::value_type
c =
name[pos];
1293 else if (tpl_open == 0 && \
1294 c ==
':' && pos+1 <
name.size() &&
name[pos+1] ==
':') {
1296 return name.substr(0, pos);
1308 std::string::size_type first_scope =
name.find(
':');
1309 if (first_scope == std::string::npos)
1310 return name.substr(0,
name.find(
'<'));
1311 std::string::size_type first_templ =
name.find(
'<');
1312 if (first_templ == std::string::npos)
1313 return name.substr(0, first_scope);
1314 return name.substr(0, std::min(first_templ, first_scope));
1317#define FILL_COLL(type, filter) { \
1319 type* obj = nullptr; \
1320 while ((obj = (type*)itr.Next())) { \
1321 const char* nm = obj->GetName(); \
1322 if (nm && nm[0] != '_' && !(obj->Property() & (filter))) { \
1323 if (gInitialNames.find(nm) == gInitialNames.end()) \
1324 cppnames.insert(nm); \
1329 std::set<std::string>& cppnames,
const char*
name,
bool nofilter =
false)
1331 if (!
name || strstr(
name,
".h") != 0)
1339 if (strncmp(
name,
"std::", 5) == 0) {
1342 if (strncmp(
name,
"__1::", 5) == 0)
name += 5;
1348 if (strncmp(
name, ns_scope.c_str(), ns_scope.size()) == 0)
1370 while ((ev = (
TEnvRec*)itr.Next())) {
1389 ClassInfo_t* ci =
gInterpreter->ClassInfo_FactoryWithScope(
1392 const char* className =
gInterpreter->ClassInfo_FullName(ci);
1393 if (strstr(className,
"(anonymous)") || strstr(className,
"(unnamed)"))
1395 cond_add(scope, ns_scope, cppnames, className);
1402 coll =
gROOT->GetListOfTypes();
1419 while ((obj = (
TFunction*)itr.Next())) {
1420 const char* nm = obj->
GetName();
1423 cppnames.insert(nm);
1434 coll =
gROOT->GetListOfGlobals();
1460 std::vector<Cppyy::TCppScope_t> res;
1476 res.reserve(
v.size());
1477 for (
const auto& uid :
v) {
1479 if (uscope) res.push_back(uscope);
1492 std::string clName = cr->
GetName();
1494 std::string::size_type pos = clName.substr(0, clName.find(
'<')).rfind(
"::");
1495 if (pos != std::string::npos)
1496 return clName.substr(pos+2, std::string::npos);
1508 return std::string(
"std::")+cr->
GetName();
1538 else if (nbases == 0)
1589 auto ndirectbases = directbases->
GetSize();
1590 if (ndirectbases == 0) {
1595 std::vector<Cppyy::TCppIndex_t> nbases_branches;
1596 nbases_branches.reserve(ndirectbases);
1657 const std::string&
tn =
cr->GetName();
1668 if (!raw && !
deref)
return true;
1671 if (
cr.GetClass()) {
1672 TFunction* func =
cr->GetMethod(
"operator->",
"");
1674 func =
cr->GetMethod(
"operator->",
"");
1706 return (ptrdiff_t)0;
1712 return (ptrdiff_t)0;
1721 std::ostringstream
msg;
1722 msg <<
"failed offset calculation between " <<
cb->GetName() <<
" and " << cd->
GetName();
1725 std::cerr <<
"Warning: " <<
msg.str() <<
'\n';
1748 return gROOT->GetListOfGlobalFunctions(
true)->GetSize();
1751 if (
cr.GetClass() &&
cr->GetListOfMethods(
true)) {
1755 if (
clName.find(
'<') != std::string::npos) {
1758 std::ostringstream
stmt;
1775 std::vector<TCppIndex_t> indices;
1777 if (
cr.GetClass()) {
1781 TIter next(
cr->GetListOfMethods());
1813 if (
cr.GetClass()) {
1826 const std::string&
name = ((CallWrapper*)
method)->fName;
1828 if (
name.compare(0, 8,
"operator") != 0)
1830 return name.substr(0,
name.find(
'<'));
1839 std::string
name = ((CallWrapper*)
method)->fName;
1858 return "constructor";
1859 std::string
restype =
f->GetReturnTypeName();
1866 if (
restype.find(
"int8_t") != std::string::npos)
1868 restype =
f->GetReturnTypeNormalizedName();
1870 std::ostringstream s;
1872 s <<
"__cling_internal::FT<decltype("
1875 if (i != 0) s <<
", ";
1920 if (
ft.rfind(
"enum ", 0) != std::string::npos) {
1922 return arg_type.insert(
arg_type.rfind(
"const ", 0) == std::string::npos ? 0 : 6,
"enum ");
1978 std::ostringstream sig;
1980 int nArgs =
f->GetNargs();
2004 std::ostringstream sig;
2005 sig <<
f->GetReturnTypeName() <<
" "
2006 <<
scName <<
"::" <<
f->GetName();
2032 if (
cr.GetClass()) {
2049 return cr->GetListOfFunctionTemplates(
false)->At((
int)
imeth)->GetName();
2053 assert(!
"should not be called unless GetNumTemplatedMethods() succeeded");
2063 if (
cr.GetClass()) {
2074 return (
bool)
gROOT->GetFunctionTemplate(
name.c_str());
2078 return (
bool)
cr->GetFunctionTemplate(
name.c_str());
2093 tf =
cr->GetFunctionTemplate(
name.c_str());
2096 if (!
tf)
return false;
2104 if (
cr.GetClass()) {
2106 if (
f &&
strstr(
f->GetName(),
"<"))
return true;
2111 if (((CallWrapper*)idx)->fName.find(
'<') != std::string::npos)
return true;
2121 n.erase(pos,
n.
end());
2126 if (
n1.back() ==
'>')
n1 =
n1.substr(0,
n1.size()-1);
2129 return n2.compare(0,
n1.size(),
n1) == 0;
2143 func =
gROOT->GetGlobalFunctionWithPrototype(
name.c_str(),
proto.c_str());
2144 if (func &&
name.back() ==
'>') {
2152 if (
cr.GetClass()) {
2153 func =
cr->GetMethodWithPrototype(
name.c_str(),
proto.c_str());
2155 cl =
cr->GetClassInfo();
2193 if (
name.back() ==
'>') {
2194 auto pos =
name.find(
'<');
2195 if (pos != std::string::npos) {
2200 if (
name.size() <
alt.size() &&
alt.find(
'<') == pos) {
2219 if (
n1 ==
"str" ||
n1 ==
"unicode") {
2220 if (
n2 ==
"std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >")
2222 return "std::string";
2223 }
else if (
n1 ==
"float") {
2225 }
else if (
n1 ==
"complex") {
2226 return "std::complex<double>";
2245 func =
gROOT->GetGlobalFunctionWithPrototype(
opname.c_str(),
proto.c_str());
2249 if (
cr.GetClass()) {
2251 if (func)
return (
TCppIndex_t)
cr->GetListOfMethods()->IndexOf(func);
2253 func =
cr->GetMethodWithPrototype(
opname.c_str(),
proto.c_str());
2254 if (func)
return (
TCppIndex_t)
cr->GetListOfMethods()->IndexOf(func);
2269 return f->Property() &
prop;
2277 return f->ExtraProperty() &
prop;
2317 return gROOT->GetListOfGlobals(
true)->GetSize();
2320 if (
cr.GetClass() &&
cr->GetListOfDataMembers())
2321 return cr->GetListOfDataMembers()->GetSize();
2329 if (
cr.GetClass()) {
2335 return gbl->GetName();
2342 std::string::size_type pos =
tpname.find(
"::", 0);
2343 while (pos != std::string::npos) {
2345 pos =
tpname.find(
"::", pos+1);
2356 if ((
int)
gbl->GetArrayDim()) {
2357 std::ostringstream s;
2358 for (
int i = 0; i < (
int)
gbl->GetArrayDim(); ++i)
2359 s <<
'[' <<
gbl->GetMaxIndex(i) <<
']';
2366 if (
cr.GetClass()) {
2375 const char*
ft =
m->GetFullTypeName(); std::string
fullType =
ft ?
ft :
"";
2376 const char*
tn =
m->GetTrueTypeName(); std::string
trueName =
tn ?
tn :
"";
2383 fullType.insert(
fullType.rfind(
"const ", 0) == std::string::npos ? 0 : 6,
"enum ");
2387 if ((
int)
m->GetArrayDim()) {
2388 std::ostringstream s;
2389 for (
int i = 0; i < (
int)
m->GetArrayDim(); ++i)
2390 s <<
'[' <<
m->GetMaxIndex(i) <<
']';
2398 auto declid =
m->GetTagDeclId();
2400 (
fullType.find(
"(anonymous)") != std::string::npos ||
fullType.find(
"(unnamed)") != std::string::npos)) {
2404 std::ostringstream
fulls;
2428 if (!
gbl->GetAddress() ||
gbl->GetAddress() == (
void*)-1) {
2430 intptr_t
addr = (intptr_t)
gInterpreter->ProcessLine((std::string(
"&")+
gbl->GetName()+
";").c_str());
2431 if (
gbl->GetAddress() &&
gbl->GetAddress() != (
void*)-1)
2432 return (intptr_t)
gbl->GetAddress();
2435 return (intptr_t)
gbl->GetAddress();
2439 if (
cr.GetClass()) {
2444 intptr_t
offset = (intptr_t)-1;
2448 offset = (intptr_t)
m->GetOffsetCint();
2450 if (
offset == (intptr_t)-1)
2451 return (intptr_t)
gInterpreter->ProcessLine((std::string(
"&")+
cr->GetName()+
"::"+
m->
GetName()+
";").c_str());
2453 offset = (intptr_t)
m->GetOffsetCint();
2457 return (intptr_t)-1;
2491 if (
gb &&
strcmp(
gb->GetFullTypeName(),
"(lambda)") == 0) {
2496 std::ostringstream s;
2497 s <<
"auto __cppyy_internal_wrap_" <<
name <<
" = "
2498 "new __cling_internal::FT<decltype(" <<
name <<
")>::F"
2499 "{" <<
name <<
"};";
2502 (
"__cppyy_internal_wrap_"+
name).c_str());
2510 if (
cr.GetClass()) {
2514 if (dm)
return (
TCppIndex_t)
cr->GetListOfDataMembers()->IndexOf(dm);
2574 if (
cr.GetClass()) {
2600 if (
cr.GetClass()) {
2602 std::string
ti =
m->GetTypeName();
2605 if (
ti.rfind(
"(anonymous)") != std::string::npos ||
ti.rfind(
"(unnamed)") != std::string::npos)
2610 if (
ti.rfind(
cr->GetName(), 0) != std::string::npos) {
2611 std::string::size_type s =
strlen(
cr->GetName())+2;
2612 if (s <
ti.size()) {
2628 return gbl->GetMaxIndex(dimension);
2631 if (
cr.GetClass()) {
2633 return m->GetMaxIndex(dimension);
2665 return (
long long)
ecst->GetValue();
static Roo_reg_AGKInteg1D instance
int Int_t
Signed integer 4 bytes (int)
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
long double LongDouble_t
Long Double (not portable)
long long Long64_t
Portable signed long integer 8 bytes.
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Int_t gErrorIgnoreLevel
errors with level below this value will be ignored. Default is kUnset.
R__EXTERN TExceptionHandler * gExceptionHandler
R__EXTERN ExceptionContext_t * gException
R__EXTERN void Throw(int code)
If an exception context has been set (using the TRY and RETRY macros) jump back to where it was set.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h prop
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h length
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h req_type
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void funcs
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t property
R__EXTERN TSystem * gSystem
static struct Signalmap_t gSignalMap[kMAXSIGNALS]
const_iterator begin() const
const_iterator end() const
Each class (see TClass) has a linked list of its base class(es).
Long_t Property() const override
Get property description word. For meaning of bits see EProperty.
TClassRef is used to implement a permanent reference to a TClass object.
TClass * GetClass() const
TClass instances represent classes, structs and namespaces in the ROOT type system.
TList * GetListOfUsingDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of using declarations of a class.
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
TMethod * GetMethod(const char *method, const char *params, Bool_t objectIsConst=kFALSE)
Find the best method (if there is one) matching the parameters.
TMethod * GetMethodWithPrototype(const char *method, const char *proto, Bool_t objectIsConst=kFALSE, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
Find the method with a given prototype.
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
TList * GetListOfFunctionTemplates(Bool_t load=kTRUE)
Return TListOfFunctionTemplates for a class.
TList * GetListOfEnums(Bool_t load=kTRUE)
Return a list containing the TEnums of a class.
TList * GetListOfMethods(Bool_t load=kTRUE)
Return list containing the TMethods of a class.
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
ClassInfo_t * GetClassInfo() const
Long_t ClassProperty() const
Return the C++ property of this class, eg.
Long_t Property() const override
Returns the properties of the TClass as a bit field stored as a Long_t value.
Bool_t HasDefaultConstructor(Bool_t testio=kFALSE) const
Return true if we have access to a constructor usable for I/O.
TMethod * GetMethodAllAny(const char *method)
Return pointer to method without looking at parameters.
ROOT::DelFunc_t GetDelete() const
Return the wrapper around delete ThisObject.
TClass * GetActualClass(const void *object) const
Return a pointer to the real class of the object.
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
Collection abstract base class.
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
All ROOT classes may have RTTI (run time type identification) support added.
Basic data type descriptor (datatype information is obtained from CINT).
Long_t Property() const override
Get property description word. For meaning of bits see EProperty.
Int_t Size() const
Get size of basic typedef'ed type.
The TEnumConstant class implements the constants of the enum type.
The TEnum class implements the enum type.
const char * GetValue() const
const char * GetName() const override
Returns name of object.
Dictionary for function template This class describes one single function template.
Global functions class (global functions are obtained from CINT).
Long_t Property() const override
Get property description word. For meaning of bits see EProperty.
Long_t ExtraProperty() const
Get property description word. For meaning of bits see EProperty.
std::string GetReturnTypeNormalizedName() const
Get the normalized name of the return type.
Global variables class (global variables are obtained from CINT).
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
A collection of TDataMember objects designed for fast access given a DeclId_t and for keep track of T...
A collection of TEnum objects designed for fast access given a DeclId_t and for keep track of TEnum t...
TObject * At(Int_t idx) const override
Returns the object at position idx. Returns 0 if idx is out of range.
Each ROOT method (see TMethod) has a linked list of its arguments.
const char * GetFullTypeName() const
Get full type description of method argument, e.g.: "class TDirectory*".
TypeInfo_t * GetTypeInfo() const
Get the TypeInfo of the method argument.
const char * GetDefault() const
Get default value of method argument.
std::string GetTypeNormalizedName() const
Get the normalized name of the return type.
const char * GetName() const override
Returns name of object.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetName() const
Returns name of object.
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
static Bool_t Initialized()
Return kTRUE if the TROOT object has been initialized.
virtual void Exit(int code, Bool_t mode=kTRUE)
Exit the application.
virtual void StackTrace()
Print a stack trace.
static void cond_add(Cppyy::TCppScope_t scope, const std::string &ns_scope, std::set< std::string > &cppnames, const char *name, bool nofilter=false)
static bool testMethodProperty(Cppyy::TCppMethod_t method, EProperty prop)
static Name2ClassRefIndex_t g_name2classrefidx
#define FILL_COLL(type, filter)
static void remove_space(std::string &n)
static std::string outer_with_template(const std::string &name)
static std::string outer_no_template(const std::string &name)
static std::string type_remap(const std::string &n1, const std::string &n2)
static std::map< Cppyy::TCppType_t, bool > sHasOperatorDelete
static std::set< std::string > gRootSOs
static bool template_compare(std::string n1, std::string n2)
static TClassRef & type_from_handle(Cppyy::TCppScope_t scope)
static bool copy_args(Parameter *args, size_t nargs, void **vargs)
static TInterpreter::CallFuncIFacePtr_t GetCallFunc(Cppyy::TCppMethod_t method)
CPyCppyy::Parameter Parameter
static bool is_missclassified_stl(const std::string &name)
std::map< std::string, ClassRefs_t::size_type > Name2ClassRefIndex_t
static const ClassRefs_t::size_type STD_HANDLE
static std::set< std::string > gSmartPtrTypes
static GlobalVars_t g_globalvars
static char * cppstring_to_cstring(const std::string &cppstr)
static void release_args(Parameter *args, size_t nargs)
static std::set< std::string > g_builtins
static std::vector< CallWrapper * > gWrapperHolder
static bool gEnableFastPath
static ClassRefs_t g_classrefs(1)
static bool WrapperCall(Cppyy::TCppMethod_t method, size_t nargs, void *args_, void *self, void *result)
static std::map< std::string, std::string > resolved_enum_types
static Cppyy::TCppIndex_t gb2idx(TGlobal *gb)
static size_t CALL_NARGS(size_t nargs)
static CallWrapper * new_CallWrapper(TFunction *f)
static std::set< std::string > gSTLNames
static const ClassRefs_t::size_type GLOBAL_HANDLE
static GlobalVarsIndices_t g_globalidx
static bool testMethodExtraProperty(Cppyy::TCppMethod_t method, EFunctionProperty prop)
static int count_scopes(const std::string &tpname)
std::vector< TGlobal * > GlobalVars_t
std::map< TGlobal *, GlobalVars_t::size_type > GlobalVarsIndices_t
std::vector< TClassRef > ClassRefs_t
static std::map< TDictionary::DeclId_t, CallWrapper * > gMethodTemplates
static bool match_name(const std::string &tname, const std::string fname)
static TFunction * m2f(Cppyy::TCppMethod_t method)
#define CPPYY_IMP_CALL(typecode, rtype)
static std::set< std::string > gInitialNames
static T CallT(Cppyy::TCppMethod_t method, Cppyy::TCppObject_t self, size_t nargs, void *args)
Cppyy::TCppIndex_t GetLongestInheritancePath(TClass *klass)
Retrieve number of base classes in the longest branch of the inheritance tree of the input class.
RPY_EXPORTED TCppIndex_t GetNumTemplatedMethods(TCppScope_t scope, bool accept_namespace=false)
RPY_EXPORTED std::string GetMethodMangledName(TCppMethod_t)
RPY_EXPORTED TCppObject_t CallO(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args, TCppType_t result_type)
RPY_EXPORTED TCppIndex_t CompareMethodArgType(TCppMethod_t, TCppIndex_t iarg, const std::string &req_type)
RPY_EXPORTED ptrdiff_t GetBaseOffset(TCppType_t derived, TCppType_t base, TCppObject_t address, int direction, bool rerror=false)
RPY_EXPORTED void DeallocateFunctionArgs(void *args)
RPY_EXPORTED bool IsEnumData(TCppScope_t scope, TCppIndex_t idata)
RPY_EXPORTED bool IsAbstract(TCppType_t type)
RPY_EXPORTED bool IsIntegerType(const std::string &type_name)
RPY_EXPORTED size_t SizeOf(TCppType_t klass)
RPY_EXPORTED TCppObject_t CallConstructor(TCppMethod_t method, TCppType_t type, size_t nargs, void *args)
RPY_EXPORTED void * AllocateFunctionArgs(size_t nargs)
RPY_EXPORTED bool IsDefaultConstructable(TCppType_t type)
RPY_EXPORTED bool IsTemplate(const std::string &template_name)
RPY_EXPORTED TCppIndex_t GetDatamemberIndexEnumerated(TCppScope_t scope, TCppIndex_t idata)
RPY_EXPORTED TCppIndex_t GetMethodReqArgs(TCppMethod_t)
RPY_EXPORTED bool IsEnum(const std::string &type_name)
RPY_EXPORTED std::vector< TCppIndex_t > GetMethodIndicesFromName(TCppScope_t scope, const std::string &name)
RPY_EXPORTED bool ExistsMethodTemplate(TCppScope_t scope, const std::string &name)
RPY_EXPORTED TCppIndex_t GetNumDatamembers(TCppScope_t scope, bool accept_namespace=false)
RPY_EXPORTED std::string ToString(TCppType_t klass, TCppObject_t obj)
RPY_EXPORTED std::string GetMethodName(TCppMethod_t)
RPY_EXPORTED bool IsConstData(TCppScope_t scope, TCppIndex_t idata)
RPY_EXPORTED void AddSmartPtrType(const std::string &)
RPY_EXPORTED bool Compile(const std::string &code, bool silent=false)
RPY_EXPORTED void CallDestructor(TCppType_t type, TCppObject_t self)
RPY_EXPORTED TCppScope_t gGlobalScope
RPY_EXPORTED bool IsProtectedData(TCppScope_t scope, TCppIndex_t idata)
RPY_EXPORTED std::string GetMethodSignature(TCppMethod_t, bool show_formalargs, TCppIndex_t maxargs=(TCppIndex_t) -1)
RPY_EXPORTED int GetDimensionSize(TCppScope_t scope, TCppIndex_t idata, int dimension)
RPY_EXPORTED bool IsSubtype(TCppType_t derived, TCppType_t base)
RPY_EXPORTED TCppMethod_t GetMethodTemplate(TCppScope_t scope, const std::string &name, const std::string &proto)
RPY_EXPORTED bool IsConstructor(TCppMethod_t method)
RPY_EXPORTED TCppIndex_t GetNumMethods(TCppScope_t scope, bool accept_namespace=false)
RPY_EXPORTED TCppObject_t Construct(TCppType_t type, void *arena=nullptr)
RPY_EXPORTED bool GetSmartPtrInfo(const std::string &, TCppType_t *raw, TCppMethod_t *deref)
RPY_EXPORTED std::string GetMethodArgName(TCppMethod_t, TCppIndex_t iarg)
RPY_EXPORTED size_t GetFunctionArgTypeoffset()
RPY_EXPORTED TCppObject_t Allocate(TCppType_t type)
RPY_EXPORTED void Destruct(TCppType_t type, TCppObject_t instance)
RPY_EXPORTED std::string ResolveName(const std::string &cppitem_name)
RPY_EXPORTED void AddTypeReducer(const std::string &reducable, const std::string &reduced)
RPY_EXPORTED std::string ResolveEnum(const std::string &enum_type)
RPY_EXPORTED long long GetEnumDataValue(TCppEnum_t, TCppIndex_t idata)
RPY_EXPORTED bool IsAggregate(TCppType_t type)
RPY_EXPORTED TCppIndex_t GetMethodNumArgs(TCppMethod_t)
RPY_EXPORTED TCppType_t GetActualClass(TCppType_t klass, TCppObject_t obj)
RPY_EXPORTED std::string GetBaseName(TCppType_t type, TCppIndex_t ibase)
RPY_EXPORTED bool IsNamespace(TCppScope_t scope)
RPY_EXPORTED std::string GetScopedFinalName(TCppType_t type)
RPY_EXPORTED void Deallocate(TCppType_t type, TCppObject_t instance)
RPY_EXPORTED bool IsPublicData(TCppScope_t scope, TCppIndex_t idata)
RPY_EXPORTED std::string GetMethodArgType(TCppMethod_t, TCppIndex_t iarg)
RPY_EXPORTED std::string GetEnumDataName(TCppEnum_t, TCppIndex_t idata)
RPY_EXPORTED void GetAllCppNames(TCppScope_t scope, std::set< std::string > &cppnames)
RPY_EXPORTED bool IsComplete(const std::string &type_name)
RPY_EXPORTED bool IsBuiltin(const std::string &type_name)
RPY_EXPORTED bool IsStaticMethod(TCppMethod_t method)
RPY_EXPORTED TCppIndex_t GetDatamemberIndex(TCppScope_t scope, const std::string &name)
RPY_EXPORTED void CallV(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args)
RPY_EXPORTED bool IsStaticData(TCppScope_t scope, TCppIndex_t idata)
RPY_EXPORTED std::string GetDatamemberType(TCppScope_t scope, TCppIndex_t idata)
RPY_EXPORTED TCppMethod_t GetMethod(TCppScope_t scope, TCppIndex_t imeth)
RPY_EXPORTED bool IsStaticTemplate(TCppScope_t scope, const std::string &name)
RPY_EXPORTED bool IsDestructor(TCppMethod_t method)
RPY_EXPORTED bool IsSmartPtr(TCppType_t type)
RPY_EXPORTED std::string GetTemplatedMethodName(TCppScope_t scope, TCppIndex_t imeth)
RPY_EXPORTED size_t GetFunctionArgSizeof()
RPY_EXPORTED TCppScope_t GetScope(const std::string &scope_name)
RPY_EXPORTED bool HasVirtualDestructor(TCppType_t type)
RPY_EXPORTED bool IsConstMethod(TCppMethod_t)
RPY_EXPORTED bool HasComplexHierarchy(TCppType_t type)
RPY_EXPORTED std::vector< TCppScope_t > GetUsingNamespaces(TCppScope_t)
RPY_EXPORTED bool IsTemplatedConstructor(TCppScope_t scope, TCppIndex_t imeth)
RPY_EXPORTED TCppIndex_t GetGlobalOperator(TCppType_t scope, const std::string &lc, const std::string &rc, const std::string &op)
RPY_EXPORTED TCppFuncAddr_t GetFunctionAddress(TCppMethod_t method, bool check_enabled=true)
RPY_EXPORTED TCppIndex_t GetNumEnumData(TCppEnum_t)
RPY_EXPORTED TCppIndex_t GetNumBases(TCppType_t type)
RPY_EXPORTED TCppIndex_t GetNumBasesLongestBranch(TCppType_t type)
RPY_EXPORTED std::string GetMethodPrototype(TCppScope_t scope, TCppMethod_t, bool show_formalargs)
RPY_EXPORTED std::string GetMethodResultType(TCppMethod_t)
RPY_EXPORTED std::string GetFinalName(TCppType_t type)
RPY_EXPORTED char * CallS(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args, size_t *length)
RPY_EXPORTED bool IsExplicit(TCppMethod_t method)
RPY_EXPORTED std::string GetMethodArgDefault(TCppMethod_t, TCppIndex_t iarg)
RPY_EXPORTED bool IsMethodTemplate(TCppScope_t scope, TCppIndex_t imeth)
RPY_EXPORTED std::string GetDatamemberName(TCppScope_t scope, TCppIndex_t idata)
RPY_EXPORTED bool IsPublicMethod(TCppMethod_t method)
RPY_EXPORTED intptr_t GetDatamemberOffset(TCppScope_t scope, TCppIndex_t idata)
RPY_EXPORTED std::string GetMethodFullName(TCppMethod_t)
RPY_EXPORTED bool IsProtectedMethod(TCppMethod_t method)
RPY_EXPORTED TCppEnum_t GetEnum(TCppScope_t scope, const std::string &enum_name)
void(* DelFunc_t)(void *)
std::string ResolveTypedef(const char *tname, bool resolveAll=false)
std::string CleanType(const char *typeDesc, int mode=0, const char **tail=nullptr)
Cleanup type description, redundant blanks removed and redundant tail ignored return *tail = pointer ...
std::string ShortType(const char *typeDesc, int mode)
Return the absolute type of typeDesc.
char * DemangleName(const char *mangled_name, int &errorCode)
union CPyCppyy::Parameter::Value fValue