Author: Ronan Lamy <[email protected]>
Branch:
Changeset: r92802:e0fe31dff118
Date: 2017-10-19 18:38 +0100
http://bitbucket.org/pypy/pypy/changeset/e0fe31dff118/
Log: backport changes from py3.5
diff --git a/lib_pypy/_ctypes/array.py b/lib_pypy/_ctypes/array.py
--- a/lib_pypy/_ctypes/array.py
+++ b/lib_pypy/_ctypes/array.py
@@ -8,12 +8,16 @@
class ArrayMeta(_CDataMeta):
def __new__(self, name, cls, typedict):
res = type.__new__(self, name, cls, typedict)
- if '_type_' not in typedict:
+
+ if cls == (_CData,): # this is the Array class defined below
res._ffiarray = None
return res
- ffiarray = _rawffi.Array(typedict['_type_']._ffishape_)
- res._ffiarray = ffiarray
- subletter = getattr(typedict['_type_'], '_type_', None)
+ if not hasattr(res, '_length_') or not isinstance(res._length_, int):
+ raise AttributeError(
+ "class must define a '_length_' attribute, "
+ "which must be a positive integer")
+ ffiarray = res._ffiarray = _rawffi.Array(res._type_._ffishape_)
+ subletter = getattr(res._type_, '_type_', None)
if subletter == 'c':
def getvalue(self):
return _rawffi.charp2string(self._buffer.buffer,
@@ -28,12 +32,12 @@
for i in range(len(val)):
self[i] = val[i]
if len(val) < self._length_:
- self._buffer[len(val)] = '\x00'
+ self._buffer[len(val)] = b'\x00'
res.value = property(getvalue, setvalue)
def getraw(self):
return _rawffi.charp2rawstring(self._buffer.buffer,
- self._length_)
+ self._length_)
def setraw(self, buffer):
if len(buffer) > self._length_:
@@ -43,7 +47,7 @@
elif subletter == 'u':
def getvalue(self):
return _rawffi.wcharp2unicode(self._buffer.buffer,
- self._length_)
+ self._length_)
def setvalue(self, val):
# we don't want to have buffers here
@@ -59,9 +63,8 @@
target[len(val)] = u'\x00'
res.value = property(getvalue, setvalue)
- if '_length_' in typedict:
- res._ffishape_ = (ffiarray, typedict['_length_'])
- res._fficompositesize_ = res._sizeofinstances()
+ res._ffishape_ = (ffiarray, res._length_)
+ res._fficompositesize_ = res._sizeofinstances()
return res
from_address = cdata_from_address
@@ -156,7 +159,7 @@
l = [self[i] for i in range(start, stop, step)]
letter = getattr(self._type_, '_type_', None)
if letter == 'c':
- return "".join(l)
+ return b"".join(l)
if letter == 'u':
return u"".join(l)
return l
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit