MemoryRegulator.cxx (root_v6.26.08.source) | : | MemoryRegulator.cxx (root_v6.26.10.source) | ||
---|---|---|---|---|
skipping to change at line 46 | skipping to change at line 46 | |||
struct InitCPyCppyy_NoneType_t { | struct InitCPyCppyy_NoneType_t { | |||
InitCPyCppyy_NoneType_t() { | InitCPyCppyy_NoneType_t() { | |||
// create a CPyCppyy NoneType (for references that went dodo) from NoneType | // create a CPyCppyy NoneType (for references that went dodo) from NoneType | |||
memset(&CPyCppyy_NoneType, 0, sizeof(CPyCppyy_NoneType)); | memset(&CPyCppyy_NoneType, 0, sizeof(CPyCppyy_NoneType)); | |||
((PyObject&)CPyCppyy_NoneType).ob_type = &PyType_Type; | ((PyObject&)CPyCppyy_NoneType).ob_type = &PyType_Type; | |||
((PyObject&)CPyCppyy_NoneType).ob_refcnt = 1; | ((PyObject&)CPyCppyy_NoneType).ob_refcnt = 1; | |||
((PyVarObject&)CPyCppyy_NoneType).ob_size = 0; | ((PyVarObject&)CPyCppyy_NoneType).ob_size = 0; | |||
CPyCppyy_NoneType.tp_name = const_cast<char*>("CPyCppyy_NoneType" ); | CPyCppyy_NoneType.tp_name = const_cast<char*>("CPyCppyy_NoneType" ); | |||
CPyCppyy_NoneType.tp_flags = Py_TPFLAGS_HAVE_RICHCOMPARE | Py_TPFL AGS_HAVE_GC; | CPyCppyy_NoneType.tp_flags = Py_TPFLAGS_HAVE_RICHCOMPARE; | |||
CPyCppyy_NoneType.tp_traverse = (traverseproc)0; | CPyCppyy_NoneType.tp_traverse = (traverseproc)0; | |||
CPyCppyy_NoneType.tp_clear = (inquiry)0; | CPyCppyy_NoneType.tp_clear = (inquiry)0; | |||
CPyCppyy_NoneType.tp_dealloc = (destructor)&InitCPyCppyy_NoneType_t: :DeAlloc; | CPyCppyy_NoneType.tp_dealloc = (destructor)&InitCPyCppyy_NoneType_t: :DeAlloc; | |||
CPyCppyy_NoneType.tp_repr = Py_TYPE(Py_None)->tp_repr; | CPyCppyy_NoneType.tp_repr = Py_TYPE(Py_None)->tp_repr; | |||
CPyCppyy_NoneType.tp_richcompare = (richcmpfunc)&InitCPyCppyy_NoneType_t ::RichCompare; | CPyCppyy_NoneType.tp_richcompare = (richcmpfunc)&InitCPyCppyy_NoneType_t ::RichCompare; | |||
#if PY_VERSION_HEX < 0x03000000 | #if PY_VERSION_HEX < 0x03000000 | |||
// tp_compare has become tp_reserved (place holder only) in p3 | // tp_compare has become tp_reserved (place holder only) in p3 | |||
CPyCppyy_NoneType.tp_compare = (cmpfunc)&InitCPyCppyy_NoneType_t::Co mpare; | CPyCppyy_NoneType.tp_compare = (cmpfunc)&InitCPyCppyy_NoneType_t::Co mpare; | |||
#endif | #endif | |||
skipping to change at line 134 | skipping to change at line 134 | |||
// nullify the object | // nullify the object | |||
if (!CPyCppyy_NoneType.tp_traverse) { | if (!CPyCppyy_NoneType.tp_traverse) { | |||
// take a reference as we're copying its function pointers | // take a reference as we're copying its function pointers | |||
Py_INCREF(Py_TYPE(pyobj)); | Py_INCREF(Py_TYPE(pyobj)); | |||
// all object that arrive here are expected to be of the same type ("ins tance") | // all object that arrive here are expected to be of the same type ("ins tance") | |||
CPyCppyy_NoneType.tp_traverse = Py_TYPE(pyobj)->tp_traverse; | CPyCppyy_NoneType.tp_traverse = Py_TYPE(pyobj)->tp_traverse; | |||
CPyCppyy_NoneType.tp_clear = Py_TYPE(pyobj)->tp_clear; | CPyCppyy_NoneType.tp_clear = Py_TYPE(pyobj)->tp_clear; | |||
CPyCppyy_NoneType.tp_free = Py_TYPE(pyobj)->tp_free; | CPyCppyy_NoneType.tp_free = Py_TYPE(pyobj)->tp_free; | |||
CPyCppyy_NoneType.tp_flags = Py_TYPE(pyobj)->tp_flags; | ||||
} else if (CPyCppyy_NoneType.tp_traverse != Py_TYPE(pyobj)->tp_traverse) { | } else if (CPyCppyy_NoneType.tp_traverse != Py_TYPE(pyobj)->tp_traverse) { | |||
// TODO: SystemError? | // TODO: SystemError? | |||
std::cerr << "in CPyCppyy::MemoryRegulater, unexpected object of typ e: " | std::cerr << "in CPyCppyy::MemoryRegulater, unexpected object of typ e: " | |||
<< Py_TYPE(pyobj)->tp_name << std::endl; | << Py_TYPE(pyobj)->tp_name << std::endl; | |||
// drop object and leave before too much damage is done | // drop object and leave before too much damage is done | |||
Py_DECREF(pyscope); | Py_DECREF(pyscope); | |||
return false; | return false; | |||
} | } | |||
End of changes. 2 change blocks. | ||||
1 lines changed or deleted | 2 lines changed or added |