From 0ce88fa70c26a98811999a51dc1510fafa80807c Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Mon, 25 Aug 2025 20:16:11 +0800 Subject: [PATCH] backup --- src/interpreter/ceval.c | 4 +++- src/interpreter/vm.c | 4 +++- tests/71_gc_bug.py | 9 +++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 tests/71_gc_bug.py diff --git a/src/interpreter/ceval.c b/src/interpreter/ceval.c index 27ddf526..4bcac41d 100644 --- a/src/interpreter/ceval.c +++ b/src/interpreter/ceval.c @@ -4,6 +4,7 @@ #include "pocketpy/interpreter/vm.h" #include "pocketpy/common/sstream.h" #include "pocketpy/objects/codeobject.h" +#include "pocketpy/objects/exception.h" #include "pocketpy/pocketpy.h" #include "pocketpy/objects/error.h" #include @@ -820,7 +821,8 @@ __NEXT_STEP: return RES_YIELD; } else { assert(self->last_retval.type == tp_StopIteration); - py_ObjectRef value = py_getslot(&self->last_retval, 0); + BaseException* ud = py_touserdata(py_retval()); + py_ObjectRef value = &ud->args; if(py_isnil(value)) value = py_None(); *TOP() = *value; // [iter] -> [retval] DISPATCH_JUMP((int16_t)byte.arg); diff --git a/src/interpreter/vm.c b/src/interpreter/vm.c index 192896df..1cf4ad4f 100644 --- a/src/interpreter/vm.c +++ b/src/interpreter/vm.c @@ -635,7 +635,9 @@ void ManagedHeap__mark(ManagedHeap* self) { assert(p_stack->length == 0); // mark value stack - for(py_TValue* p = vm->stack.begin; p != vm->stack.end; p++) { + for(py_TValue* p = vm->stack.begin; p < vm->stack.sp; p++) { + // assert(p->type != tp_nil); + if(py_isnil(p)) continue; pk__mark_value(p); } // mark modules diff --git a/tests/71_gc_bug.py b/tests/71_gc_bug.py new file mode 100644 index 00000000..c462fcde --- /dev/null +++ b/tests/71_gc_bug.py @@ -0,0 +1,9 @@ +a=[] +import gc +gc.collect() + +# a.append(a) +print(list(globals().items())) +del a +print(list(globals().items())) +gc.collect()