[pypy-commit] pypy ffi-backend: Next test
arigo
noreply at buildbot.pypy.org
Sat Jun 23 17:22:43 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch: ffi-backend
Changeset: r55784:8e6a642a506d
Date: 2012-06-23 16:41 +0200
http://bitbucket.org/pypy/pypy/changeset/8e6a642a506d/
Log: Next test
diff --git a/pypy/module/_ffi_backend/ctypeobj.py b/pypy/module/_ffi_backend/ctypeobj.py
--- a/pypy/module/_ffi_backend/ctypeobj.py
+++ b/pypy/module/_ffi_backend/ctypeobj.py
@@ -211,12 +211,12 @@
space = self.space
if (space.isinstance_w(w_ob, space.w_list) or
space.isinstance_w(w_ob, space.w_tuple)):
- lst = space.listview(w_ob)
- if self.length >= 0 and len(lst) > self.length:
+ lst_w = space.listview(w_ob)
+ if self.length >= 0 and len(lst_w) > self.length:
xxx
ctitem = self.ctitem
- for i in range(len(lst)):
- ctitem.convert_from_object(cdata, lst[i])
+ for i in range(len(lst_w)):
+ ctitem.convert_from_object(cdata, lst_w[i])
cdata = rffi.ptradd(cdata, ctitem.size)
else:
xxx
@@ -432,9 +432,30 @@
class W_CTypeStruct(W_CTypeStructOrUnion):
kind = "struct"
+ def convert_from_object(self, cdata, w_ob):
+ space = self.space
+ ob = space.interpclass_w(w_ob)
+ if isinstance(ob, cdataobj.W_CData):
+ xxx
+
+ if (space.isinstance_w(w_ob, space.w_list) or
+ space.isinstance_w(w_ob, space.w_tuple)):
+ lst_w = space.listview(w_ob)
+ if len(lst_w) > len(self.fields_list):
+ xxx # "too many initializers for '%s' (got %zd)"
+ for i in range(len(lst_w)):
+ self.fields_list[i].write(cdata, lst_w[i])
+ else:
+ xxx
+
+
class W_CTypeUnion(W_CTypeStructOrUnion):
kind = "union"
+ def convert_from_object(self, cdata, w_ob):
+ xxx
+
+
class W_CField(Wrappable):
_immutable_ = True
def __init__(self, ctype, offset, bitshift, bitsize):
diff --git a/pypy/module/_ffi_backend/test/_backend_test_c.py b/pypy/module/_ffi_backend/test/_backend_test_c.py
--- a/pypy/module/_ffi_backend/test/_backend_test_c.py
+++ b/pypy/module/_ffi_backend/test/_backend_test_c.py
@@ -831,7 +831,15 @@
BInt = new_primitive_type("int")
BStruct = new_struct_type("foo")
complete_struct_or_union(BStruct, [('a1', BInt, 1)])
- py.test.raises(NotImplementedError, newp, new_pointer_type(BStruct), [-1])
+ p = newp(new_pointer_type(BStruct), [-1])
+ assert p.a1 == -1
+ p = newp(new_pointer_type(BStruct), {'a1': -1})
+ assert p.a1 == -1
+ #
+ BUnion = new_union_type("bar")
+ complete_struct_or_union(BUnion, [('a1', BInt, 1)])
+ p = newp(new_pointer_type(BUnion), -1)
+ assert p.a1 == -1
def test_weakref():
import weakref
More information about the pypy-commit
mailing list