Author: Antonio Cuni <[email protected]>
Branch: faster-rstruct-2
Changeset: r91320:cce350f856ce
Date: 2017-05-17 11:48 +0200
http://bitbucket.org/pypy/pypy/changeset/cce350f856ce/
Log: move setzeros into the base class rlib.buffer.Buffer, because it is
used by rstruct to pack and needs to be available on all buffers
diff --git a/pypy/module/struct/test/test_struct.py
b/pypy/module/struct/test/test_struct.py
--- a/pypy/module/struct/test/test_struct.py
+++ b/pypy/module/struct/test/test_struct.py
@@ -535,4 +535,9 @@
buf = bytearray(len(expected))
self.struct.pack_into("ii", buf, 0, 42, 43)
assert buf == expected
-
+
+ def test_pack_into_bytearray_padding(self):
+ expected = self.struct.pack("xxi", 42)
+ buf = bytearray(len(expected))
+ self.struct.pack_into("xxi", buf, 0, 42)
+ assert buf == expected
diff --git a/rpython/rlib/buffer.py b/rpython/rlib/buffer.py
--- a/rpython/rlib/buffer.py
+++ b/rpython/rlib/buffer.py
@@ -80,6 +80,12 @@
for i in range(len(string)):
self.setitem(start + i, string[i])
+ @jit.look_inside_iff(lambda self, index, count:
+ jit.isconstant(count) and count <= 8)
+ def setzeros(self, index, count):
+ for i in range(index, index+count):
+ self.setitem(i, '\x00')
+
@specialize.ll_and_arg(1)
def typed_read(self, TP, byte_offset):
"""
diff --git a/rpython/rlib/mutbuffer.py b/rpython/rlib/mutbuffer.py
--- a/rpython/rlib/mutbuffer.py
+++ b/rpython/rlib/mutbuffer.py
@@ -48,12 +48,6 @@
def setitem(self, index, char):
self.ll_val.chars[index] = char
- @jit.look_inside_iff(lambda self, index, count:
- jit.isconstant(count) and count <= 8)
- def setzeros(self, index, count):
- for i in range(index, index+count):
- self.setitem(i, '\x00')
-
@staticmethod
def _get_gc_data_offset():
return (llmemory.offsetof(STR, 'chars') +
diff --git a/rpython/rlib/test/test_buffer.py b/rpython/rlib/test/test_buffer.py
--- a/rpython/rlib/test/test_buffer.py
+++ b/rpython/rlib/test/test_buffer.py
@@ -24,6 +24,10 @@
def as_str(self):
return rffi.charpsize2str(self._buf, self._n)
+ def setitem(self, i, char):
+ assert not self.readonly
+ self._buf[i] = char
+
def __del__(self):
lltype.free(self._buf, flavor='raw')
self._buf = None
@@ -73,6 +77,13 @@
assert addr[4] == b'o'
assert addr[6] == b'w'
+def test_setzeros():
+ buf = MyRawBuffer('ABCDEFGH', readonly=False)
+ buf.setzeros(2, 3)
+ assert buf.as_str() == 'AB\x00\x00\x00FGH'
+
+
+
class BaseTypedReadTest:
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit