[pypy-commit] pypy default: Move the cif_descr back as a class default. This is actually
arigo
noreply at buildbot.pypy.org
Fri Jan 9 11:10:50 CET 2015
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r75269:48cd201a34bf
Date: 2015-01-09 11:10 +0100
http://bitbucket.org/pypy/pypy/changeset/48cd201a34bf/
Log: Move the cif_descr back as a class default. This is actually
important because of an instantiate() which doesn't call the regular
constructor.
diff --git a/pypy/module/_cffi_backend/ctypefunc.py b/pypy/module/_cffi_backend/ctypefunc.py
--- a/pypy/module/_cffi_backend/ctypefunc.py
+++ b/pypy/module/_cffi_backend/ctypefunc.py
@@ -27,6 +27,8 @@
_immutable_fields_ = ['fargs[*]', 'ellipsis', 'cif_descr']
kind = "function"
+ cif_descr = lltype.nullptr(CIF_DESCRIPTION)
+
def __init__(self, space, fargs, fresult, ellipsis):
extra = self._compute_extra_text(fargs, fresult, ellipsis)
size = rffi.sizeof(rffi.VOIDP)
@@ -34,7 +36,6 @@
could_cast_anything=False)
self.fargs = fargs
self.ellipsis = bool(ellipsis)
- self.cif_descr = lltype.nullptr(CIF_DESCRIPTION)
# fresult is stored in self.ctitem
if not ellipsis:
@@ -50,6 +51,9 @@
raise
# else, eat the NotImplementedError. We will get the
# exception if we see an actual call
+ if self.cif_descr: # should not be True, but you never know
+ lltype.free(self.cif_descr, flavor='raw')
+ self.cif_descr = lltype.nullptr(CIF_DESCRIPTION)
def new_ctypefunc_completing_argtypes(self, args_w):
space = self.space
@@ -65,10 +69,12 @@
"argument %d passed in the variadic part needs to "
"be a cdata object (got %T)", i + 1, w_obj)
fvarargs[i] = ct
+ # xxx call instantiate() directly. It's a bit of a hack.
ctypefunc = instantiate(W_CTypeFunc)
ctypefunc.space = space
ctypefunc.fargs = fvarargs
ctypefunc.ctitem = self.ctitem
+ #ctypefunc.cif_descr = NULL --- already provided as the default
CifDescrBuilder(fvarargs, self.ctitem).rawallocate(ctypefunc)
return ctypefunc
More information about the pypy-commit
mailing list