[pypy-commit] pypy rffi-parser: Add missing declarations needed by PyTypeObject
rlamy
pypy.commits at gmail.com
Sat Dec 17 22:54:53 EST 2016
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: rffi-parser
Changeset: r89133:62289b903d10
Date: 2016-12-18 03:40 +0000
http://bitbucket.org/pypy/pypy/changeset/62289b903d10/
Log: Add missing declarations needed by PyTypeObject
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
@@ -789,6 +789,42 @@
releasebufferproc bf_releasebuffer;
} PyBufferProcs;
+/* from descrobject.h */
+typedef PyObject *(*getter)(PyObject *, void *);
+typedef int (*setter)(PyObject *, PyObject *, void *);
+
+typedef struct PyGetSetDef {
+ char *name;
+ getter get;
+ setter set;
+ char *doc;
+ void *closure;
+} PyGetSetDef;
+
+/* from methodobject.h */
+typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
+typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *,
+ PyObject *);
+typedef PyObject *(*PyNoArgsFunction)(PyObject *);
+
+struct PyMethodDef {
+ const char *ml_name; /* The name of the built-in function/method */
+ PyCFunction ml_meth; /* The C function that implements it */
+ int ml_flags; /* Combination of METH_xxx flags, which mostly
+ describe the args expected by the C func */
+ const char *ml_doc; /* The __doc__ attribute, or NULL */
+};
+typedef struct PyMethodDef PyMethodDef;
+
+/* from structmember.h */
+typedef struct PyMemberDef {
+ /* Current version, use this */
+ char *name;
+ int type;
+ Py_ssize_t offset;
+ int flags;
+ char *doc;
+} PyMemberDef;
typedef struct _typeobject {
diff --git a/pypy/module/cpyext/modsupport.py b/pypy/module/cpyext/modsupport.py
--- a/pypy/module/cpyext/modsupport.py
+++ b/pypy/module/cpyext/modsupport.py
@@ -50,7 +50,7 @@
cache. CPython includes some extra checking here to make sure the module
being initialized lines up with what's expected, but we don't.
"""
- from pypy.module.cpyext.typeobjectdefs import PyTypeObjectPtr
+ from pypy.module.cpyext.api import PyTypeObjectPtr
modname = rffi.charp2str(name)
state = space.fromcache(State)
f_name, f_path = state.package_context
diff --git a/pypy/module/cpyext/slotdefs.py b/pypy/module/cpyext/slotdefs.py
--- a/pypy/module/cpyext/slotdefs.py
+++ b/pypy/module/cpyext/slotdefs.py
@@ -6,9 +6,9 @@
from rpython.rlib.rarithmetic import widen
from pypy.module.cpyext.api import (
cpython_api, generic_cpy_call, PyObject, Py_ssize_t, Py_TPFLAGS_CHECKTYPES,
- mangle_name, pypy_decl, Py_buffer, Py_bufferP)
+ mangle_name, pypy_decl, Py_buffer, Py_bufferP, PyTypeObjectPtr)
from pypy.module.cpyext.typeobjectdefs import (
- unaryfunc, ternaryfunc, PyTypeObjectPtr, binaryfunc,
+ unaryfunc, ternaryfunc, binaryfunc,
getattrfunc, getattrofunc, setattrofunc, lenfunc, ssizeargfunc, inquiry,
ssizessizeargfunc, ssizeobjargproc, iternextfunc, initproc, richcmpfunc,
cmpfunc, hashfunc, descrgetfunc, descrsetfunc, objobjproc, objobjargproc,
diff --git a/pypy/module/cpyext/test/test_bytesobject.py b/pypy/module/cpyext/test/test_bytesobject.py
--- a/pypy/module/cpyext/test/test_bytesobject.py
+++ b/pypy/module/cpyext/test/test_bytesobject.py
@@ -5,7 +5,7 @@
from pypy.module.cpyext.bytesobject import new_empty_str, PyBytesObject
from pypy.module.cpyext.api import PyObjectP, PyObject, Py_ssize_tP, generic_cpy_call
from pypy.module.cpyext.pyobject import Py_DecRef, from_ref, make_ref
-from pypy.module.cpyext.typeobjectdefs import PyTypeObjectPtr
+from pypy.module.cpyext.api import PyTypeObjectPtr
import py
import sys
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
@@ -1,239 +1,62 @@
-from rpython.rtyper.lltypesystem import rffi, lltype
-from rpython.rtyper.lltypesystem.lltype import Ptr, FuncType, Void
-from pypy.module.cpyext.api import (cpython_struct, Py_ssize_t, Py_ssize_tP,
- PyVarObjectFields, PyTypeObject, PyTypeObjectPtr, FILEP,
- 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, h
+from pypy.module.cpyext.api import h
-P, FT, PyO = Ptr, FuncType, PyObject
-PyOPtr = Ptr(lltype.Array(PyO, hints={'nolength': True}))
+freefunc = h.definitions['freefunc']
+destructor = h.definitions['destructor']
+printfunc = h.definitions['printfunc']
+getattrfunc = h.definitions['getattrfunc']
+getattrofunc = h.definitions['getattrofunc']
+setattrfunc = h.definitions['setattrfunc']
+setattrofunc = h.definitions['setattrofunc']
+cmpfunc = h.definitions['cmpfunc']
+reprfunc = h.definitions['reprfunc']
+hashfunc = h.definitions['hashfunc']
+richcmpfunc = h.definitions['richcmpfunc']
+getiterfunc = h.definitions['getiterfunc']
+iternextfunc = h.definitions['iternextfunc']
+descrgetfunc = h.definitions['descrgetfunc']
+descrsetfunc = h.definitions['descrsetfunc']
+initproc = h.definitions['initproc']
+newfunc = h.definitions['newfunc']
+allocfunc = h.definitions['allocfunc']
-#freefunc = P(FT([rffi.VOIDP], Void))
-freefunc = h.definitions['freefunc']
+unaryfunc = h.definitions['unaryfunc']
+binaryfunc = h.definitions['binaryfunc']
+ternaryfunc = h.definitions['ternaryfunc']
+inquiry = h.definitions['inquiry']
+lenfunc = h.definitions['lenfunc']
+coercion = h.definitions['coercion']
+intargfunc = h.definitions['intargfunc']
+intintargfunc = h.definitions['intintargfunc']
+ssizeargfunc = h.definitions['ssizeargfunc']
+ssizessizeargfunc = h.definitions['ssizessizeargfunc']
+intobjargproc = h.definitions['intobjargproc']
+intintobjargproc = h.definitions['intintobjargproc']
+ssizeobjargproc = h.definitions['ssizeobjargproc']
+ssizessizeobjargproc = h.definitions['ssizessizeobjargproc']
+objobjargproc = h.definitions['objobjargproc']
-destructor = P(FT([PyO], Void))
-printfunc = P(FT([PyO, FILEP, rffi.INT_real], rffi.INT))
-getattrfunc = P(FT([PyO, rffi.CCHARP], PyO))
-getattrofunc = P(FT([PyO, PyO], PyO))
-setattrfunc = P(FT([PyO, rffi.CCHARP, PyO], rffi.INT_real))
-setattrofunc = P(FT([PyO, PyO, PyO], rffi.INT_real))
-cmpfunc = P(FT([PyO, PyO], rffi.INT_real))
-reprfunc = P(FT([PyO], PyO))
-hashfunc = P(FT([PyO], lltype.Signed))
-richcmpfunc = P(FT([PyO, PyO, rffi.INT_real], PyO))
-getiterfunc = P(FT([PyO], PyO))
-iternextfunc = P(FT([PyO], PyO))
-descrgetfunc = P(FT([PyO, PyO, PyO], PyO))
-descrsetfunc = P(FT([PyO, PyO, PyO], rffi.INT_real))
-initproc = P(FT([PyO, PyO, PyO], rffi.INT_real))
-newfunc = P(FT([PyTypeObjectPtr, PyO, PyO], PyO))
-allocfunc = P(FT([PyTypeObjectPtr, Py_ssize_t], PyO))
+objobjproc = h.definitions['objobjproc']
+visitproc = h.definitions['visitproc']
+traverseproc = h.definitions['traverseproc']
-unaryfunc = P(FT([PyO], PyO))
-binaryfunc = P(FT([PyO, PyO], PyO))
-ternaryfunc = P(FT([PyO, PyO, PyO], PyO))
-inquiry = P(FT([PyO], rffi.INT_real))
-lenfunc = P(FT([PyO], Py_ssize_t))
-coercion = P(FT([PyOPtr, PyOPtr], rffi.INT_real))
-intargfunc = P(FT([PyO, rffi.INT_real], PyO))
-intintargfunc = P(FT([PyO, rffi.INT_real, rffi.INT], PyO))
-ssizeargfunc = P(FT([PyO, Py_ssize_t], PyO))
-ssizessizeargfunc = P(FT([PyO, Py_ssize_t, Py_ssize_t], PyO))
-intobjargproc = P(FT([PyO, rffi.INT_real, PyO], rffi.INT))
-intintobjargproc = P(FT([PyO, rffi.INT_real, rffi.INT, PyO], rffi.INT))
-ssizeobjargproc = P(FT([PyO, Py_ssize_t, PyO], rffi.INT_real))
-ssizessizeobjargproc = P(FT([PyO, Py_ssize_t, Py_ssize_t, PyO], rffi.INT_real))
-objobjargproc = P(FT([PyO, PyO, PyO], rffi.INT_real))
+getter = h.definitions['getter']
+setter = h.definitions['setter']
-objobjproc = P(FT([PyO, PyO], rffi.INT_real))
-visitproc = P(FT([PyO, rffi.VOIDP], rffi.INT_real))
-traverseproc = P(FT([PyO, visitproc, rffi.VOIDP], rffi.INT_real))
+#wrapperfunc = h.definitions['wrapperfunc']
+#wrapperfunc_kwds = h.definitions['wrapperfunc_kwds']
-getter = P(FT([PyO, rffi.VOIDP], PyO))
-setter = P(FT([PyO, PyO, rffi.VOIDP], rffi.INT_real))
+readbufferproc = h.definitions['readbufferproc']
+writebufferproc = h.definitions['writebufferproc']
+segcountproc = h.definitions['segcountproc']
+charbufferproc = h.definitions['charbufferproc']
+getbufferproc = h.definitions['getbufferproc']
+releasebufferproc = h.definitions['releasebufferproc']
-wrapperfunc = P(FT([PyO, PyO, rffi.VOIDP], PyO))
-wrapperfunc_kwds = P(FT([PyO, PyO, rffi.VOIDP, PyO], PyO))
-readbufferproc = P(FT([PyO, Py_ssize_t, rffi.VOIDPP], Py_ssize_t))
-writebufferproc = P(FT([PyO, Py_ssize_t, rffi.VOIDPP], Py_ssize_t))
-segcountproc = P(FT([PyO, Py_ssize_tP], Py_ssize_t))
-charbufferproc = P(FT([PyO, Py_ssize_t, rffi.CCHARPP], Py_ssize_t))
-getbufferproc = P(FT([PyO, Py_bufferP, rffi.INT_real], rffi.INT_real))
-releasebufferproc = rffi.VOIDP
-
-
-PyGetSetDef = cpython_struct("PyGetSetDef", (
- ("name", rffi.CCHARP),
- ("get", getter),
- ("set", setter),
- ("doc", rffi.CCHARP),
- ("closure", rffi.VOIDP),
-))
-
-PyNumberMethods = cpython_struct("PyNumberMethods", (
- ("nb_add", binaryfunc),
- ("nb_subtract", binaryfunc),
- ("nb_multiply", binaryfunc),
- ("nb_divide", binaryfunc),
- ("nb_remainder", binaryfunc),
- ("nb_divmod", binaryfunc),
- ("nb_power", ternaryfunc),
- ("nb_negative", unaryfunc),
- ("nb_positive", unaryfunc),
- ("nb_absolute", unaryfunc),
- ("nb_nonzero", inquiry),
- ("nb_invert", unaryfunc),
- ("nb_lshift", binaryfunc),
- ("nb_rshift", binaryfunc),
- ("nb_and", binaryfunc),
- ("nb_xor", binaryfunc),
- ("nb_or", binaryfunc),
- ("nb_coerce", coercion),
- ("nb_int", unaryfunc),
- ("nb_long", unaryfunc),
- ("nb_float", unaryfunc),
- ("nb_oct", unaryfunc),
- ("nb_hex", unaryfunc),
- ("nb_inplace_add", binaryfunc),
- ("nb_inplace_subtract", binaryfunc),
- ("nb_inplace_multiply", binaryfunc),
- ("nb_inplace_divide", binaryfunc),
- ("nb_inplace_remainder", binaryfunc),
- ("nb_inplace_power", ternaryfunc),
- ("nb_inplace_lshift", binaryfunc),
- ("nb_inplace_rshift", binaryfunc),
- ("nb_inplace_and", binaryfunc),
- ("nb_inplace_xor", binaryfunc),
- ("nb_inplace_or", binaryfunc),
-
- ("nb_floor_divide", binaryfunc),
- ("nb_true_divide", binaryfunc),
- ("nb_inplace_floor_divide", binaryfunc),
- ("nb_inplace_true_divide", binaryfunc),
-
- ("nb_index", unaryfunc),
-))
-
-PySequenceMethods = cpython_struct("PySequenceMethods", (
- ("sq_length", lenfunc),
- ("sq_concat", binaryfunc),
- ("sq_repeat", ssizeargfunc),
- ("sq_item", ssizeargfunc),
- ("sq_slice", ssizessizeargfunc),
- ("sq_ass_item", ssizeobjargproc),
- ("sq_ass_slice", ssizessizeobjargproc),
- ("sq_contains", objobjproc),
- ("sq_inplace_concat", binaryfunc),
- ("sq_inplace_repeat", ssizeargfunc),
-))
-
-PyMappingMethods = cpython_struct("PyMappingMethods", (
- ("mp_length", lenfunc),
- ("mp_subscript", binaryfunc),
- ("mp_ass_subscript", objobjargproc),
-))
-
-PyBufferProcs = cpython_struct("PyBufferProcs", (
- ("bf_getreadbuffer", readbufferproc),
- ("bf_getwritebuffer", writebufferproc),
- ("bf_getsegcount", segcountproc),
- ("bf_getcharbuffer", charbufferproc),
- ("bf_getbuffer", getbufferproc),
- ("bf_releasebuffer", releasebufferproc),
-))
-
-PyMemberDef = cpython_struct("PyMemberDef", (
- ("name", rffi.CCHARP),
- ("type", rffi.INT_real),
- ("offset", Py_ssize_t),
- ("flags", rffi.INT_real),
- ("doc", rffi.CCHARP),
-))
-
-# These fields are supported and used in different ways
-# The following comments mean:
-# #E essential, initialized for all PTOs
-# #S supported
-# #U unsupported
-# #N not yet implemented
-PyTypeObjectFields = []
-PyTypeObjectFields.extend(PyVarObjectFields)
-PyTypeObjectFields.extend([
- ("tp_name", rffi.CCHARP), #E For printing, in format "<module>.<name>"
- ("tp_basicsize", Py_ssize_t), #E For allocation
- ("tp_itemsize", Py_ssize_t), #E "
-
- # Methods to implement standard operations
- ("tp_dealloc", destructor), #E
- ("tp_print", printfunc), #U
- ("tp_getattr", getattrfunc), #U
- ("tp_setattr", setattrfunc), #U
- ("tp_compare", cmpfunc), #N
- ("tp_repr", reprfunc), #N
-
- # Method suites for standard classes
- ("tp_as_number", Ptr(PyNumberMethods)), #N
- ("tp_as_sequence", Ptr(PySequenceMethods)), #N
- ("tp_as_mapping", Ptr(PyMappingMethods)), #N
-
- # More standard operations (here for binary compatibility)
- ("tp_hash", hashfunc), #N
- ("tp_call", ternaryfunc), #N
- ("tp_str", reprfunc), #N
- ("tp_getattro", getattrofunc),#N
- ("tp_setattro", setattrofunc),#N
-
- # Functions to access object as input/output buffer
- ("tp_as_buffer", Ptr(PyBufferProcs)), #U
-
- # Flags to define presence of optional/expanded features
- ("tp_flags", lltype.Signed), #E
-
- ("tp_doc", rffi.CCHARP), #N Documentation string
-
- # Assigned meaning in release 2.0
- # call function for all accessible objects
- ("tp_traverse", traverseproc),#U
-
- # delete references to contained objects
- ("tp_clear", inquiry), #U
-
- # Assigned meaning in release 2.1
- # rich comparisons
- ("tp_richcompare", richcmpfunc), #N
-
- # weak reference enabler
- ("tp_weaklistoffset", Py_ssize_t), #U
-
- # Added in release 2.2
- # Iterators
- ("tp_iter", getiterfunc), #N
- ("tp_iternext", iternextfunc), #N
-
- # Attribute descriptor and subclassing stuff
- ("tp_methods", Ptr(PyMethodDef)), #S
- ("tp_members", Ptr(PyMemberDef)), #S
- ("tp_getset", Ptr(PyGetSetDef)), #S
- ("tp_base", Ptr(PyTypeObject)), #E
- ("tp_dict", PyObject), #U
- ("tp_descr_get", descrgetfunc), #N
- ("tp_descr_set", descrsetfunc), #N
- ("tp_dictoffset", Py_ssize_t), #U
- ("tp_init", initproc), #N
- ("tp_alloc", allocfunc), #N
- ("tp_new", newfunc), #S
- ("tp_free", freefunc), #E Low-level free-memory routine
- ("tp_is_gc", inquiry), #U For PyObject_IS_GC
- ("tp_bases", PyObject),#E
- ("tp_mro", PyObject), #U method resolution order
- ("tp_cache", PyObject),#S
- ("tp_subclasses", PyObject), #U
- ("tp_weaklist", PyObject), #U
- ("tp_del", destructor), #N
- ])
-
-
+PyGetSetDef = h.definitions['PyGetSetDef'].OF
+PyNumberMethods = h.definitions['PyNumberMethods'].OF
+PySequenceMethods = h.definitions['PySequenceMethods'].OF
+PyMappingMethods = h.definitions['PyMappingMethods'].OF
+PyBufferProcs = h.definitions['PyBufferProcs'].OF
+PyMemberDef = h.definitions['PyMemberDef'].OF
More information about the pypy-commit
mailing list