* rangeobject.{c,h}, bltinmodule.c: removed non-essential ops from range · pythoncapi/cpython@2586bf0 · GitHub
Skip to content

Commit 2586bf0

Browse files
committed
* rangeobject.{c,h}, bltinmodule.c: removed non-essential ops from range
object.
1 parent 0667626 commit 2586bf0

3 files changed

Lines changed: 42 additions & 121 deletions

File tree

Include/rangeobject.h

Lines changed: 1 addition & 1 deletion

Objects/rangeobject.c

Lines changed: 28 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,18 @@ typedef struct {
3131
long start;
3232
long step;
3333
long len;
34-
int reps;
3534
} rangeobject;
3635

3736

3837
object *
39-
newrangeobject(start, len, step, reps)
38+
newrangeobject(start, len, step)
4039
long start, len, step;
41-
int reps;
4240
{
4341
rangeobject *obj = (rangeobject *) newobject(&Rangetype);
4442

4543
obj->start = start;
4644
obj->len = len;
4745
obj->step = step;
48-
obj->reps = reps;
4946

5047
return (object *) obj;
5148
}
@@ -62,77 +59,31 @@ range_item(r, i)
6259
rangeobject *r;
6360
int i;
6461
{
65-
if (i < 0 || i >= r->len * r->reps) {
62+
if (i < 0 || i >= r->len) {
6663
err_setstr(IndexError, "range object index out of range");
6764
return NULL;
6865
}
6966

70-
return newintobject(r->start + (i % r->len) * r->step);
67+
return newintobject(r->start + i * r->step);
7168
}
7269

7370
static int
7471
range_length(r)
7572
rangeobject *r;
7673
{
77-
return r->len * r->reps;
74+
return r->len;
7875
}
7976

8077
static object *
8178
range_repr(r)
8279
rangeobject *r;
8380
{
8481
char buf[80];
85-
if (r->reps != 1)
86-
sprintf(buf, "(xrange(%ld, %ld, %ld) * %d)",
87-
r->start,
88-
r->start + r->len * r->step,
89-
r->step,
90-
r->reps);
91-
else
92-
sprintf(buf, "xrange(%ld, %ld, %ld)",
93-
r->start,
94-
r->start + r->len * r->step,
95-
r->step);
82+
sprintf(buf, "xrange(%ld, %ld, %ld)",
83+
r->start, r->start + r->len * r->step, r->step);
9684
return newstringobject(buf);
9785
}
9886

99-
object *
100-
range_concat(r, obj)
101-
rangeobject *r;
102-
object *obj;
103-
{
104-
if (is_rangeobject(obj)) {
105-
rangeobject *s = (rangeobject *)obj;
106-
if (r->start == s->start && r->len == s->len &&
107-
r->step == s->step)
108-
return newrangeobject(r->start, r->len, r->step,
109-
r->reps + s->reps);
110-
}
111-
err_setstr(TypeError, "cannot concatenate different range objects");
112-
return NULL;
113-
}
114-
115-
object *
116-
range_repeat(r, n)
117-
rangeobject *r;
118-
int n;
119-
{
120-
if (n < 0)
121-
return (object *) newrangeobject(0, 0, 1, 1);
122-
123-
else if (n == 1) {
124-
INCREF(r);
125-
return (object *) r;
126-
}
127-
128-
else
129-
return (object *) newrangeobject(
130-
r->start,
131-
r->len,
132-
r->step,
133-
r->reps * n);
134-
}
135-
13687
static int
13788
range_compare(r1, r2)
13889
rangeobject *r1, *r2;
@@ -145,36 +96,33 @@ range_compare(r1, r2)
14596

14697
else if (r1->len != r2->len)
14798
return r1->len - r2->len;
99+
}
148100

149-
else
150-
return r1->reps - r2->reps;
101+
static object *
102+
range_concat(r, s)
103+
rangeobject *r;
104+
object *s;
105+
{
106+
err_setstr(TypeError, "concat not supported by xrange object");
107+
return NULL;
151108
}
152109

153110
static object *
154-
range_slice(r, low, high)
111+
range_repeat(r, n)
155112
rangeobject *r;
156-
int low, high;
113+
int n;
157114
{
158-
if (r->reps != 1) {
159-
err_setstr(TypeError, "cannot slice a replicated range");
160-
return NULL;
161-
}
162-
if (low < 0)
163-
low = 0;
164-
else if (low > r->len)
165-
low = r->len;
166-
if (high < 0)
167-
high = 0;
168-
if (high < low)
169-
high = low;
170-
else if (high > r->len)
171-
high = r->len;
172-
173-
return (object *) newrangeobject(
174-
low * r->step + r->start,
175-
high - low,
176-
r->step,
177-
1);
115+
err_setstr(TypeError, "repeat not supported by xrange object");
116+
return NULL;
117+
}
118+
119+
static object *
120+
range_slice(r, i, j)
121+
rangeobject *r;
122+
int i, j;
123+
{
124+
err_setstr(TypeError, "slice not supported by xrange object");
125+
return NULL;
178126
}
179127

180128
static sequence_methods range_as_sequence = {
@@ -190,7 +138,7 @@ static sequence_methods range_as_sequence = {
190138
typeobject Rangetype = {
191139
OB_HEAD_INIT(&Typetype)
192140
0, /* Number of items for varobject */
193-
"range", /* Name of this type */
141+
"xrange", /* Name of this type */
194142
sizeof(rangeobject), /* Basic object size */
195143
0, /* Item size for varobject */
196144
range_dealloc, /*tp_dealloc*/

Python/bltinmodule.c

Lines changed: 13 additions & 40 deletions

0 commit comments

Comments
 (0)