[pypy-commit] pypy py3.3: Add range() attributes: start, stop, step.
amauryfa
noreply at buildbot.pypy.org
Sat Apr 26 21:46:42 CEST 2014
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: py3.3
Changeset: r71009:135689ea903c
Date: 2014-04-26 15:40 +0200
http://bitbucket.org/pypy/pypy/changeset/135689ea903c/
Log: Add range() attributes: start, stop, step.
diff --git a/pypy/module/__builtin__/functional.py b/pypy/module/__builtin__/functional.py
--- a/pypy/module/__builtin__/functional.py
+++ b/pypy/module/__builtin__/functional.py
@@ -7,7 +7,7 @@
from pypy.interpreter.baseobjspace import W_Root
from pypy.interpreter.error import OperationError, oefmt
from pypy.interpreter.gateway import interp2app, unwrap_spec, WrappedDefault
-from pypy.interpreter.typedef import TypeDef
+from pypy.interpreter.typedef import TypeDef, interp_attrproperty_w
from rpython.rlib import jit
from rpython.rlib.objectmodel import specialize
from rpython.rlib.rarithmetic import r_uint, intmask
@@ -459,6 +459,9 @@
__contains__ = interp2app(W_Range.descr_contains),
count = interp2app(W_Range.descr_count),
index = interp2app(W_Range.descr_index),
+ start = interp_attrproperty_w('w_start', cls=W_Range),
+ stop = interp_attrproperty_w('w_stop', cls=W_Range),
+ step = interp_attrproperty_w('w_step', cls=W_Range),
)
W_Range.typedef.acceptable_as_base_class = False
diff --git a/pypy/module/__builtin__/test/test_functional.py b/pypy/module/__builtin__/test/test_functional.py
--- a/pypy/module/__builtin__/test/test_functional.py
+++ b/pypy/module/__builtin__/test/test_functional.py
@@ -449,6 +449,19 @@
x = range(0, -M, 1 - M)
assert repr(x) == 'range(0, %s, %s)' % (-M, 1 - M), repr(x)
+ def test_range_attributes(self):
+ rangeobj = range(3, 4, 5)
+ assert rangeobj.start == 3
+ assert rangeobj.stop == 4
+ assert rangeobj.step == 5
+
+ raises(AttributeError, "rangeobj.start = 0")
+ raises(AttributeError, "rangeobj.stop = 10")
+ raises(AttributeError, "rangeobj.step = 1")
+ raises(AttributeError, "del rangeobj.start")
+ raises(AttributeError, "del rangeobj.stop")
+ raises(AttributeError, "del rangeobj.step")
+
class AppTestReversed:
def test_reversed(self):
More information about the pypy-commit
mailing list