@@ -458,6 +458,7 @@ inline PyObject *get_annotations(PyObject *clz)
458458 // from annotationlib import get_annotations
459459 PyObject *annotationlib = PyImport_ImportModule (" annotationlib" );
460460 get_annotations = PyObject_GetAttrString (annotationlib, " get_annotations" );
461+ Py_INCREF (get_annotations);
461462 Py_DECREF (annotationlib);
462463 }
463464 return PyObject_CallFunctionObjArgs (get_annotations, clz, NULL );
@@ -519,21 +520,20 @@ inline PyObject *parse_class(PyObject *kwargs, TypeTreeNodeObject *node, TypeTre
519520 extras = PyDict_New ();
520521 for (int i = 0 ; i < PyList_GET_SIZE (node->m_Children ); i++)
521522 {
522- TypeTreeNodeObject *child = (TypeTreeNodeObject *)PyList_GET_ITEM (node->m_Children , i);
523+ TypeTreeNodeObject *child = (TypeTreeNodeObject *)PyList_GET_ITEM (node->m_Children , i); // - borrowed ref +/- 0
523524 if (PyDict_Contains (annotations, child->_clean_name ) == 1 )
524525 {
525526 continue ;
526527 }
527- PyObject *extra_value = PyDict_GetItem (kwargs, child->_clean_name ); // +1
528+ PyObject *extra_value = PyDict_GetItem (kwargs, child->_clean_name ); // - borrowed ref +/- 0
528529 PyDict_SetItem (extras, child->_clean_name , extra_value); // +1
529530 PyDict_DelItem (kwargs, child->_clean_name ); // -1
530- // Py_DECREF(extra_value); // -1
531531 }
532532
533533 if (PyDict_Size (extras) == 0 )
534534 {
535- Py_DECREF (clz);
536- clz = PyObject_GetAttrString (config->classes , " UnknownObject" );
535+ Py_DECREF (clz); // 1->0
536+ clz = PyObject_GetAttrString (config->classes , " UnknownObject" ); // 0->1
537537 PyDict_SetItemString (kwargs, " __node__" , node->m_Type );
538538 }
539539
@@ -754,6 +754,7 @@ PyObject *read_typetree_value(ReaderT *reader, TypeTreeNodeObject *node, TypeTre
754754 }
755755 else if (ref_node == (TypeTreeNodeObject *)Py_None)
756756 {
757+ Py_DECREF (ref_node);
757758 continue ;
758759 }
759760 child_value = read_typetree_value<swap>(reader, ref_node, config);
@@ -763,6 +764,7 @@ PyObject *read_typetree_value(ReaderT *reader, TypeTreeNodeObject *node, TypeTre
763764 {
764765 child_value = read_typetree_value<swap>(reader, child, config);
765766 }
767+
766768 if (!child_value)
767769 {
768770 Py_DECREF (value);
0 commit comments