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)
|
||||
|
||||
PyAPI_FUNC(PyObject *) PyRange_New(long, long, long, int);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,51 +9,6 @@ typedef struct {
|
|||
long len;
|
||||
} 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
|
||||
* required. Return a value < 0 if & only if the true value is too
|
||||
* large to fit in a signed long.
|
||||
|
|
Loading…
Reference in New Issue