Author: Ronan Lamy <[email protected]>
Branch: rffi-parser-2
Changeset: r89600:3331e359a75e
Date: 2017-01-16 02:44 +0000
http://bitbucket.org/pypy/pypy/changeset/3331e359a75e/

Log:    Always use configure_now=True in parse_source() and kill the option

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
@@ -672,7 +672,7 @@
 
 object_cdef = (parse_dir / 'cpyext_object.h').read()
 object_h = parse_source(object_cdef,
-    headers=['sys/types.h', 'stdarg.h', 'stdio.h'], configure_now=True)
+    headers=['sys/types.h', 'stdarg.h', 'stdio.h'])
 
 Py_ssize_t = object_h.gettype('Py_ssize_t')
 Py_ssize_tP = object_h.gettype('Py_ssize_t *')
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
@@ -703,13 +703,13 @@
         self.structs.update(other.structs)
         self.includes.append(other)
 
-    def add_typedef(self, name, obj, quals, configure_now=False):
+    def add_typedef(self, name, obj, quals):
         assert name not in self.definitions
         tp = self.convert_type(obj, quals)
         if isinstance(tp, DelayedStruct):
             if tp.type_name is None:
                 tp.type_name = name
-            tp = self.realize_struct(tp, configure_now=configure_now)
+            tp = self.realize_struct(tp)
         self.definitions[name] = tp
 
     def add_macro(self, name, value):
@@ -734,16 +734,12 @@
             tp = tp.TYPE
         return tp
 
-    def realize_struct(self, struct, configure_now=False):
-        from pypy.module.cpyext.api import cpython_struct
+    def realize_struct(self, struct):
         type_name = struct.get_type_name()
         configname = type_name.replace(' ', '__')
-        if configure_now:
-            setattr(self._Config, configname,
-                rffi_platform.Struct(type_name, struct.fields))
-            self._TYPES[configname] = struct.TYPE
-        else:
-            cpython_struct(type_name, struct.fields, forward=struct.TYPE)
+        setattr(self._Config, configname,
+            rffi_platform.Struct(type_name, struct.fields))
+        self._TYPES[configname] = struct.TYPE
         return struct.TYPE
 
     def build_eci(self):
@@ -756,13 +752,13 @@
         return ExternalCompilationInfo(
             post_include_bits=all_sources, includes=all_headers)
 
-    def configure_types(self, configure_now=False):
+    def configure_types(self):
         for name, (obj, quals) in self.ctx._declarations.iteritems():
             if obj in self.ctx._included_declarations:
                 continue
             if name.startswith('typedef '):
                 name = name[8:]
-                self.add_typedef(name, obj, quals, configure_now=configure_now)
+                self.add_typedef(name, obj, quals)
             elif name.startswith('macro '):
                 name = name[6:]
                 self.add_macro(name, obj)
@@ -825,12 +821,12 @@
         return decl.name, FUNCP.TO
 
 
-def parse_source(source, includes=None, headers=None, configure_now=False):
+def parse_source(source, includes=None, headers=None, configure_now=True):
     ctx = Parser()
     src = ParsedSource(source, ctx, headers=headers)
     if includes is not None:
         for header in includes:
             src.include(header)
     ctx.parse(source)
-    src.configure_types(configure_now=configure_now)
+    src.configure_types()
     return src
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
@@ -11,7 +11,7 @@
         double ob_fval;
     } TestFloatObject;
     """
-    res = parse_source(decl, configure_now=True)
+    res = parse_source(decl)
     TestFloatObject = res.definitions['TestFloatObject']
     assert isinstance(TestFloatObject, lltype.Struct)
     assert TestFloatObject.c_ob_refcnt == rffi.SSIZE_T
@@ -59,10 +59,10 @@
         Type *type;
     } Object;
     """
-    hdr1 = parse_source(cdef1, configure_now=True)
+    hdr1 = parse_source(cdef1)
     Type = hdr1.definitions['Type']
     assert isinstance(Type, lltype.Struct)
-    hdr2 = parse_source(cdef2, includes=[hdr1], configure_now=True)
+    hdr2 = parse_source(cdef2, includes=[hdr1])
     assert 'Type' not in hdr2.definitions
     Object = hdr2.definitions['Object']
     assert Object.c_type.TO is Type
@@ -85,7 +85,7 @@
     """
     foo_h = parse_source(cdef)
     Object = foo_h.gettype('Object')
-    assert isinstance(Object, lltype.ForwardReference)
+    assert isinstance(Object, lltype.Struct)
 
 def test_recursive():
     cdef = """
@@ -106,7 +106,7 @@
         Object *obj;
     } Type;
     """
-    foo_h = parse_source(cdef, configure_now=True)
+    foo_h = parse_source(cdef)
     Object = foo_h.definitions['Object']
     assert isinstance(Object, lltype.Struct)
     hash(Object)
@@ -117,7 +117,7 @@
         const char * const foo;
     } bar;
     """
-    hdr = parse_source(cdef, configure_now=True)
+    hdr = parse_source(cdef)
     assert hdr.definitions['bar'].c_foo == rffi.CONST_CCHARP != rffi.CCHARP
 
 def test_gettype():
@@ -133,7 +133,7 @@
         double ob_fval;
     } TestFloatObject;
     """
-    res = parse_source(decl, configure_now=True)
+    res = parse_source(decl)
     assert res.gettype('Py_ssize_t') == rffi.SSIZE_T
     assert res.gettype('TestFloatObject *').TO.c_ob_refcnt == rffi.SSIZE_T
 
@@ -152,7 +152,7 @@
 
     typedef TestFloatObject* (*func_t)(int, int);
     """
-    res = parse_source(decl, configure_now=True)
+    res = parse_source(decl)
     name, FUNC = res.parse_func("func_t some_func(TestFloatObject*)")
     assert name == 'some_func'
     assert FUNC.RESULT == res.gettype('func_t')
diff --git a/pypy/module/cpyext/typeobject.py b/pypy/module/cpyext/typeobject.py
--- a/pypy/module/cpyext/typeobject.py
+++ b/pypy/module/cpyext/typeobject.py
@@ -42,7 +42,7 @@
 PyType_Check, PyType_CheckExact = build_type_checkers("Type", "w_type")
 
 cdef = (parse_dir / 'cpyext_typeobject.h').read()
-typeobject_h = parse_source(cdef, includes=[object_h], configure_now=True)
+typeobject_h = parse_source(cdef, includes=[object_h])
 PyHeapTypeObjectStruct = typeobject_h.gettype('PyHeapTypeObject')
 PyHeapTypeObject = typeobject_h.gettype('PyHeapTypeObject *')
 
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to