Commit 5941a5b7 authored by Robert Bradshaw's avatar Robert Bradshaw

Fix cpython.array declaration order.

parent 2fdc8d3b
......@@ -479,6 +479,13 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
typecode = globalstate['type_declarations']
typecode.putln("")
typecode.putln("/*--- Type declarations ---*/")
# This is to work around the fact that array.h isn't part of the C-API,
# but we need to declare it earlier than utility code.
if 'cpython.array' in [m.qualified_name for m in modules]:
typecode.putln('#ifndef _ARRAYARRAY_H')
typecode.putln('struct arrayobject;')
typecode.putln('typedef struct arrayobject arrayobject;')
typecode.putln('#endif')
vtab_list, vtabslot_list = self.sort_type_hierarchy(modules, env)
self.generate_type_definitions(
env, modules, vtab_list, vtabslot_list, typecode)
......
......@@ -13,7 +13,11 @@
#ifndef _ARRAYARRAY_H
#define _ARRAYARRAY_H
struct arrayobject; /* Forward */
// These two forward declarations are explicitly handled in the type
// declaration code, as including them here is too late for cython-defined
// types to use them.
// struct arrayobject;
// typedef struct arrayobject arrayobject;
// All possible arraydescr values are defined in the vector "descriptors"
// below. That's defined later because the appropriate get and set
......@@ -29,7 +33,7 @@ typedef struct arraydescr {
} arraydescr;
typedef struct arrayobject {
struct arrayobject {
PyObject_HEAD
Py_ssize_t ob_size;
union {
......@@ -54,8 +58,7 @@ typedef struct arrayobject {
#if PY_VERSION_HEX >= 0x03000000
int ob_exports; /* Number of exported buffers */
#endif
} arrayobject;
};
#ifndef NO_NEWARRAY_INLINE
// fast creation of a new array
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment