Author: Ronan Lamy <ronan.l...@gmail.com>
Branch: 
Changeset: r89792:75fb54ed4989
Date: 2017-01-26 17:46 +0000
http://bitbucket.org/pypy/pypy/changeset/75fb54ed4989/

Log:    Use rffi_platform.configure_entries() in cparser

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
@@ -699,7 +699,7 @@
         self.headers = headers if headers is not None else ['sys/types.h']
         self.parsed_headers = []
         self.sources = []
-        self._Config = type('Config', (object,), {})
+        self._config_entries = []
         self._TYPES = {}
         self.includes = []
         self.struct_typedefs = {}
@@ -759,8 +759,9 @@
     def realize_struct(self, struct):
         type_name = struct.get_type_name()
         configname = type_name.replace(' ', '__')
-        setattr(self._Config, configname,
-            rffi_platform.Struct(type_name, struct.fields))
+        assert not any(x[0] == configname for x in self._config_entries)
+        self._config_entries.append(
+            (configname, rffi_platform.Struct(type_name, struct.fields)))
         self._TYPES[configname] = struct.TYPE
         return struct.TYPE
 
@@ -795,13 +796,17 @@
             elif name.startswith('macro '):
                 name = name[6:]
                 self.add_macro(name, obj)
-        self._Config._compilation_info_ = self.build_eci()
-        for name, TYPE in rffi_platform.configure(self._Config).iteritems():
+        if not self._config_entries:
+            return
+        eci = self.build_eci()
+        result = rffi_platform.configure_entries(self._config_entries, eci)
+        for name, TYPE in result.iteritems():
             # hack: prevent the source from being pasted into common_header.h
             del TYPE._hints['eci']
             if name in self._TYPES:
                 self._TYPES[name].become(TYPE)
                 del self._TYPES[name]
+        self._config_entries[:] = []
 
     def convert_type(self, obj, quals=0):
         if isinstance(obj, model.DefinedType):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to