Issue #13988: move the python bootstrap code to cElementTree.py, and remove obsolete code for Python 2.4 and 2.5.
diff --git a/Lib/xml/etree/cElementTree.py b/Lib/xml/etree/cElementTree.py
index a6f127a..aaef59e 100644
--- a/Lib/xml/etree/cElementTree.py
+++ b/Lib/xml/etree/cElementTree.py
@@ -1,3 +1,153 @@
 # Wrapper module for _elementtree
 
+from xml.etree.ElementTree import (ElementTree, dump, iselement, QName,
+                                   fromstringlist,
+                                   tostring, tostringlist, VERSION)
+# These ones are not in ElementTree.__all__
+from xml.etree.ElementTree import ElementPath, register_namespace
+
+# Import the C accelerators:
+#   Element, SubElement, TreeBuilder, XMLParser, ParseError
 from _elementtree import *
+
+
+class ElementTree(ElementTree):
+
+    def parse(self, source, parser=None):
+        close_source = False
+        if not hasattr(source, 'read'):
+            source = open(source, 'rb')
+            close_source = True
+        try:
+            if parser is not None:
+                while True:
+                    data = source.read(65536)
+                    if not data:
+                        break
+                    parser.feed(data)
+                self._root = parser.close()
+            else:
+                parser = XMLParser()
+                self._root = parser._parse(source)
+            return self._root
+        finally:
+            if close_source:
+                source.close()
+
+
+class iterparse:
+    root = None
+
+    def __init__(self, file, events=None):
+        self._close_file = False
+        if not hasattr(file, 'read'):
+            file = open(file, 'rb')
+            self._close_file = True
+        self._file = file
+        self._events = []
+        self._index = 0
+        self._error = None
+        self.root = self._root = None
+        b = TreeBuilder()
+        self._parser = XMLParser(b)
+        self._parser._setevents(self._events, events)
+
+    def __next__(self):
+        while True:
+            try:
+                item = self._events[self._index]
+                self._index += 1
+                return item
+            except IndexError:
+                pass
+            if self._error:
+                e = self._error
+                self._error = None
+                raise e
+            if self._parser is None:
+                self.root = self._root
+                if self._close_file:
+                    self._file.close()
+                raise StopIteration
+            # load event buffer
+            del self._events[:]
+            self._index = 0
+            data = self._file.read(16384)
+            if data:
+                try:
+                    self._parser.feed(data)
+                except SyntaxError as exc:
+                    self._error = exc
+            else:
+                self._root = self._parser.close()
+                self._parser = None
+
+    def __iter__(self):
+        return self
+
+
+# =============================================================================
+#
+#   Everything below this line can be removed
+#   after cElementTree is folded behind ElementTree.
+#
+# =============================================================================
+
+from xml.etree.ElementTree import Comment as _Comment, PI as _PI
+
+
+def parse(source, parser=None):
+    tree = ElementTree()
+    tree.parse(source, parser)
+    return tree
+
+
+def XML(text, parser=None):
+    if not parser:
+        parser = XMLParser()
+    parser = XMLParser()
+    parser.feed(text)
+    return parser.close()
+
+
+def XMLID(text, parser=None):
+    tree = XML(text, parser=parser)
+    ids = {}
+    for elem in tree.iter():
+        id = elem.get('id')
+        if id:
+            ids[id] = elem
+    return tree, ids
+
+
+class CommentProxy:
+
+    def __call__(self, text=None):
+        element = Element(_Comment)
+        element.text = text
+        return element
+
+    def __eq__(self, other):
+        return _Comment == other
+
+
+class PIProxy:
+
+    def __call__(self, target, text=None):
+        element = Element(_PI)
+        element.text = target
+        if text:
+            element.text = element.text + ' ' + text
+        return element
+
+    def __eq__(self, other):
+        return _PI == other
+
+
+Comment = CommentProxy()
+PI = ProcessingInstruction = PIProxy()
+del CommentProxy, PIProxy
+
+# Aliases
+fromstring = XML
+XMLTreeBuilder = XMLParser