Author: Armin Rigo <ar...@tunes.org> Branch: cpyext-gc-support Changeset: r80396:3444872d2fb9 Date: 2015-10-22 16:10 +0200 http://bitbucket.org/pypy/pypy/changeset/3444872d2fb9/
Log: fixes diff --git a/pypy/module/cpyext/stringobject.py b/pypy/module/cpyext/stringobject.py --- a/pypy/module/cpyext/stringobject.py +++ b/pypy/module/cpyext/stringobject.py @@ -66,6 +66,7 @@ @bootstrap_function def init_stringobject(space): "Type description of PyStringObject" + global _basic_size setup_class_for_cpyext( W_AbstractBytesObject, basestruct=PyStringObjectStruct, @@ -86,6 +87,8 @@ # be freed with free() by the GC-- alloc_pypy_light_if=PyString_CheckExact, ) + W_BytesObject.typedef.cpyext_basicsize += 1 # includes the NULL + _basic_size = W_BytesObject.typedef.cpyext_basicsize def _string_fill_pyobj(s, ob): rffi.str2chararray(s, ob.c_ob_sval_pypy, len(s)) @@ -97,7 +100,7 @@ """ assert isinstance(w_obj, W_AbstractBytesObject) size = w_obj.string_length() - ob = lltype.malloc(PyStringObjectStruct, size + 1, flavor='raw', + ob = lltype.malloc(PyStringObjectStruct, _basic_size + size, flavor='raw', track_allocation=False) ob.c_ob_size = size if size > 8: @@ -152,7 +155,7 @@ raise OperationError(space.w_TypeError, space.wrap( "PyString_AsString only support strings")) ref_str = rffi.cast(PyStringObject, ref) - last_char = ref_str.c_ob_sval_pypy[ref_str.ob_size] + last_char = ref_str.c_ob_sval_pypy[ref_str.c_ob_size] if last_char != '\x00': assert last_char == '*' # copy string buffer diff --git a/pypy/module/cpyext/test/test_stringobject.py b/pypy/module/cpyext/test/test_stringobject.py --- a/pypy/module/cpyext/test/test_stringobject.py +++ b/pypy/module/cpyext/test/test_stringobject.py @@ -28,7 +28,7 @@ if(PyString_Size(s) == 11) { result = 1; } - if(s->ob_type->tp_basicsize != sizeof(void*)*4) + if(s->ob_type->tp_basicsize != sizeof(void*) * 4 + 1) result = 0; if(s->ob_type->tp_itemsize != sizeof(char)) result = 0; @@ -79,8 +79,7 @@ ]) s = module.getstring() assert len(s) == 4 - assert s == 'ab\x00c' - + assert s[:2] == 'ab' and s[3] == 'c' # s[2] undefined def test_AsString(self): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit