@@ -23,12 +23,9 @@ _PyLazyImport_New(PyObject *builtins, PyObject *from, PyObject *attr)
2323 if (m == NULL ) {
2424 return NULL ;
2525 }
26- Py_XINCREF (builtins );
27- m -> lz_builtins = builtins ;
28- Py_INCREF (from );
29- m -> lz_from = from ;
30- Py_XINCREF (attr );
31- m -> lz_attr = attr ;
26+ m -> lz_builtins = Py_XNewRef (builtins );
27+ m -> lz_from = Py_NewRef (from );
28+ m -> lz_attr = Py_XNewRef (attr );
3229
3330 /* Capture frame information for the original import location */
3431 m -> lz_code = NULL ;
@@ -44,18 +41,35 @@ _PyLazyImport_New(PyObject *builtins, PyObject *from, PyObject *attr)
4441 }
4542 }
4643
47- PyObject_GC_Track (m );
44+ _PyObject_GC_TRACK (m );
4845 return (PyObject * )m ;
4946}
5047
48+ static int
49+ lazy_import_traverse (PyLazyImportObject * m , visitproc visit , void * arg )
50+ {
51+ Py_VISIT (m -> lz_builtins );
52+ Py_VISIT (m -> lz_from );
53+ Py_VISIT (m -> lz_attr );
54+ Py_VISIT (m -> lz_code );
55+ return 0 ;
56+ }
57+
58+ static int
59+ lazy_import_clear (PyLazyImportObject * m )
60+ {
61+ Py_CLEAR (m -> lz_builtins );
62+ Py_CLEAR (m -> lz_from );
63+ Py_CLEAR (m -> lz_attr );
64+ Py_CLEAR (m -> lz_code );
65+ return 0 ;
66+ }
67+
5168static void
5269lazy_import_dealloc (PyLazyImportObject * m )
5370{
54- PyObject_GC_UnTrack (m );
55- Py_XDECREF (m -> lz_builtins );
56- Py_XDECREF (m -> lz_from );
57- Py_XDECREF (m -> lz_attr );
58- Py_XDECREF (m -> lz_code );
71+ _PyObject_GC_UNTRACK (m );
72+ lazy_import_clear (m );
5973 Py_TYPE (m )-> tp_free ((PyObject * )m );
6074}
6175
@@ -85,26 +99,6 @@ lazy_import_repr(PyLazyImportObject *m)
8599 return res ;
86100}
87101
88- static int
89- lazy_import_traverse (PyLazyImportObject * m , visitproc visit , void * arg )
90- {
91- Py_VISIT (m -> lz_builtins );
92- Py_VISIT (m -> lz_from );
93- Py_VISIT (m -> lz_attr );
94- Py_VISIT (m -> lz_code );
95- return 0 ;
96- }
97-
98- static int
99- lazy_import_clear (PyLazyImportObject * m )
100- {
101- Py_CLEAR (m -> lz_builtins );
102- Py_CLEAR (m -> lz_from );
103- Py_CLEAR (m -> lz_attr );
104- Py_CLEAR (m -> lz_code );
105- return 0 ;
106- }
107-
108102static PyObject *
109103lazy_import_new (PyTypeObject * type , PyObject * args , PyObject * kwds )
110104{
0 commit comments