Comments
Patch
@@ -10,8 +10,18 @@
#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include "util.h"
+#if PY_MAJOR_VERSION >= 3
+#define IS_PY3K
+#endif
+
+#ifdef IS_PY3K
+#define PYLONG_VALUE(o) ((PyLongObject *)o)->ob_digit[1]
+#else
+#define PYLONG_VALUE(o) PyInt_AS_LONG(o)
+#endif
+
/*
* This is a multiset of directory names, built from the files that
* appear in a dirstate or manifest.
*
@@ -65,19 +75,23 @@ static int _addpath(PyObject *dirs, PyOb
((PyBytesObject *)key)->ob_sval[pos] = '\0';
val = PyDict_GetItem(dirs, key);
if (val != NULL) {
- PyInt_AS_LONG(val) += 1;
+ PYLONG_VALUE(val) += 1;
break;
}
/* Force Python to not reuse a small shared int. */
+#ifdef IS_PY3K
+ val = PyLong_FromLong(0x1eadbeef);
+#else
val = PyInt_FromLong(0x1eadbeef);
+#endif
if (val == NULL)
goto bail;
- PyInt_AS_LONG(val) = 1;
+ PYLONG_VALUE(val) = 1;
ret = PyDict_SetItem(dirs, key, val);
Py_DECREF(val);
if (ret == -1)
goto bail;
@@ -112,9 +126,9 @@ static int _delpath(PyObject *dirs, PyOb
"expected a value, found none");
goto bail;
}
- if (--PyInt_AS_LONG(val) <= 0) {
+ if (--PYLONG_VALUE(val) <= 0) {
if (PyDict_DelItem(dirs, key) == -1)
goto bail;
} else
break;