Mercurial > cpython-lru_cache-weakref
annotate Python/structmember.c @ 40997:be68da561dcd 2.5
Fix constantification of None.
| author | Raymond Hettinger <python@rcn.com> |
|---|---|
| date | Fri, 02 Mar 2007 19:19:05 +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 } |
