Commit f7782f80 authored by Damien George's avatar Damien George

py/gc: For finaliser, interpret a pointer into the heap as concrete obj.

parent 969e4bbe
...@@ -230,16 +230,16 @@ STATIC void gc_sweep(void) { ...@@ -230,16 +230,16 @@ STATIC void gc_sweep(void) {
#endif #endif
// free unmarked heads and their tails // free unmarked heads and their tails
int free_tail = 0; int free_tail = 0;
for (mp_uint_t block = 0; block < MP_STATE_MEM(gc_alloc_table_byte_len) * BLOCKS_PER_ATB; block++) { for (size_t block = 0; block < MP_STATE_MEM(gc_alloc_table_byte_len) * BLOCKS_PER_ATB; block++) {
switch (ATB_GET_KIND(block)) { switch (ATB_GET_KIND(block)) {
case AT_HEAD: case AT_HEAD:
#if MICROPY_ENABLE_FINALISER #if MICROPY_ENABLE_FINALISER
if (FTB_GET(block)) { if (FTB_GET(block)) {
mp_obj_t obj = (mp_obj_t)PTR_FROM_BLOCK(block); mp_obj_base_t *obj = (mp_obj_base_t*)PTR_FROM_BLOCK(block);
if (((mp_obj_base_t*)MP_OBJ_TO_PTR(obj))->type != NULL) { if (obj->type != NULL) {
// if the object has a type then see if it has a __del__ method // if the object has a type then see if it has a __del__ method
mp_obj_t dest[2]; mp_obj_t dest[2];
mp_load_method_maybe(obj, MP_QSTR___del__, dest); mp_load_method_maybe(MP_OBJ_FROM_PTR(obj), MP_QSTR___del__, dest);
if (dest[0] != MP_OBJ_NULL) { if (dest[0] != MP_OBJ_NULL) {
// load_method returned a method // load_method returned a method
mp_call_method_n_kw(0, 0, dest); mp_call_method_n_kw(0, 0, dest);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment