Patch #1550786: ellipsis literal.
diff --git a/Lib/compiler/ast.py b/Lib/compiler/ast.py
index b06531f..0be36a4 100644
--- a/Lib/compiler/ast.py
+++ b/Lib/compiler/ast.py
@@ -427,19 +427,6 @@
     def __repr__(self):
         return "Div((%s, %s))" % (repr(self.left), repr(self.right))
 
-class Ellipsis(Node):
-    def __init__(self, lineno=None):
-        self.lineno = lineno
-
-    def getChildren(self):
-        return ()
-
-    def getChildNodes(self):
-        return ()
-
-    def __repr__(self):
-        return "Ellipsis()"
-
 class FloorDiv(Node):
     def __init__(self, (left, right), lineno=None):
         self.left = left
diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py
index e0c3a10..83d0481 100644
--- a/Lib/compiler/pycodegen.py
+++ b/Lib/compiler/pycodegen.py
@@ -1214,9 +1214,6 @@
 
     # object constructors
 
-    def visitEllipsis(self, node):
-        self.emit('LOAD_CONST', Ellipsis)
-
     def visitTuple(self, node):
         self.set_lineno(node)
         for elt in node.nodes:
diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py
index 4f2107f..0ffb597 100644
--- a/Lib/compiler/transformer.py
+++ b/Lib/compiler/transformer.py
@@ -113,6 +113,7 @@
                                token.LBRACE: self.atom_lbrace,
                                token.NUMBER: self.atom_number,
                                token.STRING: self.atom_string,
+                               token.DOT: self.atom_ellipsis,
                                token.NAME: self.atom_name,
                                }
         self.encoding = None
@@ -747,6 +748,9 @@
             k += self.decode_literal(node[1])
         return Const(k, lineno=nodelist[0][2])
 
+    def atom_ellipsis(self, nodelist):
+        return Const(Ellipsis, lineno=nodelist[0][2])
+
     def atom_name(self, nodelist):
         return Name(nodelist[0][1], lineno=nodelist[0][2])
 
@@ -1276,11 +1280,9 @@
                          lineno=extractLineNo(nodelist))
 
     def com_subscript(self, node):
-        # slice_item: expression | proper_slice | ellipsis
+        # slice_item: expression | proper_slice
         ch = node[1]
         t = ch[0]
-        if t == token.DOT and node[2][0] == token.DOT:
-            return Ellipsis()
         if t == token.COLON or len(node) > 2:
             return self.com_sliceobj(node)
         return self.com_node(ch)
diff --git a/Lib/test/output/test_grammar b/Lib/test/output/test_grammar
index 8be2a1f..5033276 100644
--- a/Lib/test/output/test_grammar
+++ b/Lib/test/output/test_grammar
@@ -7,6 +7,7 @@
 1.1.2.2 Long integers
 1.1.2.3 Floating point
 1.1.3 String literals
+1.1.4 Ellipsis literal
 1.2 Grammar
 single_input
 file_input
diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py
index 6e9b204..eb93283 100644
--- a/Lib/test/test_grammar.py
+++ b/Lib/test/test_grammar.py
@@ -125,6 +125,12 @@
 '; verify(x == y)
 
 
+print '1.1.4 Ellipsis literal'
+
+x = ...
+verify(x == Ellipsis)
+
+
 print '1.2 Grammar'
 
 print 'single_input' # NEWLINE | simple_stmt | compound_stmt NEWLINE