Index: Cython/Compiler/Parsing.py
authorStefan Behnel <scoder@users.berlios.de>
Fri, 29 Oct 2010 15:17:39 +0000 (17:17 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Fri, 29 Oct 2010 15:17:39 +0000 (17:17 +0200)
Cython/Compiler/Parsing.py
tests/compile/ellipsis_T488.pyx [new file with mode: 0644]
tests/run/ellipsis_T488.pyx [new file with mode: 0644]

index 8c331b766120122e63a45725dd5aca4c15aa5a7e..4903bd6ba762cf36b11b898470db118b6ac1c87e 100644 (file)
@@ -497,20 +497,16 @@ def p_subscript(s):
     # 1, 2 or 3 ExprNodes, depending on how
     # many slice elements were encountered.
     pos = s.position()
-    if s.sy == '.':
-        expect_ellipsis(s)
-        return [ExprNodes.EllipsisNode(pos)]
-    else:
-        start = p_slice_element(s, (':',))
-        if s.sy != ':':
-            return [start]
-        s.next()
-        stop = p_slice_element(s, (':', ',', ']'))
-        if s.sy != ':':
-            return [start, stop]
-        s.next()
-        step = p_slice_element(s, (':', ',', ']'))
-        return [start, stop, step]
+    start = p_slice_element(s, (':',))
+    if s.sy != ':':
+        return [start]
+    s.next()
+    stop = p_slice_element(s, (':', ',', ']'))
+    if s.sy != ':':
+        return [start, stop]
+    s.next()
+    step = p_slice_element(s, (':', ',', ']'))
+    return [start, stop, step]
 
 def p_slice_element(s, follow_set):
     # Simple expression which may be missing iff
@@ -569,6 +565,9 @@ def p_atom(s):
         return p_dict_or_set_maker(s)
     elif sy == '`':
         return p_backquote_expr(s)
+    elif sy == '.':
+        expect_ellipsis(s)
+        return ExprNodes.EllipsisNode(pos)
     elif sy == 'INT':
         value = s.systring
         s.next()
diff --git a/tests/compile/ellipsis_T488.pyx b/tests/compile/ellipsis_T488.pyx
new file mode 100644 (file)
index 0000000..a745112
--- /dev/null
@@ -0,0 +1,6 @@
+#from ... import foo
+
+print ...
+def test():
+    x = ...
+    assert x is Ellipsis
diff --git a/tests/run/ellipsis_T488.pyx b/tests/run/ellipsis_T488.pyx
new file mode 100644 (file)
index 0000000..909ee60
--- /dev/null
@@ -0,0 +1,20 @@
+"""
+>>> test()
+"""
+def test():
+    x = ...
+    assert x is Ellipsis
+
+    d = {}
+    d[...] = 1
+    assert d[...] == 1
+    del d[...]
+    assert ... not in d
+
+    d[..., ...] = 1
+    assert d[..., ...] == 1
+    assert d[..., Ellipsis] == 1
+    assert (Ellipsis, Ellipsis) in d
+    del d[..., ...]
+    assert (Ellipsis, Ellipsis) not in d
+