[pypy-commit] pypy rffi-parser: Convert primitive types to rffi
rlamy
pypy.commits at gmail.com
Thu Dec 15 20:11:59 EST 2016
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: rffi-parser
Changeset: r89083:b4125bc7dfba
Date: 2016-12-16 01:08 +0000
http://bitbucket.org/pypy/pypy/changeset/b4125bc7dfba/
Log: Convert primitive types to rffi
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,6 +2,8 @@
from cffi.commontypes import COMMON_TYPES, resolve_common_type
import pycparser
import weakref, re
+from rpython.rtyper.lltypesystem import rffi
+from rpython.rtyper.tool import rfficache
_r_comment = re.compile(r"/\*.*?\*/|//([^\n\\]|\\.)*?$",
re.DOTALL | re.MULTILINE)
@@ -639,3 +641,22 @@
self._declare(name, tp, included=True, quals=quals)
for k, v in other._int_constants.items():
self._add_constants(k, v)
+
+CNAME_TO_LLTYPE = {
+ 'char': rffi.CHAR,
+ 'double': rffi.DOUBLE, 'long double': rffi.LONGDOUBLE,
+ 'float': rffi.FLOAT}
+
+def add_inttypes():
+ for name in rffi.TYPES:
+ if name.startswith('unsigned'):
+ rname = 'u' + name[9:]
+ else:
+ rname = name
+ rname = rname.replace(' ', '').upper()
+ CNAME_TO_LLTYPE[name] = rfficache.platform.types[rname]
+
+add_inttypes()
+
+def cname_to_lltype(name):
+ return CNAME_TO_LLTYPE[name]
diff --git a/pypy/module/cpyext/test/test_cparser.py b/pypy/module/cpyext/test/test_cparser.py
--- a/pypy/module/cpyext/test/test_cparser.py
+++ b/pypy/module/cpyext/test/test_cparser.py
@@ -1,4 +1,5 @@
-from pypy.module.cpyext.cparser import Parser
+from rpython.rtyper.lltypesystem import rffi
+from pypy.module.cpyext.cparser import Parser, cname_to_lltype
def test_simple():
decl = """
@@ -7,9 +8,11 @@
typedef struct {
Py_ssize_t ob_refcnt;
Py_ssize_t ob_pypy_link;
- struct _typeobject *ob_type;
double ob_fval;
} PyFloatObject;
"""
ctx = Parser()
ctx.parse(decl)
+ obj = ctx._declarations['typedef PyFloatObject'][0]
+ assert [cname_to_lltype(tp.name) for tp in obj.fldtypes] == [
+ rffi.INTPTR_T, rffi.INTPTR_T, rffi.DOUBLE]
More information about the pypy-commit
mailing list