void freeHiddenClasses(HiddenClass* hcls) { for (const auto& p : hcls->children) { freeHiddenClasses(p.second); } rt_free(hcls); }
void teardownRuntime() { // Things start to become very precarious after this point, as the basic classes stop to work. // TODO it's probably a waste of time to tear these down in non-debugging mode IN_SHUTDOWN = true; if (VERBOSITY("runtime") >= 1) printf("In teardownRuntime\n"); teardownCAPI(); teardownList(); teardownInt(); teardownFloat(); teardownStr(); teardownBool(); teardownDict(); teardownSet(); teardownTuple(); teardownFile(); /* // clear all the attributes on the base classes before freeing the classes themselves, // since we will run into problem if we free a class but there is an object somewhere // else that refers to it. clearAttrs(bool_cls); clearAttrs(int_cls); clearAttrs(float_cls); clearAttrs(none_cls); clearAttrs(function_cls); clearAttrs(instancemethod_cls); clearAttrs(str_cls); clearAttrs(list_cls); clearAttrs(slice_cls); clearAttrs(type_cls); clearAttrs(module_cls); clearAttrs(dict_cls); clearAttrs(tuple_cls); clearAttrs(file_cls); decref(bool_cls); decref(int_cls); decref(float_cls); decref(function_cls); decref(instancemethod_cls); decref(str_cls); decref(list_cls); decref(slice_cls); decref(module_cls); decref(dict_cls); decref(tuple_cls); decref(file_cls); ASSERT(None->nrefs == 1, "%ld", None->nrefs); decref(None); decref(none_cls); decref(type_cls); */ freeHiddenClasses(HiddenClass::getRoot()); gc_teardown(); }
void freeHiddenClasses(HiddenClass *hcls) { for (auto it : hcls->children) { freeHiddenClasses(it.second); } rt_free(hcls); }