Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 96d743e

Browse files
committed
Patch #1115086: support PY_LONGLONG in structmember.
1 parent 7e78ade commit 96d743e

3 files changed

Lines changed: 38 additions & 0 deletions

File tree

Include/structmember.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ typedef struct PyMemberDef {
6565
#define T_OBJECT_EX 16 /* Like T_OBJECT, but raises AttributeError
6666
when the value is NULL, instead of
6767
converting to None. */
68+
#ifdef HAVE_LONG_LONG
69+
#define T_LONGLONG 17
70+
#define T_ULONGLONG 18
71+
#endif /* HAVE_LONG_LONG */
6872

6973
/* Flags */
7074
#define READONLY 1

Misc/NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ What's New in Python 2.5 alpha 1?
1010
Core and builtins
1111
-----------------
1212

13+
- Patch #1115086: Support PY_LONGLONG in structmember.
14+
1315
- Bug #1155938: new style classes did not check that __init__() was
1416
returning None.
1517

Python/structmember.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,14 @@ PyMember_GetOne(char *addr, PyMemberDef *l)
118118
PyErr_SetString(PyExc_AttributeError, l->name);
119119
Py_XINCREF(v);
120120
break;
121+
#ifdef HAVE_LONG_LONG
122+
case T_LONGLONG:
123+
v = PyLong_FromLongLong(*(PY_LONG_LONG *)addr);
124+
break;
125+
case T_ULONGLONG:
126+
v = PyLong_FromUnsignedLongLong(*(unsigned PY_LONG_LONG *)addr);
127+
break;
128+
#endif /* HAVE_LONG_LONG */
121129
default:
122130
PyErr_SetString(PyExc_SystemError, "bad memberdescr type");
123131
v = NULL;
@@ -246,6 +254,30 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v)
246254
return -1;
247255
}
248256
break;
257+
#ifdef HAVE_LONG_LONG
258+
case T_LONGLONG:
259+
if (!PyLong_Check(v)) {
260+
PyErr_BadArgument();
261+
return -1;
262+
} else {
263+
*(PY_LONG_LONG*)addr = PyLong_AsLongLong(v);
264+
if ((*addr == -1) && PyErr_Occurred()) {
265+
return -1;
266+
}
267+
}
268+
break;
269+
case T_ULONGLONG:
270+
if (!PyLong_Check(v)) {
271+
PyErr_BadArgument();
272+
return -1;
273+
} else {
274+
*(unsigned PY_LONG_LONG*)addr = PyLong_AsUnsignedLongLong(v);
275+
if ((*addr == -1) && PyErr_Occurred()) {
276+
return -1;
277+
}
278+
}
279+
break;
280+
#endif /* HAVE_LONG_LONG */
249281
default:
250282
PyErr_Format(PyExc_SystemError,
251283
"bad memberdescr type for %s", l->name);

0 commit comments

Comments
 (0)