[pypy-commit] pypy ffi-backend: Fix the initializer for unions.
arigo
noreply at buildbot.pypy.org
Wed Jul 4 05:02:01 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch: ffi-backend
Changeset: r55911:16844334c68b
Date: 2012-07-04 05:01 +0200
http://bitbucket.org/pypy/pypy/changeset/16844334c68b/
Log: Fix the initializer for unions.
diff --git a/pypy/module/_cffi_backend/ctypestruct.py b/pypy/module/_cffi_backend/ctypestruct.py
--- a/pypy/module/_cffi_backend/ctypestruct.py
+++ b/pypy/module/_cffi_backend/ctypestruct.py
@@ -74,15 +74,16 @@
return True
return False
-
-class W_CTypeStruct(W_CTypeStructOrUnion):
- kind = "struct"
+ def _check_only_one_argument_for_union(self, w_ob):
+ pass
def convert_from_object(self, cdata, w_ob):
space = self.space
if self._copy_from_same(cdata, w_ob):
return
+ self._check_only_one_argument_for_union(w_ob)
+
if (space.isinstance_w(w_ob, space.w_list) or
space.isinstance_w(w_ob, space.w_tuple)):
lst_w = space.listview(w_ob)
@@ -110,18 +111,19 @@
w_ob)
+class W_CTypeStruct(W_CTypeStructOrUnion):
+ kind = "struct"
+
class W_CTypeUnion(W_CTypeStructOrUnion):
kind = "union"
- def convert_from_object(self, cdata, w_ob):
+ def _check_only_one_argument_for_union(self, w_ob):
space = self.space
- if self._copy_from_same(cdata, w_ob):
- return
- if not self.fields_list:
- raise OperationError(space.w_ValueError,
- space.wrap("empty union"))
- self.fields_list[0].write(cdata, w_ob)
-
+ if space.int_w(space.len(w_ob)) > 1:
+ raise operationerrfmt(space.w_ValueError,
+ "initializer for '%s': %d items given, but "
+ "only one supported (use a dict if needed)",
+ self.name, n)
class W_CField(Wrappable):
More information about the pypy-commit
mailing list