diff --git a/include/pocketpy/interpreter/heap.h b/include/pocketpy/interpreter/heap.h index c997fd22..0a682058 100644 --- a/include/pocketpy/interpreter/heap.h +++ b/include/pocketpy/interpreter/heap.h @@ -3,7 +3,7 @@ typedef struct ManagedHeap { MultiPool small_objects; - c11_vector large_objects; + c11_vector /* PyObject* */ large_objects; int freed_ma[3]; int gc_threshold; // threshold for gc_counter diff --git a/src/interpreter/heap.c b/src/interpreter/heap.c index b2d1b6c5..8126db93 100644 --- a/src/interpreter/heap.c +++ b/src/interpreter/heap.c @@ -63,14 +63,13 @@ int ManagedHeap__sweep(ManagedHeap* self) { } else { PyObject__dtor(obj); PK_FREE(obj); - // type and module objects are perpectual - assert(obj->type != tp_type); - assert(obj->type != tp_module); } } // shrink `self->large_objects` int large_freed = self->large_objects.length - large_living_count; self->large_objects.length = large_living_count; + // printf("large_freed=%d\n", large_freed); + // printf("small_freed=%d\n", small_freed); return small_freed + large_freed; } diff --git a/src/interpreter/vm.c b/src/interpreter/vm.c index 4a635acd..645089bd 100644 --- a/src/interpreter/vm.c +++ b/src/interpreter/vm.c @@ -636,11 +636,6 @@ void CodeObject__gc_mark(const CodeObject* self) { void ManagedHeap__mark(ManagedHeap* self) { VM* vm = pk_current_vm; - // mark large objects - for(int i = 0; i < self->large_objects.length; i++) { - PyObject* obj = c11__getitem(PyObject*, &self->large_objects, i); - mark_object(obj); - } // mark value stack for(py_TValue* p = vm->stack.begin; p != vm->stack.end; p++) { pk__mark_value(p); diff --git a/src/modules/pkpy.c b/src/modules/pkpy.c index dafef142..594fee47 100644 --- a/src/modules/pkpy.c +++ b/src/modules/pkpy.c @@ -45,8 +45,10 @@ static bool pkpy_memory_usage(int argc, py_Ref argv) { c11_sbuf__write_cstr(&buf, "== heap.small_objects ==\n"); c11_sbuf__write_cstr(&buf, small_objects_usage->data); c11_sbuf__write_cstr(&buf, "== heap.large_objects ==\n"); - c11_sbuf__write_cstr(&buf, "len(large_objects)="); - c11_sbuf__write_int(&buf, large_object_count); + pk_sprintf(&buf, "len(large_objects)=%d\n", large_object_count); + c11_sbuf__write_cstr(&buf, "== heap.gc ==\n"); + pk_sprintf(&buf, "gc_counter=%d\n", heap->gc_counter); + pk_sprintf(&buf, "gc_threshold=%d", heap->gc_threshold); // c11_sbuf__write_cstr(&buf, "== vm.pool_frame ==\n"); c11_sbuf__py_submit(&buf, py_retval()); c11_string__delete(small_objects_usage); diff --git a/src/public/modules.c b/src/public/modules.c index ec832d9d..69228eb9 100644 --- a/src/public/modules.c +++ b/src/public/modules.c @@ -204,13 +204,13 @@ static bool builtins_input(int argc, py_Ref argv) { if(!py_checkstr(argv)) return false; prompt = py_tostr(argv); } - printf("%s", prompt); + pk_current_vm->callbacks.print(prompt); c11_sbuf buf; c11_sbuf__ctor(&buf); while(true) { int c = pk_current_vm->callbacks.getchar(); - if(c == '\n') break; + if(c == '\n' || c == '\r') break; if(c == EOF) break; c11_sbuf__write_char(&buf, c); }