Mercurial > cpython-lru_cache-weakref
annotate Python/structmember.c @ 41636:be1e708d5d3d 2.5
Fix NonRecursiveMutex on x64. The signature of the faux-InterlockedCompareExchange function was wrong: It works with LONG and not PVOID objects, and it needs to have the target marked as volatile. Further, it is not needed at all for x64 targets, since that platform always has the real McCoy.
| author | Kristján Valur Jónsson <kristjan@ccpgames.com> |
|---|---|
| date | Mon, 07 May 2007 18:28:12 +0000 |
| parents | 0e83f8c5d70a |
| children | 7c9225da5f61 |
| rev | line source |
|---|---|
| 145 | 1 |
| 86 | 2 /* Map C struct members to Python object attributes */ |
| 3 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
4 #include "Python.h" |
| 86 | 5 |
| 6 #include "structmember.h" | |
| 7 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
8 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
9 listmembers(struct memberlist *mlist) |
|
398
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
10 { |
|
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
11 int i, n; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
12 PyObject *v; |
|
398
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
13 for (n = 0; mlist[n].name != NULL; n++) |
|
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
14 ; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
15 v = PyList_New(n); |
|
398
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
16 if (v != NULL) { |
|
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
17 for (i = 0; i < n; i++) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
18 PyList_SetItem(v, i, |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
19 PyString_FromString(mlist[i].name)); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
20 if (PyErr_Occurred()) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
21 Py_DECREF(v); |
|
398
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
22 v = NULL; |
|
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
23 } |
|
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
24 else { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
25 PyList_Sort(v); |
|
398
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
26 } |
|
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
27 } |
|
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
28 return v; |
|
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
29 } |
|
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
30 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
31 PyObject * |
|
36114
e9a10f74cf88
const poisoning, spreading to fix new const warnings
Tim Peters <tim.peters@gmail.com>
parents:
34677
diff
changeset
|
32 PyMember_Get(const char *addr, struct memberlist *mlist, const char *name) |
| 86 | 33 { |
| 34 struct memberlist *l; | |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
35 |
|
398
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
36 if (strcmp(name, "__members__") == 0) |
|
0ac1357cd898
Added __members__ secret attribute
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
37 return listmembers(mlist); |
| 86 | 38 for (l = mlist; l->name != NULL; l++) { |
| 39 if (strcmp(l->name, name) == 0) { | |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
40 PyMemberDef copy; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
41 copy.name = l->name; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
42 copy.type = l->type; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
43 copy.offset = l->offset; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
44 copy.flags = l->flags; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
45 copy.doc = NULL; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
46 return PyMember_GetOne(addr, ©); |
| 86 | 47 } |
| 48 } | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
49 PyErr_SetString(PyExc_AttributeError, name); |
| 86 | 50 return NULL; |
| 51 } | |
| 52 | |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
53 PyObject * |
|
36114
e9a10f74cf88
const poisoning, spreading to fix new const warnings
Tim Peters <tim.peters@gmail.com>
parents:
34677
diff
changeset
|
54 PyMember_GetOne(const char *addr, PyMemberDef *l) |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
55 { |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
56 PyObject *v; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
57 if ((l->flags & READ_RESTRICTED) && |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
58 PyEval_GetRestricted()) { |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
59 PyErr_SetString(PyExc_RuntimeError, "restricted attribute"); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
60 return NULL; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
61 } |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
62 addr += l->offset; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
63 switch (l->type) { |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
64 case T_BYTE: |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
65 v = PyInt_FromLong(*(char*)addr); |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
66 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
67 case T_UBYTE: |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
68 v = PyLong_FromUnsignedLong(*(unsigned char*)addr); |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
69 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
70 case T_SHORT: |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
71 v = PyInt_FromLong(*(short*)addr); |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
72 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
73 case T_USHORT: |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
74 v = PyLong_FromUnsignedLong(*(unsigned short*)addr); |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
75 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
76 case T_INT: |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
77 v = PyInt_FromLong(*(int*)addr); |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
78 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
79 case T_UINT: |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
80 v = PyLong_FromUnsignedLong(*(unsigned int*)addr); |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
81 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
82 case T_LONG: |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
83 v = PyInt_FromLong(*(long*)addr); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
84 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
85 case T_ULONG: |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
86 v = PyLong_FromUnsignedLong(*(unsigned long*)addr); |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
87 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
88 case T_FLOAT: |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
89 v = PyFloat_FromDouble((double)*(float*)addr); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
90 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
91 case T_DOUBLE: |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
92 v = PyFloat_FromDouble(*(double*)addr); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
93 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
94 case T_STRING: |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
95 if (*(char**)addr == NULL) { |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
96 Py_INCREF(Py_None); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
97 v = Py_None; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
98 } |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
99 else |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
100 v = PyString_FromString(*(char**)addr); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
101 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
102 case T_STRING_INPLACE: |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
103 v = PyString_FromString((char*)addr); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
104 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
105 case T_CHAR: |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
106 v = PyString_FromStringAndSize((char*)addr, 1); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
107 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
108 case T_OBJECT: |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
109 v = *(PyObject **)addr; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
110 if (v == NULL) |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
111 v = Py_None; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
112 Py_INCREF(v); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
113 break; |
|
21187
ef6f692c76e2
Fix SF bug #486144: Uninitialized __slot__ vrbl is None.
Guido van Rossum <guido@python.org>
parents:
20456
diff
changeset
|
114 case T_OBJECT_EX: |
|
ef6f692c76e2
Fix SF bug #486144: Uninitialized __slot__ vrbl is None.
Guido van Rossum <guido@python.org>
parents:
20456
diff
changeset
|
115 v = *(PyObject **)addr; |
|
ef6f692c76e2
Fix SF bug #486144: Uninitialized __slot__ vrbl is None.
Guido van Rossum <guido@python.org>
parents:
20456
diff
changeset
|
116 if (v == NULL) |
|
ef6f692c76e2
Fix SF bug #486144: Uninitialized __slot__ vrbl is None.
Guido van Rossum <guido@python.org>
parents:
20456
diff
changeset
|
117 PyErr_SetString(PyExc_AttributeError, l->name); |
|
ef6f692c76e2
Fix SF bug #486144: Uninitialized __slot__ vrbl is None.
Guido van Rossum <guido@python.org>
parents:
20456
diff
changeset
|
118 Py_XINCREF(v); |
|
ef6f692c76e2
Fix SF bug #486144: Uninitialized __slot__ vrbl is None.
Guido van Rossum <guido@python.org>
parents:
20456
diff
changeset
|
119 break; |
|
34677
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
120 #ifdef HAVE_LONG_LONG |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
121 case T_LONGLONG: |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
122 v = PyLong_FromLongLong(*(PY_LONG_LONG *)addr); |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
123 break; |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
124 case T_ULONGLONG: |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
125 v = PyLong_FromUnsignedLongLong(*(unsigned PY_LONG_LONG *)addr); |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
126 break; |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
127 #endif /* HAVE_LONG_LONG */ |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
128 default: |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
129 PyErr_SetString(PyExc_SystemError, "bad memberdescr type"); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
130 v = NULL; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
131 } |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
132 return v; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
133 } |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
134 |
| 86 | 135 int |
|
36114
e9a10f74cf88
const poisoning, spreading to fix new const warnings
Tim Peters <tim.peters@gmail.com>
parents:
34677
diff
changeset
|
136 PyMember_Set(char *addr, struct memberlist *mlist, const char *name, PyObject *v) |
| 86 | 137 { |
| 138 struct memberlist *l; | |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
139 |
| 86 | 140 for (l = mlist; l->name != NULL; l++) { |
| 141 if (strcmp(l->name, name) == 0) { | |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
142 PyMemberDef copy; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
143 copy.name = l->name; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
144 copy.type = l->type; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
145 copy.offset = l->offset; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
146 copy.flags = l->flags; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
147 copy.doc = NULL; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
148 return PyMember_SetOne(addr, ©, v); |
| 86 | 149 } |
| 150 } | |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
151 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
152 PyErr_SetString(PyExc_AttributeError, name); |
| 95 | 153 return -1; |
| 86 | 154 } |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
155 |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
156 int |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
157 PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v) |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
158 { |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
159 PyObject *oldv; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
160 |
|
30979
86fdf8fe7f17
Getting rid of all the code inside #ifdef macintosh too.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21187
diff
changeset
|
161 if ((l->flags & READONLY) || l->type == T_STRING) |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
162 { |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
163 PyErr_SetString(PyExc_TypeError, "readonly attribute"); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
164 return -1; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
165 } |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
166 if ((l->flags & WRITE_RESTRICTED) && PyEval_GetRestricted()) { |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
167 PyErr_SetString(PyExc_RuntimeError, "restricted attribute"); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
168 return -1; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
169 } |
|
21187
ef6f692c76e2
Fix SF bug #486144: Uninitialized __slot__ vrbl is None.
Guido van Rossum <guido@python.org>
parents:
20456
diff
changeset
|
170 if (v == NULL && l->type != T_OBJECT_EX && l->type != T_OBJECT) { |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
171 PyErr_SetString(PyExc_TypeError, |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
172 "can't delete numeric/char attribute"); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
173 return -1; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
174 } |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
175 addr += l->offset; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
176 switch (l->type) { |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
177 case T_BYTE:{ |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
178 long long_val; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
179 long_val = PyInt_AsLong(v); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
180 if ((long_val == -1) && PyErr_Occurred()) |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
181 return -1; |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
182 *(char*)addr = (char)long_val; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
183 break; |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
184 } |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
185 case T_UBYTE:{ |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
186 long long_val; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
187 long_val = PyInt_AsLong(v); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
188 if ((long_val == -1) && PyErr_Occurred()) |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
189 return -1; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
190 *(unsigned char*)addr = (unsigned char)long_val; |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
191 break; |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
192 } |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
193 case T_SHORT:{ |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
194 long long_val; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
195 long_val = PyInt_AsLong(v); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
196 if ((long_val == -1) && PyErr_Occurred()) |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
197 return -1; |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
198 *(short*)addr = (short)long_val; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
199 break; |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
200 } |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
201 case T_USHORT:{ |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
202 long long_val; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
203 long_val = PyInt_AsLong(v); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
204 if ((long_val == -1) && PyErr_Occurred()) |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
205 return -1; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
206 *(unsigned short*)addr = (unsigned short)long_val; |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
207 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
208 } |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
209 case T_INT:{ |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
210 long long_val; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
211 long_val = PyInt_AsLong(v); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
212 if ((long_val == -1) && PyErr_Occurred()) |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
213 return -1; |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
214 *(int *)addr = (int)long_val; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
215 break; |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
216 } |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
217 case T_UINT:{ |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
218 unsigned long ulong_val; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
219 ulong_val = PyLong_AsUnsignedLong(v); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
220 if ((ulong_val == (unsigned int)-1) && PyErr_Occurred()) { |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
221 /* XXX: For compatibility, accept negative int values |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
222 as well. */ |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
223 PyErr_Clear(); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
224 ulong_val = PyLong_AsLong(v); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
225 if ((ulong_val == (unsigned int)-1) && PyErr_Occurred()) |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
226 return -1; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
227 } |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
228 *(unsigned int *)addr = (unsigned int)ulong_val; |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
229 break; |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
230 } |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
231 case T_LONG:{ |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
232 *(long*)addr = PyLong_AsLong(v); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
233 if ((*(long*)addr == -1) && PyErr_Occurred()) |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
234 return -1; |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
235 break; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
236 } |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
237 case T_ULONG:{ |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
238 *(unsigned long*)addr = PyLong_AsUnsignedLong(v); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
239 if ((*(unsigned long*)addr == (unsigned long)-1) |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
240 && PyErr_Occurred()) { |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
241 /* XXX: For compatibility, accept negative int values |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
242 as well. */ |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
243 PyErr_Clear(); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
244 *(unsigned long*)addr = PyLong_AsLong(v); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
245 if ((*(unsigned long*)addr == (unsigned int)-1) && PyErr_Occurred()) |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
246 return -1; |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
247 } |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
248 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
249 } |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
250 case T_FLOAT:{ |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
251 double double_val; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
252 double_val = PyFloat_AsDouble(v); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
253 if ((double_val == -1) && PyErr_Occurred()) |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
254 return -1; |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
255 *(float*)addr = (float)double_val; |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
256 break; |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
257 } |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
258 case T_DOUBLE: |
|
40177
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
259 *(double*)addr = PyFloat_AsDouble(v); |
|
0e83f8c5d70a
[Backport of r52452]
Martin v. Löwis <martin@v.loewis.de>
parents:
38024
diff
changeset
|
260 if ((*(double*)addr == -1) && PyErr_Occurred()) |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
261 return -1; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
262 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
263 case T_OBJECT: |
|
21187
ef6f692c76e2
Fix SF bug #486144: Uninitialized __slot__ vrbl is None.
Guido van Rossum <guido@python.org>
parents:
20456
diff
changeset
|
264 case T_OBJECT_EX: |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
265 Py_XINCREF(v); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
266 oldv = *(PyObject **)addr; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
267 *(PyObject **)addr = v; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
268 Py_XDECREF(oldv); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
269 break; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
270 case T_CHAR: |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
271 if (PyString_Check(v) && PyString_Size(v) == 1) { |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
272 *(char*)addr = PyString_AsString(v)[0]; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
273 } |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
274 else { |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
275 PyErr_BadArgument(); |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
276 return -1; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
277 } |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
278 break; |
|
34677
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
279 #ifdef HAVE_LONG_LONG |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
280 case T_LONGLONG: |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
281 if (!PyLong_Check(v)) { |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
282 PyErr_BadArgument(); |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
283 return -1; |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
284 } else { |
|
38024
8bc4a7e5fef8
Fix a warning on ppc (debian)
Neal Norwitz <nnorwitz@gmail.com>
parents:
36114
diff
changeset
|
285 PY_LONG_LONG value; |
|
8bc4a7e5fef8
Fix a warning on ppc (debian)
Neal Norwitz <nnorwitz@gmail.com>
parents:
36114
diff
changeset
|
286 *(PY_LONG_LONG*)addr = value = PyLong_AsLongLong(v); |
|
8bc4a7e5fef8
Fix a warning on ppc (debian)
Neal Norwitz <nnorwitz@gmail.com>
parents:
36114
diff
changeset
|
287 if ((value == -1) && PyErr_Occurred()) { |
|
34677
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
288 return -1; |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
289 } |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
290 } |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
291 break; |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
292 case T_ULONGLONG: |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
293 if (!PyLong_Check(v)) { |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
294 PyErr_BadArgument(); |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
295 return -1; |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
296 } else { |
|
38024
8bc4a7e5fef8
Fix a warning on ppc (debian)
Neal Norwitz <nnorwitz@gmail.com>
parents:
36114
diff
changeset
|
297 unsigned PY_LONG_LONG value; |
|
8bc4a7e5fef8
Fix a warning on ppc (debian)
Neal Norwitz <nnorwitz@gmail.com>
parents:
36114
diff
changeset
|
298 *(unsigned PY_LONG_LONG*)addr = value = PyLong_AsUnsignedLongLong(v); |
|
8bc4a7e5fef8
Fix a warning on ppc (debian)
Neal Norwitz <nnorwitz@gmail.com>
parents:
36114
diff
changeset
|
299 if ((value == (unsigned PY_LONG_LONG)-1) && |
|
8bc4a7e5fef8
Fix a warning on ppc (debian)
Neal Norwitz <nnorwitz@gmail.com>
parents:
36114
diff
changeset
|
300 PyErr_Occurred()) { |
|
34677
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
301 return -1; |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
302 } |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
303 } |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
304 break; |
|
e9ffad6d8822
Patch #1115086: support PY_LONGLONG in structmember.
Martin v. Löwis <martin@v.loewis.de>
parents:
30979
diff
changeset
|
305 #endif /* HAVE_LONG_LONG */ |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
306 default: |
|
20456
bff6c2d76f33
Put descr name in "bad memberdescr type" error message.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20012
diff
changeset
|
307 PyErr_Format(PyExc_SystemError, |
|
bff6c2d76f33
Put descr name in "bad memberdescr type" error message.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20012
diff
changeset
|
308 "bad memberdescr type for %s", l->name); |
|
20012
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
309 return -1; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
310 } |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
311 return 0; |
|
3faabf54b8b8
Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents:
19942
diff
changeset
|
312 } |
