Author: Ronan Lamy <[email protected]>
Branch: rffi-parser
Changeset: r89124:3ef445c0db43
Date: 2016-12-17 18:58 +0000
http://bitbucket.org/pypy/pypy/changeset/3ef445c0db43/
Log: Handle function pointers and void
diff --git a/pypy/module/cpyext/api.py b/pypy/module/cpyext/api.py
--- a/pypy/module/cpyext/api.py
+++ b/pypy/module/cpyext/api.py
@@ -621,6 +621,8 @@
} PyVarObject;
typedef struct _typeobject PyTypeObject;
+
+typedef void (*freefunc)(void *);
""")
h.configure_types()
diff --git a/pypy/module/cpyext/cparser.py b/pypy/module/cpyext/cparser.py
--- a/pypy/module/cpyext/cparser.py
+++ b/pypy/module/cpyext/cparser.py
@@ -726,7 +726,18 @@
self.structs[obj] = result
return result
elif isinstance(obj, model.PointerType):
- return lltype.Ptr(self.convert_type(obj.totype))
+ TO = self.convert_type(obj.totype)
+ if TO is lltype.Void:
+ return rffi.VOIDP
+ return lltype.Ptr(TO)
+ elif isinstance(obj, model.FunctionPtrType):
+ if obj.ellipsis:
+ raise NotImplementedError
+ args = [self.convert_type(arg) for arg in obj.args]
+ res = self.convert_type(obj.result)
+ return lltype.Ptr(lltype.FuncType(args, res))
+ elif isinstance(obj, model.VoidType):
+ return lltype.Void
else:
raise NotImplementedError
diff --git a/pypy/module/cpyext/typeobjectdefs.py
b/pypy/module/cpyext/typeobjectdefs.py
--- a/pypy/module/cpyext/typeobjectdefs.py
+++ b/pypy/module/cpyext/typeobjectdefs.py
@@ -5,13 +5,15 @@
Py_TPFLAGS_READYING, Py_TPFLAGS_READY, Py_TPFLAGS_HEAPTYPE)
from pypy.module.cpyext.pyobject import PyObject, make_ref, from_ref
from pypy.module.cpyext.modsupport import PyMethodDef
-from pypy.module.cpyext.api import Py_bufferP
+from pypy.module.cpyext.api import Py_bufferP, h
P, FT, PyO = Ptr, FuncType, PyObject
PyOPtr = Ptr(lltype.Array(PyO, hints={'nolength': True}))
-freefunc = P(FT([rffi.VOIDP], Void))
+#freefunc = P(FT([rffi.VOIDP], Void))
+freefunc = h.definitions['freefunc']
+
destructor = P(FT([PyO], Void))
printfunc = P(FT([PyO, FILEP, rffi.INT_real], rffi.INT))
getattrfunc = P(FT([PyO, rffi.CCHARP], PyO))
@@ -200,7 +202,7 @@
("tp_clear", inquiry), #U
# Assigned meaning in release 2.1
- # rich comparisons
+ # rich comparisons
("tp_richcompare", richcmpfunc), #N
# weak reference enabler
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit