diff options
-rw-r--r-- | Cython/Compiler/ModuleNode.py | 2 | ||||
-rw-r--r-- | tests/run/cdef_class_order.pyx | 24 |
2 files changed, 24 insertions, 2 deletions
diff --git a/Cython/Compiler/ModuleNode.py b/Cython/Compiler/ModuleNode.py index 29e810a73..cba8effef 100644 --- a/Cython/Compiler/ModuleNode.py +++ b/Cython/Compiler/ModuleNode.py @@ -651,7 +651,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): dfs(type_dict[v]) result.append(u) - for key in type_order: + for key in reversed(type_order): dfs(type_dict[key]) result.reverse() diff --git a/tests/run/cdef_class_order.pyx b/tests/run/cdef_class_order.pyx index 42f0b4248..dad892d5f 100644 --- a/tests/run/cdef_class_order.pyx +++ b/tests/run/cdef_class_order.pyx @@ -5,11 +5,33 @@ cdef class B cdef class A(object): cdef list dealloc1 +cdef class Y(X): pass +cdef class X(C): pass +cdef class C: pass + cdef class B(A): cdef list dealloc2 +cdef class Z(A): pass + + def test(): """ >>> test() + A + B + C + X + Y + Z """ - A(), B() + A(), B(), C(), X(), Y(), Z() + import sys + py_version = sys.version_info[:2] + if py_version >= (3, 7): # built-in dict is insertion-ordered + global_values = list(globals().values()) + else: + global_values = [A, B, C, X, Y, Z] + for value in global_values: + if isinstance(value, type): + print(value.__name__) |