Index: Objects/abstract.c =================================================================== --- Objects/abstract.c (revision 68543) +++ Objects/abstract.c (working copy) @@ -1379,19 +1379,7 @@ } return res; } - if (m && m->nb_long) { /* This should include subclasses of long */ - /* Classic classes always take this branch. */ - PyObject *res = m->nb_long(o); - if (res && !PyLong_Check(res)) { - PyErr_Format(PyExc_TypeError, - "__long__ returned non-long (type %.200s)", - res->ob_type->tp_name); - Py_DECREF(res); - return NULL; - } - return res; - } - if (PyLong_Check(o)) /* A long subclass without nb_long */ + if (PyLong_Check(o)) /* An int subclass without nb_int */ return _PyLong_Copy((PyLongObject *)o); trunc_func = PyObject_GetAttr(o, trunc_name); if (trunc_func) { Index: Lib/test/test_long.py =================================================================== --- Lib/test/test_long.py (revision 68543) +++ Lib/test/test_long.py (working copy) @@ -410,12 +410,12 @@ class Classic: pass for base in (object, Classic): - class LongOverridesTrunc(base): - def __long__(self): + class IntOverridesTrunc(base): + def __int__(self): return 42 def __trunc__(self): return -12 - self.assertEqual(int(LongOverridesTrunc()), 42) + self.assertEqual(int(IntOverridesTrunc()), 42) class JustTrunc(base): def __trunc__(self): Index: Modules/_struct.c =================================================================== --- Modules/_struct.c (revision 68543) +++ Modules/_struct.c (working copy) @@ -127,8 +127,8 @@ return v; } m = Py_TYPE(v)->tp_as_number; - if (m != NULL && m->nb_long != NULL) { - v = m->nb_long(v); + if (m != NULL && m->nb_int != NULL) { + v = m->nb_int(v); if (v == NULL) return NULL; if (PyLong_Check(v)) @@ -136,7 +136,7 @@ Py_DECREF(v); } PyErr_SetString(StructError, - "cannot convert argument to long"); + "cannot convert argument to integer"); return NULL; }