py3: optimize py3 compat.bytechr using Struct.pack
With Python 3.4.3, timeit says 0.437 usec -> 0.0685 usec. With Python
3.6, timeit says 0.157 usec -> 0.0907 usec. So it's faster on both
versions, but the speedup varies a lot.
Thanks to Gregory Szorc for the suggestion.
--- a/mercurial/pycompat.py Wed Mar 15 19:26:20 2017 -0700
+++ b/mercurial/pycompat.py Wed Mar 15 09:30:50 2017 -0700
@@ -38,6 +38,7 @@
import builtins
import functools
import io
+ import struct
fsencode = os.fsencode
fsdecode = os.fsdecode
@@ -73,8 +74,7 @@
if getattr(sys, 'argv', None) is not None:
sysargv = list(map(os.fsencode, sys.argv))
- def bytechr(i):
- return bytes([i])
+ bytechr = struct.Struct('>B').pack
def iterbytestr(s):
"""Iterate bytes as if it were a str object of Python 2"""