Author: Armin Rigo <[email protected]>
Branch:
Changeset: r95044:6df19fd2b6df
Date: 2018-08-30 13:51 +0200
http://bitbucket.org/pypy/pypy/changeset/6df19fd2b6df/
Log: update to cffi/960ab54c2eb4
diff --git a/pypy/module/_cffi_backend/ctypearray.py
b/pypy/module/_cffi_backend/ctypearray.py
--- a/pypy/module/_cffi_backend/ctypearray.py
+++ b/pypy/module/_cffi_backend/ctypearray.py
@@ -104,7 +104,15 @@
return self.ctptr
def convert_from_object(self, cdata, w_ob):
- self.convert_array_from_object(cdata, w_ob)
+ if isinstance(w_ob, cdataobj.W_CData) and w_ob.ctype is self:
+ length = w_ob.get_array_length()
+ with w_ob as source:
+ source = rffi.cast(rffi.VOIDP, source)
+ target = rffi.cast(rffi.VOIDP, cdata)
+ size = rffi.cast(rffi.SIZE_T, self.ctitem.size * length)
+ rffi.c_memcpy(target, source, size)
+ else:
+ self.convert_array_from_object(cdata, w_ob)
def convert_to_object(self, cdata):
if self.length < 0:
diff --git a/pypy/module/_cffi_backend/ctypeptr.py
b/pypy/module/_cffi_backend/ctypeptr.py
--- a/pypy/module/_cffi_backend/ctypeptr.py
+++ b/pypy/module/_cffi_backend/ctypeptr.py
@@ -75,8 +75,7 @@
self._convert_array_from_listview(cdata, space.listview(w_ob))
elif self.accept_str:
if not space.isinstance_w(w_ob, space.w_bytes):
- return self._convert_array_from_cdataobj(cdata, w_ob,
- "str or list or tuple")
+ raise self._convert_error("str or list or tuple", w_ob)
s = space.bytes_w(w_ob)
n = len(s)
if self.length >= 0 and n > self.length:
@@ -91,8 +90,7 @@
elif isinstance(self.ctitem, ctypeprim.W_CTypePrimitiveUniChar):
from pypy.module._cffi_backend import wchar_helper
if not space.isinstance_w(w_ob, space.w_unicode):
- return self._convert_array_from_cdataobj(cdata, w_ob,
- "unicode or list or tuple")
+ raise self._convert_error("unicode or list or tuple", w_ob)
s = space.unicode_w(w_ob)
if self.ctitem.size == 2:
n = wchar_helper.unicode_size_as_char16(s)
@@ -113,19 +111,7 @@
else:
wchar_helper.unicode_to_char32(s, cdata, n, add_final_zero)
else:
- return self._convert_array_from_cdataobj(cdata, w_ob,
- "list or tuple")
-
- def _convert_array_from_cdataobj(self, cdata, w_ob, errmsg):
- if isinstance(w_ob, cdataobj.W_CData) and w_ob.ctype is self:
- length = w_ob.get_array_length()
- with w_ob as source:
- source = rffi.cast(rffi.VOIDP, source)
- target = rffi.cast(rffi.VOIDP, cdata)
- size = rffi.cast(rffi.SIZE_T, self.ctitem.size * length)
- rffi.c_memcpy(target, source, size)
- else:
- raise self._convert_error(errmsg, w_ob)
+ raise self._convert_error("list or tuple", w_ob)
def _must_be_string_of_zero_or_one(self, s):
for c in s:
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit