pure bdiff: don't use a generator
Generators are slow, and currently defeat the PyPy JIT.
--- a/mercurial/pure/bdiff.py Sat Apr 30 15:05:34 2011 +0200
+++ b/mercurial/pure/bdiff.py Sat Apr 30 15:05:36 2011 +0200
@@ -19,6 +19,7 @@
def _normalizeblocks(a, b, blocks):
prev = None
+ r = []
for curr in blocks:
if prev is None:
prev = curr
@@ -40,9 +41,10 @@
while (b1end + shift < b2end and
a[a1end + shift] == b[b1end + shift]):
shift += 1
- yield a1, b1, l1 + shift
+ r.append((a1, b1, l1 + shift))
prev = a2 + shift, b2 + shift, l2 - shift
- yield prev
+ r.append(prev)
+ return r
def bdiff(a, b):
a = str(a).splitlines(True)