@@ -543,8 +543,9 @@ inline PyObject *parse_class(PyObject *kwargs, TypeTreeNodeObject *node, TypeTre
543543 pos = 0 ;
544544 while (PyDict_Next (extras, &pos, &key, &value))
545545 {
546- PyObject_SetItem (instance, key, value);
546+ PyObject_GenericSetAttr (instance, key, value);
547547 }
548+ goto PARSE_CLASS_CLEANUP;
548549 }
549550 PyErr_Clear ();
550551
@@ -556,7 +557,7 @@ inline PyObject *parse_class(PyObject *kwargs, TypeTreeNodeObject *node, TypeTre
556557 pos = 0 ;
557558 while (PyDict_Next (extras, &pos, &key, &value))
558559 {
559- PyObject_SetItem (kwargs, key, value);
560+ PyDict_SetItem (kwargs, key, value);
560561 }
561562 instance = PyObject_Call (clz, args, kwargs);
562563
@@ -778,14 +779,14 @@ PyObject *read_typetree_value(ReaderT *reader, TypeTreeNodeObject *node, TypeTre
778779 }
779780 if (!config->as_dict )
780781 {
781- PyObject *clz = PyObject_GetAttrString (config->classes , " Object " );
782+ PyObject *clz = PyObject_GetAttrString (config->classes , " UnknownObject " );
782783 if (clz == NULL )
783784 {
784785 PyErr_SetString (PyExc_ValueError, " Failed to get class" );
785786 Py_DECREF (value);
786787 return NULL ;
787788 }
788- PyObject *args = PyTuple_New ( 0 );
789+ PyObject *args = PyTuple_Pack ( 1 , (PyObject *)node );
789790 PyObject *instance = PyObject_Call (clz, args, value);
790791 Py_DECREF (clz);
791792 Py_DECREF (args);
@@ -943,7 +944,7 @@ PyObject *read_typetree(PyObject *self, PyObject *args, PyObject *kwargs)
943944 char endian;
944945 bool swap;
945946
946- int parse_result = PyArg_ParseTupleAndKeywords (args, kwargs, " y*OC|pOO" , (char **)kwlist, &view, &node, &endian, &as_dict, &config.assetfile , &config.classes );
947+ if (! PyArg_ParseTupleAndKeywords (args, kwargs, " y*OC|pOO" , (char **)kwlist, &view, &node, &endian, &as_dict, &config.assetfile , &config.classes ))
947948 {
948949 goto READ_TYPETREE_CLEANUP;
949950 }
@@ -1018,7 +1019,6 @@ PyObject *read_typetree(PyObject *self, PyObject *args, PyObject *kwargs)
10181019 PyBuffer_Release (&view);
10191020 Py_DECREF (config.assetfile );
10201021 Py_DECREF (config.classes );
1021-
10221022 return value;
10231023}
10241024
0 commit comments