diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2007-06-09 08:01:33 +0000 |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2007-06-09 08:01:33 +0000 |
commit | 2276885acda0a74875cf02c5459c05e67b986f97 (patch) | |
tree | 2a5304e0663e66f4bae4860bf5a8e711fd529930 /Python | |
parent | 66e64e2b6a837bcd95c29a2173d065fdc91f0581 (diff) | |
download | cpython-git-2276885acda0a74875cf02c5459c05e67b986f97.tar.gz |
Patch #1733960: Allow T_LONGLONG to accept ints.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/structmember.c | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/Python/structmember.c b/Python/structmember.c index 03934c0c84..8275589f15 100644 --- a/Python/structmember.c +++ b/Python/structmember.c @@ -277,31 +277,25 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v) } break; #ifdef HAVE_LONG_LONG - case T_LONGLONG: - if (!PyLong_Check(v)) { - PyErr_BadArgument(); + case T_LONGLONG:{ + PY_LONG_LONG value; + *(PY_LONG_LONG*)addr = value = PyLong_AsLongLong(v); + if ((value == -1) && PyErr_Occurred()) return -1; - } else { - PY_LONG_LONG value; - *(PY_LONG_LONG*)addr = value = PyLong_AsLongLong(v); - if ((value == -1) && PyErr_Occurred()) { - return -1; - } - } - break; - case T_ULONGLONG: - if (!PyLong_Check(v)) { - PyErr_BadArgument(); - return -1; - } else { - unsigned PY_LONG_LONG value; - *(unsigned PY_LONG_LONG*)addr = value = PyLong_AsUnsignedLongLong(v); - if ((value == (unsigned PY_LONG_LONG)-1) && - PyErr_Occurred()) { - return -1; - } - } - break; + break; + } + case T_ULONGLONG:{ + unsigned PY_LONG_LONG value; + /* ??? PyLong_AsLongLong accepts an int, but PyLong_AsUnsignedLongLong + doesn't ??? */ + if (PyLong_Check(v)) + *(unsigned PY_LONG_LONG*)addr = value = PyLong_AsUnsignedLongLong(v); + else + *(unsigned PY_LONG_LONG*)addr = value = PyInt_AsLong(v); + if ((value == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred()) + return -1; + break; + } #endif /* HAVE_LONG_LONG */ default: PyErr_Format(PyExc_SystemError, |