Mercurial > cpython-lru_cache-weakref
diff Python/structmember.c @ 34677:e9ffad6d8822 legacy-trunk
Patch #1115086: support PY_LONGLONG in structmember.
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Thu, 03 Mar 2005 23:00:26 +0000 |
| parents | 86fdf8fe7f17 |
| children | e9a10f74cf88 |
line wrap: on
line diff
--- a/Python/structmember.c Thu Mar 03 21:10:23 2005 +0000 +++ b/Python/structmember.c Thu Mar 03 23:00:26 2005 +0000 @@ -118,6 +118,14 @@ PyErr_SetString(PyExc_AttributeError, l->name); Py_XINCREF(v); break; +#ifdef HAVE_LONG_LONG + case T_LONGLONG: + v = PyLong_FromLongLong(*(PY_LONG_LONG *)addr); + break; + case T_ULONGLONG: + v = PyLong_FromUnsignedLongLong(*(unsigned PY_LONG_LONG *)addr); + break; +#endif /* HAVE_LONG_LONG */ default: PyErr_SetString(PyExc_SystemError, "bad memberdescr type"); v = NULL; @@ -246,6 +254,30 @@ return -1; } break; +#ifdef HAVE_LONG_LONG + case T_LONGLONG: + if (!PyLong_Check(v)) { + PyErr_BadArgument(); + return -1; + } else { + *(PY_LONG_LONG*)addr = PyLong_AsLongLong(v); + if ((*addr == -1) && PyErr_Occurred()) { + return -1; + } + } + break; + case T_ULONGLONG: + if (!PyLong_Check(v)) { + PyErr_BadArgument(); + return -1; + } else { + *(unsigned PY_LONG_LONG*)addr = PyLong_AsUnsignedLongLong(v); + if ((*addr == -1) && PyErr_Occurred()) { + return -1; + } + } + break; +#endif /* HAVE_LONG_LONG */ default: PyErr_Format(PyExc_SystemError, "bad memberdescr type for %s", l->name);
