mirror of
https://github.com/python/cpython.git
synced 2025-11-14 07:49:28 +00:00
PEP 3123: Provide forward compatibility with Python 3.0, while keeping
backwards compatibility. Add Py_Refcnt, Py_Type, Py_Size, and PyVarObject_HEAD_INIT.
This commit is contained in:
parent
b1994b4a5d
commit
6819210b9e
129 changed files with 1090 additions and 1250 deletions
|
|
@ -13,17 +13,17 @@ static char unnamed_fields_key[] = "n_unnamed_fields";
|
|||
They are only allowed for indices < n_visible_fields. */
|
||||
char *PyStructSequence_UnnamedField = "unnamed field";
|
||||
|
||||
#define VISIBLE_SIZE(op) ((op)->ob_size)
|
||||
#define VISIBLE_SIZE(op) Py_Size(op)
|
||||
#define VISIBLE_SIZE_TP(tp) PyInt_AsLong( \
|
||||
PyDict_GetItemString((tp)->tp_dict, visible_length_key))
|
||||
|
||||
#define REAL_SIZE_TP(tp) PyInt_AsLong( \
|
||||
PyDict_GetItemString((tp)->tp_dict, real_length_key))
|
||||
#define REAL_SIZE(op) REAL_SIZE_TP((op)->ob_type)
|
||||
#define REAL_SIZE(op) REAL_SIZE_TP(Py_Type(op))
|
||||
|
||||
#define UNNAMED_FIELDS_TP(tp) PyInt_AsLong( \
|
||||
PyDict_GetItemString((tp)->tp_dict, unnamed_fields_key))
|
||||
#define UNNAMED_FIELDS(op) UNNAMED_FIELDS_TP((op)->ob_type)
|
||||
#define UNNAMED_FIELDS(op) UNNAMED_FIELDS_TP(Py_Type(op))
|
||||
|
||||
|
||||
PyObject *
|
||||
|
|
@ -32,7 +32,7 @@ PyStructSequence_New(PyTypeObject *type)
|
|||
PyStructSequence *obj;
|
||||
|
||||
obj = PyObject_New(PyStructSequence, type);
|
||||
obj->ob_size = VISIBLE_SIZE_TP(type);
|
||||
Py_Size(obj) = VISIBLE_SIZE_TP(type);
|
||||
|
||||
return (PyObject*) obj;
|
||||
}
|
||||
|
|
@ -274,12 +274,12 @@ structseq_reduce(PyStructSequence* self)
|
|||
}
|
||||
|
||||
for (; i < n_fields; i++) {
|
||||
char *n = self->ob_type->tp_members[i-n_unnamed_fields].name;
|
||||
char *n = Py_Type(self)->tp_members[i-n_unnamed_fields].name;
|
||||
PyDict_SetItemString(dict, n,
|
||||
self->ob_item[i]);
|
||||
}
|
||||
|
||||
result = Py_BuildValue("(O(OO))", self->ob_type, tup, dict);
|
||||
result = Py_BuildValue("(O(OO))", Py_Type(self), tup, dict);
|
||||
|
||||
Py_DECREF(tup);
|
||||
Py_DECREF(dict);
|
||||
|
|
@ -305,8 +305,7 @@ static PyMethodDef structseq_methods[] = {
|
|||
};
|
||||
|
||||
static PyTypeObject _struct_sequence_template = {
|
||||
PyObject_HEAD_INIT(&PyType_Type)
|
||||
0, /* ob_size */
|
||||
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
||||
NULL, /* tp_name */
|
||||
0, /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue