Author: Maciej Fijalkowski <[email protected]>
Branch:
Changeset: r45864:275b0363057a
Date: 2011-07-22 10:55 +0200
http://bitbucket.org/pypy/pypy/changeset/275b0363057a/
Log: merge
diff --git a/pypy/module/micronumpy/interp_numarray.py
b/pypy/module/micronumpy/interp_numarray.py
--- a/pypy/module/micronumpy/interp_numarray.py
+++ b/pypy/module/micronumpy/interp_numarray.py
@@ -17,8 +17,8 @@
reds = ['result_size', 'i', 'self', 'result'])
all_driver = jit.JitDriver(greens=['signature'], reds=['i', 'size', 'self'])
any_driver = jit.JitDriver(greens=['signature'], reds=['i', 'size', 'self'])
-slice_driver1 = jit.JitDriver(greens=['signature'], reds=['i', 'j', 'step',
'stop', 'storage', 'arr'])
-slice_driver2 = jit.JitDriver(greens=['signature'], reds=['i', 'j', 'step',
'stop', 'storage', 'arr'])
+slice_driver1 = jit.JitDriver(greens=['signature'], reds=['i', 'j', 'step',
'stop', 'source', 'dest'])
+slice_driver2 = jit.JitDriver(greens=['signature'], reds=['i', 'j', 'step',
'stop', 'source', 'dest'])
def add(v1, v2):
return v1 + v2
@@ -247,23 +247,25 @@
def descr_mean(self, space):
return
space.wrap(space.float_w(self.descr_sum(space))/self.find_size())
- def _sliceloop1(self, start, stop, step, arr, storage):
+ def _sliceloop1(self, start, stop, step, source, dest):
i = start
j = 0
while i < stop:
- #slice_driver1.jit_merge_point(signature=arr.signature,
- # step=step, stop=stop, i=i, j=j, arr=arr, storage=storage)
- storage[i] = arr.eval(j)
+ slice_driver1.jit_merge_point(signature=source.signature,
+ step=step, stop=stop, i=i, j=j, source=source,
+ dest=dest)
+ dest.storage[i] = source.eval(j)
j += 1
i += step
- def _sliceloop2(self, start, stop, step, arr, storage):
+ def _sliceloop2(self, start, stop, step, source, dest):
i = start
j = 0
while i > stop:
- #slice_driver2.jit_merge_point(signature=arr.signature,
- # step=step, stop=stop, i=i, j=j, arr=arr, storage=storage)
- storage[i] = arr.eval(j)
+ slice_driver2.jit_merge_point(signature=source.signature,
+ step=step, stop=stop, i=i, j=j, source=source,
+ dest=dest)
+ dest.storage[i] = source.eval(j)
j += 1
i += step
@@ -448,9 +450,9 @@
stop = self.calc_index(stop)
step = self.step * step
if step > 0:
- self._sliceloop1(start, stop, step, arr, self.parent.storage)
+ self._sliceloop1(start, stop, step, arr, self.parent)
else:
- self._sliceloop2(start, stop, step, arr, self.parent.storage)
+ self._sliceloop2(start, stop, step, arr, self.parent)
def calc_index(self, item):
return (self.start + item * self.step)
@@ -489,9 +491,9 @@
if not isinstance(arr, BaseArray):
arr = convert_to_array(space, arr)
if step > 0:
- self._sliceloop1(start, stop, step, arr, self.storage)
+ self._sliceloop1(start, stop, step, arr, self)
else:
- self._sliceloop2(start, stop, step, arr, self.storage)
+ self._sliceloop2(start, stop, step, arr, self)
def __del__(self):
lltype.free(self.storage, flavor='raw')
diff --git a/pypy/module/micronumpy/test/test_numarray.py
b/pypy/module/micronumpy/test/test_numarray.py
--- a/pypy/module/micronumpy/test/test_numarray.py
+++ b/pypy/module/micronumpy/test/test_numarray.py
@@ -173,7 +173,7 @@
def test_radd(self):
from numpy import array
- r = 3 + array(range(3))\
+ r = 3 + array(range(3))
for i in range(3):
assert r[i] == i + 3
diff --git a/pypy/module/pypyjit/test_pypy_c/test_string.py
b/pypy/module/pypyjit/test_pypy_c/test_string.py
--- a/pypy/module/pypyjit/test_pypy_c/test_string.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_string.py
@@ -92,10 +92,10 @@
p51 = new_with_vtable(21136408)
setfield_gc(p51, p28, descr=<GcPtrFieldDescr
.*NumberStringParser.inst_literal .*>)
setfield_gc(p51, ConstPtr(ptr51), descr=<GcPtrFieldDescr
pypy.objspace.std.strutil.NumberStringParser.inst_fname .*>)
- setfield_gc(p51, i29, descr=<SignedFieldDescr
.*NumberStringParser.inst_n .*>)
setfield_gc(p51, 1, descr=<SignedFieldDescr
.*NumberStringParser.inst_sign .*>)
setfield_gc(p51, 16, descr=<SignedFieldDescr
.*NumberStringParser.inst_base .*>)
setfield_gc(p51, p28, descr=<GcPtrFieldDescr
.*NumberStringParser.inst_s .*>)
+ setfield_gc(p51, i29, descr=<SignedFieldDescr
.*NumberStringParser.inst_n .*>)
p55 = call(ConstClass(parse_digit_string), p51,
descr=<GcPtrCallDescr>)
guard_no_exception(descr=...)
i57 = call(ConstClass(rbigint.toint), p55, descr=<SignedCallDescr>)
@@ -104,4 +104,4 @@
guard_no_overflow(descr=...)
--TICK--
jump(p0, p1, p2, p3, p4, p5, i58, i7, i8, p9, p10, descr=<Loop4>)
- """)
\ No newline at end of file
+ """)
diff --git a/pypy/module/select/test/test_epoll.py
b/pypy/module/select/test/test_epoll.py
--- a/pypy/module/select/test/test_epoll.py
+++ b/pypy/module/select/test/test_epoll.py
@@ -138,7 +138,7 @@
expected.sort()
assert events == expected
- assert then - now < 0.01
+ assert then - now < 0.02
now = time.time()
events = ep.poll(timeout=2.1, maxevents=4)
@@ -151,7 +151,7 @@
now = time.time()
events = ep.poll(1, 4)
then = time.time()
- assert then - now < 0.01
+ assert then - now < 0.02
events.sort()
expected = [
@@ -168,7 +168,7 @@
now = time.time()
events = ep.poll(1, 4)
then = time.time()
- assert then - now < 0.01
+ assert then - now < 0.02
expected = [(server.fileno(), select.EPOLLOUT)]
assert events == expected
@@ -192,7 +192,7 @@
now = time.time()
ep.poll(1, 4)
then = time.time()
- assert then - now < 0.01
+ assert then - now < 0.02
server.close()
ep.unregister(fd)
diff --git a/pypy/objspace/std/test/test_identitydict.py
b/pypy/objspace/std/test/test_identitydict.py
--- a/pypy/objspace/std/test/test_identitydict.py
+++ b/pypy/objspace/std/test/test_identitydict.py
@@ -1,3 +1,4 @@
+import py
from pypy.interpreter.gateway import interp2app
from pypy.conftest import gettestobjspace
from pypy.conftest import option
@@ -8,6 +9,8 @@
from pypy.objspace.std import identitydict
cls.space = gettestobjspace(
**{"objspace.std.withidentitydict": True})
+ if option.runappdirect:
+ py.test.skip("interp2app doesn't work on appdirect")
def compares_by_identity(space, w_cls):
return space.wrap(w_cls.compares_by_identity())
@@ -49,7 +52,7 @@
def setup_class(cls):
cls.space = gettestobjspace(**{"objspace.std.withidentitydict": True})
if option.runappdirect:
- py.test.skip("__repr__ doesn't work on appdirect")
+ py.test.skip("interp2app doesn't work on appdirect")
def w_uses_identity_strategy(self, obj):
import __pypy__
diff --git a/pypy/rlib/streamio.py b/pypy/rlib/streamio.py
--- a/pypy/rlib/streamio.py
+++ b/pypy/rlib/streamio.py
@@ -875,28 +875,32 @@
if bufsize == -1: # Get default from the class
bufsize = self.bufsize
self.bufsize = bufsize # buffer size (hint only)
- self.buf = ""
+ self.buf = []
+ self.buflen = 0
def flush_buffers(self):
if self.buf:
- self.do_write(self.buf)
- self.buf = ""
+ self.do_write(''.join(self.buf))
+ self.buf = []
+ self.buflen = 0
def tell(self):
- return self.do_tell() + len(self.buf)
+ return self.do_tell() + self.buflen
def write(self, data):
- buflen = len(self.buf)
+ buflen = self.buflen
datalen = len(data)
if datalen + buflen < self.bufsize:
- self.buf += data
+ self.buf.append(data)
+ self.buflen += datalen
elif buflen:
- slice = self.bufsize - buflen
- assert slice >= 0
- self.buf += data[:slice]
- self.do_write(self.buf)
- self.buf = ""
- self.write(data[slice:])
+ i = self.bufsize - buflen
+ assert i >= 0
+ self.buf.append(data[:i])
+ self.do_write(''.join(self.buf))
+ self.buf = []
+ self.buflen = 0
+ self.write(data[i:])
else:
self.do_write(data)
@@ -922,11 +926,27 @@
"""
def write(self, data):
- BufferingOutputStream.write(self, data)
- p = self.buf.rfind('\n') + 1
- if p >= 0:
- self.do_write(self.buf[:p])
- self.buf = self.buf[p:]
+ p = data.rfind('\n') + 1
+ assert p >= 0
+ if self.buflen + len(data) < self.bufsize:
+ if p == 0:
+ self.buf.append(data)
+ self.buflen += len(data)
+ else:
+ if self.buflen:
+ self.do_write(''.join(self.buf))
+ self.do_write(data[:p])
+ self.buf = [data[p:]]
+ self.buflen = len(self.buf[0])
+ else:
+ if self.buflen + p < self.bufsize:
+ p = self.bufsize - self.buflen
+ if self.buflen:
+ self.do_write(''.join(self.buf))
+ assert p >= 0
+ self.do_write(data[:p])
+ self.buf = [data[p:]]
+ self.buflen = len(self.buf[0])
# ____________________________________________________________
diff --git a/pypy/tool/jitlogparser/parser.py b/pypy/tool/jitlogparser/parser.py
--- a/pypy/tool/jitlogparser/parser.py
+++ b/pypy/tool/jitlogparser/parser.py
@@ -37,7 +37,7 @@
return self._is_guard
def repr(self):
- args = self.args
+ args = self.args[:]
if self.descr is not None:
args.append('descr=%s' % self.descr)
arglist = ', '.join(args)
diff --git a/pypy/tool/jitlogparser/test/test_parser.py
b/pypy/tool/jitlogparser/test/test_parser.py
--- a/pypy/tool/jitlogparser/test/test_parser.py
+++ b/pypy/tool/jitlogparser/test/test_parser.py
@@ -1,6 +1,6 @@
from pypy.tool.jitlogparser.parser import (SimpleParser, TraceForOpcode,
Function, adjust_bridges,
- import_log)
+ import_log, Op)
from pypy.tool.jitlogparser.storage import LoopStorage
import py, sys
@@ -225,3 +225,9 @@
assert 'cmp' in loops[1].operations[1].asm
# bridge
assert 'jo' in loops[3].operations[3].asm
+
+def test_Op_repr_is_pure():
+ op = Op('foobar', ['a', 'b'], 'c', 'mydescr')
+ myrepr = 'c = foobar(a, b, descr=mydescr)'
+ assert op.repr() == myrepr
+ assert op.repr() == myrepr # do it twice
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit