mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-21 12:00:18 +00:00
fix a bug of large_objects
This commit is contained in:
parent
c1adf77afd
commit
60802a8e36
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user