1# mode: run 2# tag: cyclicgc 3 4 5cimport cython 6 7@cython.test_fail_if_path_exists('//CClassDefNode[@scope.has_cyclic_pyobject_attrs = True]') 8@cython.test_assert_path_exists('//CClassDefNode', 9 '//CClassDefNode[@scope]', 10 '//CClassDefNode[@scope.has_cyclic_pyobject_attrs = False]') 11cdef class ExtTypeNoGC: 12 """ 13 >>> obj = ExtTypeNoGC() 14 >>> obj = ExtTypeNoGC() 15 >>> obj = ExtTypeNoGC() 16 >>> obj = ExtTypeNoGC() 17 >>> obj = ExtTypeNoGC() 18 >>> obj = ExtTypeNoGC() 19 """ 20 21 22@cython.test_fail_if_path_exists('//CClassDefNode[@scope.has_cyclic_pyobject_attrs = True]') 23@cython.test_assert_path_exists('//CClassDefNode', 24 '//CClassDefNode[@scope]', 25 '//CClassDefNode[@scope.has_cyclic_pyobject_attrs = False]') 26@cython.final 27cdef class ExtTypeFinalNoGC: 28 """ 29 >>> obj = ExtTypeFinalNoGC() 30 >>> obj = ExtTypeFinalNoGC() 31 >>> obj = ExtTypeFinalNoGC() 32 >>> obj = ExtTypeFinalNoGC() 33 >>> obj = ExtTypeFinalNoGC() 34 >>> obj = ExtTypeFinalNoGC() 35 """ 36 cdef bytes s 37 38 39@cython.test_fail_if_path_exists('//CClassDefNode[@scope.has_cyclic_pyobject_attrs = True]') 40@cython.test_assert_path_exists('//CClassDefNode', 41 '//CClassDefNode[@scope]', 42 '//CClassDefNode[@scope.has_cyclic_pyobject_attrs = False]') 43cdef class ExtSubTypeNoGC(ExtTypeNoGC): 44 """ 45 >>> obj = ExtSubTypeNoGC() 46 >>> obj = ExtSubTypeNoGC() 47 >>> obj = ExtSubTypeNoGC() 48 >>> obj = ExtSubTypeNoGC() 49 >>> obj = ExtSubTypeNoGC() 50 >>> obj = ExtSubTypeNoGC() 51 """ 52 53 54@cython.test_fail_if_path_exists('//CClassDefNode[@scope.has_cyclic_pyobject_attrs = True]') 55@cython.test_assert_path_exists('//CClassDefNode', 56 '//CClassDefNode[@scope]', 57 '//CClassDefNode[@scope.has_cyclic_pyobject_attrs = False]') 58cdef class ExtTypePyArgsNoGC: 59 """ 60 >>> obj = ExtTypePyArgsNoGC() 61 >>> obj = ExtTypePyArgsNoGC() 62 >>> obj = ExtTypePyArgsNoGC() 63 >>> obj = ExtTypePyArgsNoGC() 64 >>> obj = ExtTypePyArgsNoGC() 65 >>> obj = ExtTypePyArgsNoGC() 66 """ 67 cdef bytes b 68 cdef str s 69 cdef unicode u 70# eventually, this should work, too: 71# cdef ExtTypeFinalNoGC x 72 73 74@cython.test_fail_if_path_exists('//CClassDefNode[@scope.has_cyclic_pyobject_attrs = True]') 75@cython.test_assert_path_exists('//CClassDefNode', 76 '//CClassDefNode[@scope]', 77 '//CClassDefNode[@scope.has_cyclic_pyobject_attrs = False]') 78cdef class ExtSubTypePyArgsNoGC(ExtTypePyArgsNoGC): 79 """ 80 >>> obj = ExtSubTypePyArgsNoGC() 81 >>> obj = ExtSubTypePyArgsNoGC() 82 >>> obj = ExtSubTypePyArgsNoGC() 83 >>> obj = ExtSubTypePyArgsNoGC() 84 >>> obj = ExtSubTypePyArgsNoGC() 85 >>> obj = ExtSubTypePyArgsNoGC() 86 """ 87 88 89@cython.test_fail_if_path_exists('//CClassDefNode[@scope.has_cyclic_pyobject_attrs = False]') 90@cython.test_assert_path_exists('//CClassDefNode', 91 '//CClassDefNode[@scope]', 92 '//CClassDefNode[@scope.has_cyclic_pyobject_attrs = True]') 93cdef class ExtTypePyArgsWithGC: 94 """ 95 >>> obj = ExtTypePyArgsWithGC() 96 >>> obj = ExtTypePyArgsWithGC() 97 >>> obj = ExtTypePyArgsWithGC() 98 >>> obj = ExtTypePyArgsWithGC() 99 >>> obj = ExtTypePyArgsWithGC() 100 >>> obj = ExtTypePyArgsWithGC() 101 >>> obj.create_cycle() 102 """ 103 cdef bytes b 104 cdef str s 105 cdef unicode u 106 cdef list l 107 108 def create_cycle(self): 109 self.l = [self] 110 111 112@cython.test_fail_if_path_exists('//CClassDefNode[@scope.has_cyclic_pyobject_attrs = True]') 113@cython.test_assert_path_exists('//CClassDefNode', 114 '//CClassDefNode[@scope]', 115 '//CClassDefNode[@scope.has_cyclic_pyobject_attrs = False]') 116cdef class ExtSubTypePyArgsWithGC(ExtTypePyArgsWithGC): 117 """ 118 >>> obj = ExtSubTypePyArgsWithGC() 119 >>> obj = ExtSubTypePyArgsWithGC() 120 >>> obj = ExtSubTypePyArgsWithGC() 121 >>> obj = ExtSubTypePyArgsWithGC() 122 >>> obj = ExtSubTypePyArgsWithGC() 123 >>> obj = ExtSubTypePyArgsWithGC() 124 >>> obj.create_cycle() 125 """ 126 127 128@cython.test_fail_if_path_exists('//CClassDefNode[@scope.has_cyclic_pyobject_attrs = True]') 129@cython.test_assert_path_exists('//CClassDefNode', 130 '//CClassDefNode[@scope]', 131 '//CClassDefNode[@scope.has_cyclic_pyobject_attrs = False]') 132cdef class ExtSubTypePlusPyArgsWithGC(ExtSubTypePyArgsWithGC): 133 """ 134 >>> obj = ExtSubTypePlusPyArgsWithGC() 135 >>> obj = ExtSubTypePlusPyArgsWithGC() 136 >>> obj = ExtSubTypePlusPyArgsWithGC() 137 >>> obj = ExtSubTypePlusPyArgsWithGC() 138 >>> obj = ExtSubTypePlusPyArgsWithGC() 139 >>> obj = ExtSubTypePlusPyArgsWithGC() 140 >>> obj.create_cycle() 141 """ 142 cdef bytes b2 143 cdef unicode u2 144 145 146@cython.test_fail_if_path_exists('//CClassDefNode[@scope.has_cyclic_pyobject_attrs = False]') 147@cython.test_assert_path_exists('//CClassDefNode', 148 '//CClassDefNode[@scope]', 149 '//CClassDefNode[@scope.has_cyclic_pyobject_attrs = True]') 150cdef class ExtSubTypePlusGCPyArgsWithGC(ExtSubTypePlusPyArgsWithGC): 151 """ 152 >>> obj = ExtSubTypePlusGCPyArgsWithGC() 153 >>> obj = ExtSubTypePlusGCPyArgsWithGC() 154 >>> obj = ExtSubTypePlusGCPyArgsWithGC() 155 >>> obj = ExtSubTypePlusGCPyArgsWithGC() 156 >>> obj = ExtSubTypePlusGCPyArgsWithGC() 157 >>> obj = ExtSubTypePlusGCPyArgsWithGC() 158 >>> obj.create_cycle() 159 """ 160 cdef tuple t 161