Author: Matti Picus <[email protected]>
Branch: unicode-utf8-py3
Changeset: r95319:5a159ecdb8a9
Date: 2018-11-15 01:12 -0800
http://bitbucket.org/pypy/pypy/changeset/5a159ecdb8a9/
Log: merge py3.5 into branch
diff --git a/pypy/module/array/interp_array.py
b/pypy/module/array/interp_array.py
--- a/pypy/module/array/interp_array.py
+++ b/pypy/module/array/interp_array.py
@@ -179,6 +179,10 @@
lltype.free(self._buffer, flavor='raw')
def setlen(self, size, zero=False, overallocate=True):
+ if self._buffer:
+ delta_memory_pressure = -self.allocated * self.itemsize
+ else:
+ delta_memory_pressure = 0
if size > 0:
if size > self.allocated or size < self.allocated / 2:
if overallocate:
@@ -191,14 +195,13 @@
some = 0
self.allocated = size + some
byte_size = self.allocated * self.itemsize
+ delta_memory_pressure += byte_size
if zero:
new_buffer = lltype.malloc(
- rffi.CCHARP.TO, byte_size, flavor='raw',
- add_memory_pressure=True, zero=True)
+ rffi.CCHARP.TO, byte_size, flavor='raw', zero=True)
else:
new_buffer = lltype.malloc(
- rffi.CCHARP.TO, byte_size, flavor='raw',
- add_memory_pressure=True)
+ rffi.CCHARP.TO, byte_size, flavor='raw')
copy_bytes = min(size, self.len) * self.itemsize
rffi.c_memcpy(rffi.cast(rffi.VOIDP, new_buffer),
rffi.cast(rffi.VOIDP, self._buffer),
@@ -215,6 +218,11 @@
lltype.free(self._buffer, flavor='raw')
self._buffer = new_buffer
self.len = size
+ # adds the difference between the old and the new raw-malloced
+ # size. If setlen() is called a lot on the same array object,
+ # it is important to take into account the fact that we also do
+ # lltype.free() above.
+ rgc.add_memory_pressure(delta_memory_pressure)
def _fromiterable(self, w_seq):
# used by fromsequence().
@@ -259,8 +267,10 @@
return None
oldbuffer = self._buffer
self._buffer = lltype.malloc(rffi.CCHARP.TO,
- (self.len - (j - i)) * self.itemsize, flavor='raw',
- add_memory_pressure=True)
+ (self.len - (j - i)) * self.itemsize, flavor='raw')
+ # Issue #2913: don't pass add_memory_pressure here, otherwise
+ # memory pressure grows but actual raw memory usage doesn't---we
+ # are freeing the old buffer at the end of this function.
if i:
rffi.c_memcpy(
rffi.cast(rffi.VOIDP, self._buffer),
diff --git a/pypy/module/cpyext/test/test_unicodeobject.py
b/pypy/module/cpyext/test/test_unicodeobject.py
--- a/pypy/module/cpyext/test/test_unicodeobject.py
+++ b/pypy/module/cpyext/test/test_unicodeobject.py
@@ -689,6 +689,8 @@
with raises_w(space, TypeError):
PyUnicode_FromEncodedObject(
space, space.wrap(u_text), null_charp, None)
+ assert space.unicode_w(PyUnicode_FromEncodedObject(
+ space, space.newbytes(s_text), null_charp, None)) == u_text
rffi.free_charp(b_text)
def test_mbcs(self, space):
diff --git a/pypy/module/cpyext/unicodeobject.py
b/pypy/module/cpyext/unicodeobject.py
--- a/pypy/module/cpyext/unicodeobject.py
+++ b/pypy/module/cpyext/unicodeobject.py
@@ -543,7 +543,7 @@
raise oefmt(space.w_TypeError, "decoding str is not supported")
if space.isinstance_w(w_obj, space.w_bytearray): # Python 2.x specific
raise oefmt(space.w_TypeError, "decoding bytearray is not supported")
- s = space.bytes_w(w_obj)
+ s = space.charbuf_w(w_obj)
return _pyunicode_decode(space, s, encoding, errors)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit