From 7d26370d9e8c4d371a6ab28d707348f3fa7b3b41 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Wed, 21 Jul 2021 12:25:26 +0200 Subject: [PATCH] Fix wrong gc count for instances --- lib/libesp32/Berry/src/be_gc.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/libesp32/Berry/src/be_gc.c b/lib/libesp32/Berry/src/be_gc.c index fca6ad45d..8e6ac005e 100644 --- a/lib/libesp32/Berry/src/be_gc.c +++ b/lib/libesp32/Berry/src/be_gc.c @@ -339,12 +339,19 @@ static void free_lstring(bvm *vm, bgcobject *obj) } } +static void free_instance(bvm *vm, bgcobject *obj) +{ + binstance *o = cast_instance(obj); + int nvar = be_instance_member_count(o); + be_free(vm, obj, sizeof(binstance) + sizeof(bvalue) * (nvar - 1)); +} + static void free_object(bvm *vm, bgcobject *obj) { switch (obj->type) { case BE_STRING: free_lstring(vm, obj); break; /* long string */ case BE_CLASS: be_free(vm, obj, sizeof(bclass)); break; - case BE_INSTANCE: be_free(vm, obj, sizeof(binstance)); break; + case BE_INSTANCE: free_instance(vm, obj); break; case BE_MAP: be_map_delete(vm, cast_map(obj)); break; case BE_LIST: be_list_delete(vm, cast_list(obj)); break; case BE_CLOSURE: free_closure(vm, obj); break;