mirror of
https://github.com/python/cpython.git
synced 2025-07-29 14:15:07 +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
|
@ -56,8 +56,8 @@ fill_free_list(void)
|
|||
p = &((PyIntBlock *)p)->objects[0];
|
||||
q = p + N_INTOBJECTS;
|
||||
while (--q > p)
|
||||
q->ob_type = (struct _typeobject *)(q-1);
|
||||
q->ob_type = NULL;
|
||||
Py_Type(q) = (struct _typeobject *)(q-1);
|
||||
Py_Type(q) = NULL;
|
||||
return p + N_INTOBJECTS - 1;
|
||||
}
|
||||
|
||||
|
@ -102,7 +102,7 @@ PyInt_FromLong(long ival)
|
|||
}
|
||||
/* Inline PyObject_New */
|
||||
v = free_list;
|
||||
free_list = (PyIntObject *)v->ob_type;
|
||||
free_list = (PyIntObject *)Py_Type(v);
|
||||
PyObject_INIT(v, &PyInt_Type);
|
||||
v->ob_ival = ival;
|
||||
return (PyObject *) v;
|
||||
|
@ -128,17 +128,17 @@ static void
|
|||
int_dealloc(PyIntObject *v)
|
||||
{
|
||||
if (PyInt_CheckExact(v)) {
|
||||
v->ob_type = (struct _typeobject *)free_list;
|
||||
Py_Type(v) = (struct _typeobject *)free_list;
|
||||
free_list = v;
|
||||
}
|
||||
else
|
||||
v->ob_type->tp_free((PyObject *)v);
|
||||
Py_Type(v)->tp_free((PyObject *)v);
|
||||
}
|
||||
|
||||
static void
|
||||
int_free(PyIntObject *v)
|
||||
{
|
||||
v->ob_type = (struct _typeobject *)free_list;
|
||||
Py_Type(v) = (struct _typeobject *)free_list;
|
||||
free_list = v;
|
||||
}
|
||||
|
||||
|
@ -152,7 +152,7 @@ PyInt_AsLong(register PyObject *op)
|
|||
if (op && PyInt_Check(op))
|
||||
return PyInt_AS_LONG((PyIntObject*) op);
|
||||
|
||||
if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
|
||||
if (op == NULL || (nb = Py_Type(op)->tp_as_number) == NULL ||
|
||||
nb->nb_int == NULL) {
|
||||
PyErr_SetString(PyExc_TypeError, "an integer is required");
|
||||
return -1;
|
||||
|
@ -207,7 +207,7 @@ PyInt_AsSsize_t(register PyObject *op)
|
|||
return PyInt_AsLong(op);
|
||||
#else
|
||||
|
||||
if ((nb = op->ob_type->tp_as_number) == NULL ||
|
||||
if ((nb = Py_Type(op)->tp_as_number) == NULL ||
|
||||
(nb->nb_int == NULL && nb->nb_long == 0)) {
|
||||
PyErr_SetString(PyExc_TypeError, "an integer is required");
|
||||
return -1;
|
||||
|
@ -256,7 +256,7 @@ PyInt_AsUnsignedLongMask(register PyObject *op)
|
|||
if (op && PyLong_Check(op))
|
||||
return PyLong_AsUnsignedLongMask(op);
|
||||
|
||||
if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
|
||||
if (op == NULL || (nb = Py_Type(op)->tp_as_number) == NULL ||
|
||||
nb->nb_int == NULL) {
|
||||
PyErr_SetString(PyExc_TypeError, "an integer is required");
|
||||
return (unsigned long)-1;
|
||||
|
@ -301,7 +301,7 @@ PyInt_AsUnsignedLongLongMask(register PyObject *op)
|
|||
if (op && PyLong_Check(op))
|
||||
return PyLong_AsUnsignedLongLongMask(op);
|
||||
|
||||
if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
|
||||
if (op == NULL || (nb = Py_Type(op)->tp_as_number) == NULL ||
|
||||
nb->nb_int == NULL) {
|
||||
PyErr_SetString(PyExc_TypeError, "an integer is required");
|
||||
return (unsigned PY_LONG_LONG)-1;
|
||||
|
@ -1116,8 +1116,7 @@ static PyNumberMethods int_as_number = {
|
|||
};
|
||||
|
||||
PyTypeObject PyInt_Type = {
|
||||
PyObject_HEAD_INIT(&PyType_Type)
|
||||
0,
|
||||
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
||||
"int",
|
||||
sizeof(PyIntObject),
|
||||
0,
|
||||
|
@ -1170,7 +1169,7 @@ _PyInt_Init(void)
|
|||
return 0;
|
||||
/* PyObject_New is inlined */
|
||||
v = free_list;
|
||||
free_list = (PyIntObject *)v->ob_type;
|
||||
free_list = (PyIntObject *)Py_Type(v);
|
||||
PyObject_INIT(v, &PyInt_Type);
|
||||
v->ob_ival = ival;
|
||||
small_ints[ival + NSMALLNEGINTS] = v;
|
||||
|
@ -1223,7 +1222,7 @@ PyInt_Fini(void)
|
|||
ctr++, p++) {
|
||||
if (!PyInt_CheckExact(p) ||
|
||||
p->ob_refcnt == 0) {
|
||||
p->ob_type = (struct _typeobject *)
|
||||
Py_Type(p) = (struct _typeobject *)
|
||||
free_list;
|
||||
free_list = p;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue