- Py_XINCREF((PyObject*)ptr);
-}
-
-ePyObject::ePyObject(ePyObject &p)
-{
- m_object = p.m_object;
- Py_XINCREF((PyObject*)m_object);
-}
-
-ePyObject::ePyObject(): m_object(0)
-{
-}
-
-ePyObject::~ePyObject()
-{
- Py_XDECREF((PyObject*)m_object);
-}
-
-ePyObject &ePyObject::operator=(ePyObject &p)
-{
- Py_XDECREF((PyObject*)m_object);
- m_object = p.m_object;
- Py_XINCREF((PyObject*)m_object);
- return *this;
+ if (!m_ob)
+ {
+ eDebug("invalid decref python object with null pointer %s %d!!!", file, line);
+ if (m_file)
+ eDebug("last modified in file %s line %d from %d to %d",
+ m_file, m_line, m_from, m_to);
+ bsodFatal();
+ }
+ if (m_erased || m_ob->ob_refcnt <= 0)
+ {
+ eDebug("invalid decref %s python object with refcounting value %d in file %s line %d!!!",
+ m_erased ? "deleted" : "undeleted", m_ob->ob_refcnt, file, line);
+ if (m_file)
+ eDebug("last modified in file %s line %d from %d to %d",
+ m_file, m_line, m_from, m_to);
+ bsodFatal();
+ }
+ m_file = file;
+ m_line = line;
+ m_from = m_ob->ob_refcnt;
+ m_to = m_from-1;
+ m_erased = !m_to;
+ Py_DECREF(m_ob);