Author: Ronan Lamy <ronan.l...@gmail.com> Branch: rffi-parser Changeset: r89105:91730b67d4d6 Date: 2016-12-17 03:00 +0000 http://bitbucket.org/pypy/pypy/changeset/91730b67d4d6/
Log: Begin using parse_source() in pypy.module.cpyext.api 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 @@ -41,15 +41,10 @@ from rpython.rlib import rawrefcount from rpython.rlib import rthread from rpython.rlib.debug import fatalerror_notb +from pypy.module.cpyext.cparser import parse_source DEBUG_WRAPPER = True -# update these for other platforms -Py_ssize_t = lltype.Typedef(rffi.SSIZE_T, 'Py_ssize_t') -Py_ssize_tP = rffi.CArrayPtr(Py_ssize_t) -size_t = rffi.ULONG -ADDR = lltype.Signed - pypydir = py.path.local(pypydir) include_dir = pypydir / 'module' / 'cpyext' / 'include' source_dir = pypydir / 'module' / 'cpyext' / 'src' @@ -119,6 +114,9 @@ return is_valid_fd(c_fileno(fp)) pypy_decl = 'pypy_decl.h' +udir.join(pypy_decl).write("/* Will be filled later */\n") +udir.join('pypy_structmember_decl.h').write("/* Will be filled later */\n") +udir.join('pypy_macros.h').write("/* Will be filled later */\n") constant_names = """ Py_TPFLAGS_READY Py_TPFLAGS_READYING Py_TPFLAGS_HAVE_GETCHARBUFFER @@ -129,9 +127,6 @@ """.split() for name in constant_names: setattr(CConfig_constants, name, rffi_platform.ConstantInteger(name)) -udir.join(pypy_decl).write("/* Will be filled later */\n") -udir.join('pypy_structmember_decl.h').write("/* Will be filled later */\n") -udir.join('pypy_macros.h').write("/* Will be filled later */\n") globals().update(rffi_platform.configure(CConfig_constants)) def _copy_header_files(headers, dstdir): @@ -607,6 +602,14 @@ % (cpyname, )) build_exported_objects() +# update these for other platforms +h = parse_source("typedef ssize_t Py_ssize_t;") + +Py_ssize_t = h.definitions['Py_ssize_t'] +Py_ssize_tP = rffi.CArrayPtr(Py_ssize_t) +size_t = rffi.ULONG +ADDR = lltype.Signed + # Note: as a special case, "PyObject" is the pointer type in RPython, # corresponding to "PyObject *" in C. We do that only for PyObject. # For example, "PyTypeObject" is the struct type even in RPython. 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 @@ -2,7 +2,7 @@ from cffi.commontypes import COMMON_TYPES, resolve_common_type import pycparser import weakref, re -from rpython.rtyper.lltypesystem import rffi +from rpython.rtyper.lltypesystem import rffi, lltype from rpython.rtyper.tool import rfficache _r_comment = re.compile(r"/\*.*?\*/|//([^\n\\]|\\.)*?$", @@ -682,17 +682,17 @@ if isinstance(tp, DelayedStruct): tp = tp.realize(name) self.structs[obj] = tp - self.definitions[name] = tp + self.definitions[name] = lltype.Typedef(tp, name) def add_macro(self, name, value): assert name not in self.macros self.macros[name] = value def convert_type(self, obj): - from pypy.module.cpyext.api import cpython_struct if isinstance(obj, model.PrimitiveType): return cname_to_lltype(obj.name) elif isinstance(obj, model.StructType): + from pypy.module.cpyext.api import cpython_struct if obj in self.structs: return self.structs[obj] fields = zip( _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit