+#ifdef PYTHON_REFCOUNT_DEBUG
+ePyObject &ePyObject::operator=(PyObject *ob)
+{
+ m_ob=ob;
+ m_file=0;
+ m_line=0;
+ m_from=m_to=0;
+ m_erased=false;
+ return *this;
+}
+
+ePyObject &ePyObject::operator=(const ePyObject &ob)
+{
+ m_ob=ob.m_ob;
+ m_file=ob.m_file;
+ m_line=ob.m_line;
+ m_from=ob.m_from;
+ m_to=ob.m_to;
+ m_erased=ob.m_erased;
+ return *this;
+}
+
+ePyObject::operator PyObject*()
+{
+ if (m_ob)
+ {
+ if (!m_erased && m_ob->ob_refcnt > 0)
+ return m_ob;
+ eDebug("invalid access PyObject %s with refcount <= 0 %d",
+ m_erased ? "deleted" : "undeleted", m_ob->ob_refcnt);
+ if (m_file)
+ eDebug("last modified in file %s line %d from %d to %d",
+ m_file, m_line, m_from, m_to);
+ bsodFatal("enigma2, refcnt");
+ }
+ return 0;
+}
+
+void ePyObject::incref(const char *file, int line)
+{
+ if (!m_ob)
+ {
+ eDebug("invalid incref 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("enigma2, refcnt");
+ }
+ if (m_erased || m_ob->ob_refcnt <= 0)
+ {
+ eDebug("invalid incref %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("enigma2, refcnt");
+ }
+ if (m_ob->ob_refcnt == 0x7FFFFFFF)
+ {
+ eDebug("invalid incref %s python object with refcounting value %d (MAX_INT!!!) 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("enigma2, refcnt");
+ }
+ m_file = file;
+ m_line = line;
+ m_from = m_ob->ob_refcnt;
+ m_to = m_from+1;
+ Py_INCREF(m_ob);
+}
+
+void ePyObject::decref(const char *file, int line)
+{
+ 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("enigma2, refcnt");
+ }
+ 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("enigma2, refcnt");
+ }
+ 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);
+}
+#endif // PYTHON_REFCOUNT_DEBUG
+
+#define SKIP_PART1
+#include <lib/python/python.h>
+#undef SKIP_PART1