Patch #1359618: Speed-up charmap encoder.
diff --git a/Tools/unicode/gencodec.py b/Tools/unicode/gencodec.py
index 0c55de6..8a2ca64 100644
--- a/Tools/unicode/gencodec.py
+++ b/Tools/unicode/gencodec.py
@@ -270,6 +270,11 @@
         comments=comments,
         precisions=(4, 2))
 
+    if decoding_table_code:
+        suffix = 'table'
+    else:
+        suffix = 'map'
+
     l = [
         '''\
 """ Python Character Mapping Codec %s generated from '%s' with gencodec.py.
@@ -283,30 +288,20 @@
 class Codec(codecs.Codec):
 
     def encode(self,input,errors='strict'):
-        return codecs.charmap_encode(input,errors,encoding_map)
+        return codecs.charmap_encode(input,errors,encoding_%s)
 
-    def decode(self,input,errors='strict'):''' % (encodingname, name)
-        ]
-    if decoding_table_code:
-        l.append('''\
-        return codecs.charmap_decode(input,errors,decoding_table)''')
-    else:
-        l.append('''\
-        return codecs.charmap_decode(input,errors,decoding_map)''')
-
-    l.append('''
+    def decode(self,input,errors='strict'):
+        return codecs.charmap_decode(input,errors,decoding_%s)
+''' % (encodingname, name, suffix, suffix)]
+    l.append('''\
 class IncrementalEncoder(codecs.IncrementalEncoder):
     def encode(self, input, final=False):
-        return codecs.charmap_encode(input,self.errors,encoding_map)[0]
+        return codecs.charmap_encode(input,self.errors,encoding_%s)[0]
 
 class IncrementalDecoder(codecs.IncrementalDecoder):
-    def decode(self, input, final=False):''')
-    if decoding_table_code:
-        l.append('''\
-        return codecs.charmap_decode(input,self.errors,decoding_table)[0]''')
-    else:
-        l.append('''\
-        return codecs.charmap_decode(input,self.errors,decoding_map)[0]''')
+    def decode(self, input, final=False):
+        return codecs.charmap_decode(input,self.errors,decoding_%s)[0]''' %
+        (suffix, suffix))
 
     l.append('''
 class StreamWriter(Codec,codecs.StreamWriter):
@@ -319,13 +314,13 @@
 
 def getregentry():
     return codecs.CodecInfo(
-        Codec().encode,
-        Codec().decode,
         name=%r,
-        streamwriter=StreamWriter,
-        streamreader=StreamReader,
+        encode=Codec().encode,
+        decode=Codec().decode,
         incrementalencoder=IncrementalEncoder,
         incrementaldecoder=IncrementalDecoder,
+        streamreader=StreamReader,
+        streamwriter=StreamWriter,
     )
 ''' % encodingname.replace('_', '-'))
 
@@ -342,10 +337,16 @@
         l.extend(decoding_table_code)
 
     # Add encoding map
-    l.append('''
+    if decoding_table_code:
+        l.append('''
+### Encoding table
+encoding_table=codecs.charmap_build(decoding_table)
+''')
+    else:
+        l.append('''
 ### Encoding Map
 ''')
-    l.extend(encoding_map_code)
+        l.extend(encoding_map_code)
 
     # Final new-line
     l.append('')