Author: Ronan Lamy <[email protected]>
Branch: rffi-parser
Changeset: r89084:9d38728d62cc
Date: 2016-12-16 02:29 +0000
http://bitbucket.org/pypy/pypy/changeset/9d38728d62cc/

Log:    Start defining the parsing API

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
@@ -660,3 +660,24 @@
 
 def cname_to_lltype(name):
     return CNAME_TO_LLTYPE[name]
+
+class ParsedSource(object):
+    def __init__(self, source, definitions):
+        self.source = source
+        self.definitions = definitions
+
+
+def parse_source(source):
+    ctx = Parser()
+    ctx.parse(source)
+    defs = {}
+    for name, (obj, quals) in ctx._declarations.iteritems():
+        if not name.startswith('typedef '):
+            continue
+        name = name[8:]
+        if isinstance(obj, model.PrimitiveType):
+            assert obj.name not in defs
+            defs[name] = cname_to_lltype(obj.name)
+        else:
+            pass
+    return ParsedSource(source, defs)
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,9 +1,9 @@
 from rpython.rtyper.lltypesystem import rffi
-from pypy.module.cpyext.cparser import Parser, cname_to_lltype
+from pypy.module.cpyext.cparser import Parser, cname_to_lltype, parse_source
 
-def test_simple():
+def test_stuff():
     decl = """
-    typedef intptr_t Py_ssize_t;
+    typedef ssize_t Py_ssize_t;
 
     typedef struct {
         Py_ssize_t ob_refcnt;
@@ -15,4 +15,9 @@
     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]
+        rffi.SSIZE_T, rffi.SSIZE_T, rffi.DOUBLE]
+
+def test_simple():
+    decl = "typedef ssize_t Py_ssize_t;"
+    hdr = parse_source(decl)
+    assert hdr.definitions == {'Py_ssize_t': rffi.SSIZE_T}
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to