mirror of https://github.com/python/cpython
Remove PyRange_New().
This commit is contained in:
parent
f9245578c9
commit
665174834a
|
@ -22,8 +22,6 @@ PyAPI_DATA(PyTypeObject) PyRange_Type;
|
||||||
|
|
||||||
#define PyRange_Check(op) ((op)->ob_type == &PyRange_Type)
|
#define PyRange_Check(op) ((op)->ob_type == &PyRange_Type)
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PyRange_New(long, long, long, int);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -32,6 +32,8 @@ Build
|
||||||
C API
|
C API
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Removed PyRange_New().
|
||||||
|
|
||||||
|
|
||||||
Tests
|
Tests
|
||||||
-----
|
-----
|
||||||
|
|
|
@ -9,51 +9,6 @@ typedef struct {
|
||||||
long len;
|
long len;
|
||||||
} rangeobject;
|
} rangeobject;
|
||||||
|
|
||||||
/* XXX PyRange_New should be deprecated. It's not documented. It's not
|
|
||||||
* used in the core. Its error-checking is akin to Swiss cheese: accepts
|
|
||||||
* step == 0; accepts len < 0; ignores that (len - 1) * step may overflow;
|
|
||||||
* raises a baffling "integer addition" exception if it thinks the last
|
|
||||||
* item is "too big"; and doesn't compute whether "last item is too big"
|
|
||||||
* correctly even if the multiplication doesn't overflow.
|
|
||||||
*/
|
|
||||||
PyObject *
|
|
||||||
PyRange_New(long start, long len, long step, int reps)
|
|
||||||
{
|
|
||||||
rangeobject *obj;
|
|
||||||
|
|
||||||
if (reps != 1) {
|
|
||||||
PyErr_SetString(PyExc_ValueError,
|
|
||||||
"PyRange_New's 'repetitions' argument must be 1");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
obj = PyObject_New(rangeobject, &PyRange_Type);
|
|
||||||
if (obj == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (len == 0) {
|
|
||||||
start = 0;
|
|
||||||
len = 0;
|
|
||||||
step = 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
long last = start + (len - 1) * step;
|
|
||||||
if ((step > 0) ?
|
|
||||||
(last > (PyInt_GetMax() - step)) :
|
|
||||||
(last < (-1 - PyInt_GetMax() - step))) {
|
|
||||||
PyErr_SetString(PyExc_OverflowError,
|
|
||||||
"integer addition");
|
|
||||||
Py_DECREF(obj);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
obj->start = start;
|
|
||||||
obj->len = len;
|
|
||||||
obj->step = step;
|
|
||||||
|
|
||||||
return (PyObject *) obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return number of items in range/xrange (lo, hi, step). step > 0
|
/* Return number of items in range/xrange (lo, hi, step). step > 0
|
||||||
* required. Return a value < 0 if & only if the true value is too
|
* required. Return a value < 0 if & only if the true value is too
|
||||||
* large to fit in a signed long.
|
* large to fit in a signed long.
|
||||||
|
|
Loading…
Reference in New Issue