36 return PyUnicode_FromFormat(
37 "%s::%s%s", clName.c_str(), clName.c_str(),
38 this->GetMethod() ? this->GetSignatureString().c_str() :
"()");
52 return PyUnicode_FromString(fn.c_str());
63 if (fArgsRequired == -1 && !this->Initialize(ctxt))
68 if (!this->ProcessArgs(cargs))
73 PyErr_SetString(PyExc_ReferenceError,
"no python object allocated");
80 "object already constructed; use __assign__ instead of __init__");
104 intptr_t address = 0;
105 if (GetScope() != disp) {
112 if (!GetScope() || !disp) {
113 PyErr_SetString(PyExc_TypeError,
114 "can not construct incomplete C++ class");
121 PyErr_SetString(PyExc_TypeError,
"dispatcher proxy was never created");
126 PyErr_SetString(PyExc_TypeError,
127 const_cast<char*
>((
"constructor for " +
129 " is not a dispatcher")
141 address = (intptr_t)((
CPPInstance*)pyobj)->GetObject();
145 PyObject* res = PyObject_CallMethodObjArgs(
149 Py_DECREF(dispproxy);
155 if (!this->ConvertAndSetArgs(cargs.fArgs, cargs.fNArgsf, ctxt))
158 address = (intptr_t)this->Execute(
nullptr, 0, ctxt);
168 self->
Set((
void*)address);
183 Py_DECREF((
PyObject*)Py_TYPE(self));
184 Py_SET_TYPE(self, (PyTypeObject*)pyclass);
194 if (!PyErr_Occurred())
195 PyErr_SetString(PyExc_TypeError,
197 " constructor failed")
247 if (!this->ProcessArgs(cargs))
254 PyObject* args = PyTuple_New(nargs);
255 for (Py_ssize_t i = 0; i < nargs; ++i) {
256 Py_INCREF(cargs.fArgs[i]);
257 PyTuple_SET_ITEM(args, i, cargs.fArgs[i]);
263 if (PyTuple_CheckExact(args) &&
264 PyTuple_GET_SIZE(args)) {
265 Py_ssize_t nArgs = PyTuple_GET_SIZE(args);
267 bool isAllTuples =
true;
268 Py_ssize_t nArgsTot = 0;
269 for (Py_ssize_t i = 0; i < nArgs; ++i) {
270 PyObject* argi = PyTuple_GET_ITEM(args, i);
271 if (!PyTuple_CheckExact(argi)) {
275 nArgsTot += PyTuple_GET_SIZE(argi);
281 PyObject* newArgs = PyTuple_New(nArgsTot + fNumBases - 1);
283 for (Py_ssize_t i = 0; i < nArgs; ++i) {
291 PyObject* argi = PyTuple_GET_ITEM(args, i);
292 for (Py_ssize_t j = 0; j < PyTuple_GET_SIZE(argi); ++j) {
293 PyObject* item = PyTuple_GET_ITEM(argi, j);
295 PyTuple_SET_ITEM(newArgs, idx, item);
301 while (idx < (nArgsTot + fNumBases - 1)) {
311 PyObject* newArgs = PyTuple_New(PyTuple_GET_SIZE(args) + fNumBases - 1);
312 for (Py_ssize_t i = 0; i < nArgs; ++i) {
313 PyObject* item = PyTuple_GET_ITEM(args, i);
315 PyTuple_SET_ITEM(newArgs, i, item);
317 for (Py_ssize_t i = 0; i < fNumBases - 1; ++i) {
326 nargs = PyTuple_GET_SIZE(args);
329 auto argsu = std::unique_ptr<PyObject*[]>{
new PyObject*[nargs]};
330 for (Py_ssize_t i = 0; i < nargs; ++i)
331 argsu[i] = PyTuple_GET_ITEM(args, i);
347 if ((self && GetScope() != self->
ObjectIsA()) ||
350 GetScope() != ((
CPPInstance*)args[0])->ObjectIsA())) {
355 PyErr_Format(PyExc_TypeError,
356 "cannot instantiate abstract class \'%s\'"
357 " (from derived classes, use super() instead)",
367 PyErr_Format(PyExc_TypeError,
"cannot instantiate namespace \'%s\'",
377 PyErr_Format(PyExc_TypeError,
"cannot instantiate incomplete class \'%s\'",
389 "cannot instantiate class \'%s\' that has no public constructors",
interop::TCppScope_t fUnderlyingType
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 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 format
PyObject * Call(CPPInstance *&self, cpyrt_PyArgs_t args, size_t nargsf, PyObject *kwds, CallContext *ctxt=nullptr) override
PyObject * Call(CPPInstance *&self, cpyrt_PyArgs_t args, size_t nargsf, PyObject *kwds, CallContext *ctxt=nullptr) override
bool InitExecutor_(Executor *&, CallContext *ctxt=nullptr) override
PyObject * Call(CPPInstance *&self, cpyrt_PyArgs_t args, size_t nargsf, PyObject *kwds, CallContext *ctxt=nullptr) override
PyObject * GetDocString() override
PyObject * Reflex(interop::Reflex::RequestId_t, interop::Reflex::FormatId_t=interop::Reflex::OPTIMAL) override
PyObject * Call(CPPInstance *&self, cpyrt_PyArgs_t args, size_t nargsf, PyObject *kwds, CallContext *ctxt=nullptr) override
void SetSmart(PyObject *smart_type)
interop::TCppScope_t ObjectIsA(bool check_smart=true) const
void Set(void *address, EFlags flags=kDefault)
CPPMethod & operator=(const CPPMethod &)
PyObject * Call(CPPInstance *&self, cpyrt_PyArgs_t args, size_t nargsf, PyObject *kwds, CallContext *ctxt=nullptr) override
CPPMultiConstructor(interop::TCppScope_t scope, interop::TCppMethod_t method)
CPPMultiConstructor & operator=(const CPPMultiConstructor &)
PyObject * Call(CPPInstance *&self, cpyrt_PyArgs_t args, size_t nargsf, PyObject *kwds, CallContext *ctxt=nullptr) override
static bool RegisterPyObject(CPPInstance *pyobj, interop::TCppObject_t cppobj)
virtual PyObject * Reflex(interop::Reflex::RequestId_t request, interop::Reflex::FormatId_t format=interop::Reflex::OPTIMAL)
PyObject *const * cpyrt_PyArgs_t
static Py_ssize_t cpyrt_PyArgs_GET_SIZE(cpyrt_PyArgs_t, size_t nargsf)
#define cpyrt_PyObject_Call
PyObject * gNullPtrObject
PyObject * GetScopeProxy(interop::TCppScope_t)
PyObject * CreateScopeProxy(PyObject *, PyObject *args)
CPYRT_EXTERN Executor * CreateExecutor(const std::string &name, cdims_t=0)
CPYRT_EXTERN void * Instance_AsVoidPtr(PyObject *pyobject)
bool CPPInstance_Check(T *object)
PyObject * Instance_FromVoidPtr(void *addr, const char *classname, int python_owns)
const FormatId_t AS_STRING
const RequestId_t RETURN_TYPE
Cpp::ObjectRef TCppObject_t
TCppIndex_t GetNumBases(TCppScope_t klass)
Cpp::FuncRef TCppMethod_t
std::string GetMethodSignature(TCppMethod_t, bool show_formal_args, TCppIndex_t max_args=(TCppIndex_t) -1)
bool IsExplicit(TCppMethod_t method)
std::string GetFinalName(TCppScope_t type)
std::string GetScopedFinalName(TCppScope_t type)