Author: Maciej Fijalkowski <fij...@gmail.com> 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 pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit