[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