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