[pypy-svn] r66463 - in pypy/branch/parser-compiler/pypy/interpreter/astcompiler: . test

benjamin at codespeak.net benjamin at codespeak.net
Tue Jul 21 00:06:44 CEST 2009


Author: benjamin
Date: Tue Jul 21 00:06:43 2009
New Revision: 66463

Modified:
   pypy/branch/parser-compiler/pypy/interpreter/astcompiler/astbuilder.py
   pypy/branch/parser-compiler/pypy/interpreter/astcompiler/test/test_astbuilder.py
Log:
non-extended slices have a step of None

Modified: pypy/branch/parser-compiler/pypy/interpreter/astcompiler/astbuilder.py
==============================================================================
--- pypy/branch/parser-compiler/pypy/interpreter/astcompiler/astbuilder.py	(original)
+++ pypy/branch/parser-compiler/pypy/interpreter/astcompiler/astbuilder.py	Tue Jul 21 00:06:43 2009
@@ -935,7 +935,11 @@
             if third_child.type == syms.test:
                 upper = self.handle_expr(third_child)
         last_child = slice_node.children[-1]
-        if last_child.type == syms.sliceop and len(last_child.children) == 2:
+        if last_child.type == syms.sliceop:
+            if len(last_child.children) == 1:
+                step = ast.Name("None", ast.Load, last_child.lineno,
+                                last_child.column)
+            else:
                 step_child = last_child.children[1]
                 if step_child.type == syms.test:
                     step = self.handle_expr(step_child)

Modified: pypy/branch/parser-compiler/pypy/interpreter/astcompiler/test/test_astbuilder.py
==============================================================================
--- pypy/branch/parser-compiler/pypy/interpreter/astcompiler/test/test_astbuilder.py	(original)
+++ pypy/branch/parser-compiler/pypy/interpreter/astcompiler/test/test_astbuilder.py	Tue Jul 21 00:06:43 2009
@@ -965,26 +965,40 @@
         assert sub.ctx == ast.Load
         assert isinstance(sub.slice, ast.Index)
         assert isinstance(sub.slice.value, ast.Name)
-        for input in (":", "::"):
-            slc = self.get_first_expr("x[%s]" % (input,)).slice
-            assert slc.upper is None
-            assert slc.lower is None
-            assert slc.step is None
-        for input in ("1:", "1::"):
-            slc = self.get_first_expr("x[%s]" % (input,)).slice
-            assert isinstance(slc.lower, ast.Num)
-            assert slc.upper is None
-            assert slc.step is None
-        for input in (":2", ":2:"):
-            slc = self.get_first_expr("x[%s]" % (input,)).slice
-            assert slc.lower is None
-            assert isinstance(slc.upper, ast.Num)
-            assert slc.step is None
-        for input in ("2:2:", "2:2"):
-            slc = self.get_first_expr("x[%s]" % (input,)).slice
-            assert isinstance(slc.lower, ast.Num)
-            assert isinstance(slc.upper, ast.Num)
-            assert slc.step is None
+        slc = self.get_first_expr("x[:]").slice
+        assert slc.upper is None
+        assert slc.lower is None
+        assert slc.step is None
+        slc = self.get_first_expr("x[::]").slice
+        assert slc.upper is None
+        assert slc.lower is None
+        assert isinstance(slc.step, ast.Name)
+        assert slc.step.id == "None"
+        assert slc.step.ctx == ast.Load
+        slc = self.get_first_expr("x[1:]").slice
+        assert isinstance(slc.lower, ast.Num)
+        assert slc.upper is None
+        assert slc.step is None
+        slc = self.get_first_expr("x[1::]").slice
+        assert isinstance(slc.lower, ast.Num)
+        assert slc.upper is None
+        assert isinstance(slc.step, ast.Name)
+        slc = self.get_first_expr("x[:2]").slice
+        assert slc.lower is None
+        assert isinstance(slc.upper, ast.Num)
+        assert slc.step is None
+        slc = self.get_first_expr("x[:2:]").slice
+        assert slc.lower is None
+        assert isinstance(slc.upper, ast.Num)
+        assert isinstance(slc.step, ast.Name)
+        slc = self.get_first_expr("x[2:2]").slice
+        assert isinstance(slc.lower, ast.Num)
+        assert isinstance(slc.upper, ast.Num)
+        assert slc.step is None
+        slc = self.get_first_expr("x[2:2:]").slice
+        assert isinstance(slc.lower, ast.Num)
+        assert isinstance(slc.upper, ast.Num)
+        assert isinstance(slc.step, ast.Name)
         slc = self.get_first_expr("x[::2]").slice
         assert slc.lower is None
         assert slc.upper is None



More information about the Pypy-commit mailing list