NULL on error.
*/
static PyObject *
-validate_step(PyObject *step)
-{
+validate_step(PyObject *step) {
/* No step specified, use a step of 1. */
if (!step)
return PyLong_FromLong(1);
range(0, 5, -1)
*/
static PyObject *
-range_new(PyTypeObject *type, PyObject *args, PyObject *kw)
-{
+range_new(PyTypeObject *type, PyObject *args, PyObject *kw) {
rangeobject *obj = NULL;
PyObject *start = NULL, *stop = NULL, *step = NULL;
Returns an iterator that generates the numbers in the range on demand.");
static void
-range_dealloc(rangeobject *r)
-{
+range_dealloc(rangeobject *r) {
Py_DECREF(r->start);
Py_DECREF(r->stop);
Py_DECREF(r->step);
* PyLong_Check(). Return NULL when there is an error.
*/
static PyObject*
-range_length_obj(rangeobject *r)
-{
+range_length_obj(rangeobject *r) {
/* -------------------------------------------------------------
Algorithm is equal to that of get_len_of_range(), but it operates
on PyObjects (which are assumed to be PyLong objects).
}
static Py_ssize_t
-range_length(rangeobject *r)
-{
+range_length(rangeobject *r) {
PyObject *len = range_length_obj(r);
Py_ssize_t result = -1;
if (len) {
/* range(...)[x] is necessary for: seq[:] = range(...) */
static PyObject *
-range_item(rangeobject *r, Py_ssize_t i)
-{
+range_item(rangeobject *r, Py_ssize_t i) {
Py_ssize_t len = range_length(r);
PyObject *rem, *incr, *result;
}
static PyObject *
-range_repr(rangeobject *r)
-{
+range_repr(rangeobject *r) {
Py_ssize_t istep;
/* Check for special case values for printing. We don't always
/* Pickling support */
static PyObject *
-range_reduce(rangeobject *r, PyObject *args)
-{
+range_reduce(rangeobject *r, PyObject *args) {
return Py_BuildValue("(O(OOO))", Py_TYPE(r),
r->start, r->stop, r->step);
}
/* Assumes (PyLong_CheckExact(ob) || PyBool_Check(ob)) */
static int
-range_contains_long(rangeobject *r, PyObject *ob)
-{
+range_contains_long(rangeobject *r, PyObject *ob) {
int cmp1, cmp2, cmp3;
PyObject *tmp1 = NULL;
PyObject *tmp2 = NULL;
}
static PyObject *
-range_count(rangeobject *r, PyObject *ob)
-{
+range_count(rangeobject *r, PyObject *ob) {
if (PyLong_CheckExact(ob) || PyBool_Check(ob)) {
int result = range_contains_long(r, ob);
if (result == -1)
}
static PyObject *
-range_index(rangeobject *r, PyObject *ob)
-{
- PyObject *idx, *tmp;
+range_index(rangeobject *r, PyObject *ob) {
int contains;
- PyObject *format_tuple, *err_string;
- static PyObject *err_format = NULL;
if (!PyLong_CheckExact(ob) && !PyBool_Check(ob)) {
Py_ssize_t index;
if (contains == -1)
return NULL;
- if (!contains)
- goto value_error;
-
- tmp = PyNumber_Subtract(ob, r->start);
- if (tmp == NULL)
- return NULL;
-
- /* idx = (ob - r.start) // r.step */
- idx = PyNumber_FloorDivide(tmp, r->step);
- Py_DECREF(tmp);
- return idx;
-
-value_error:
-
- /* object is not in the range */
- if (err_format == NULL) {
- err_format = PyUnicode_FromString("%r is not in range");
- if (err_format == NULL)
+ if (contains) {
+ PyObject *idx, *tmp = PyNumber_Subtract(ob, r->start);
+ if (tmp == NULL)
return NULL;
+ /* idx = (ob - r.start) // r.step */
+ idx = PyNumber_FloorDivide(tmp, r->step);
+ Py_DECREF(tmp);
+ return idx;
}
- format_tuple = PyTuple_Pack(1, ob);
- if (format_tuple == NULL)
- return NULL;
- err_string = PyUnicode_Format(err_format, format_tuple);
- Py_DECREF(format_tuple);
- if (err_string == NULL)
- return NULL;
- PyErr_SetObject(PyExc_ValueError, err_string);
- Py_DECREF(err_string);
+
+ /* object is not in the range */
+ PyErr_Format(PyExc_ValueError, "%R is not in range", ob);
return NULL;
}
} rangeiterobject;
static PyObject *
-rangeiter_next(rangeiterobject *r)
-{
+rangeiter_next(rangeiterobject *r) {
if (r->index < r->len)
/* cast to unsigned to avoid possible signed overflow
in intermediate calculations. */
}
static PyObject *
-rangeiter_len(rangeiterobject *r)
-{
+rangeiter_len(rangeiterobject *r) {
return PyLong_FromLong(r->len - r->index);
}
} longrangeiterobject;
static PyObject *
-longrangeiter_len(longrangeiterobject *r, PyObject *no_args)
-{
+longrangeiter_len(longrangeiterobject *r, PyObject *no_args) {
return PyNumber_Subtract(r->len, r->index);
}
* required. The result always fits in an unsigned long.
*/
static unsigned long
-get_len_of_range(long lo, long hi, long step)
-{
+get_len_of_range(long lo, long hi, long step) {
/* -------------------------------------------------------------
If step > 0 and lo >= hi, or step < 0 and lo <= hi, the range is empty.
Else for step > 0, if n values are in the range, the last one is
is not representable as a C long, OverflowError is raised. */
static PyObject *
-int_range_iter(long start, long stop, long step)
-{
+int_range_iter(long start, long stop, long step) {
rangeiterobject *it = PyObject_New(rangeiterobject, &PyRangeIter_Type);
unsigned long ulen;
if (it == NULL)
}
static PyObject *
-rangeiter_new(PyTypeObject *type, PyObject *args, PyObject *kw)
-{
+rangeiter_new(PyTypeObject *type, PyObject *args, PyObject *kw) {
long start, stop, step;
if (!_PyArg_NoKeywords("rangeiter()", kw))
};
static void
-longrangeiter_dealloc(longrangeiterobject *r)
-{
+longrangeiter_dealloc(longrangeiterobject *r) {
Py_XDECREF(r->index);
Py_XDECREF(r->start);
Py_XDECREF(r->step);
}
static PyObject *
-longrangeiter_next(longrangeiterobject *r)
-{
+longrangeiter_next(longrangeiterobject *r) {
PyObject *one, *product, *new_index, *result;
if (PyObject_RichCompareBool(r->index, r->len, Py_LT) != 1)
return NULL;
};
static PyObject *
-range_iter(PyObject *seq)
-{
+range_iter(PyObject *seq) {
rangeobject *r = (rangeobject *)seq;
longrangeiterobject *it;
long lstart, lstop, lstep;
}
static PyObject *
-range_reverse(PyObject *seq)
-{
+range_reverse(PyObject *seq) {
rangeobject *range = (rangeobject*) seq;
longrangeiterobject *it;
PyObject *one, *sum, *diff, *len = NULL, *product;