mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-21 03:50:16 +00:00
some fix
This commit is contained in:
parent
87453c80a7
commit
e88744eadc
@ -188,11 +188,7 @@ obj_get_t<T> PyVar::obj_get(){
|
||||
}
|
||||
|
||||
#define PK_OBJ_GET(T, obj) (obj).obj_get<T>()
|
||||
|
||||
#define PK_OBJ_MARK(obj) \
|
||||
if(!is_tagged(obj) && !(obj)->gc_marked) { \
|
||||
vm->__obj_gc_mark(obj.get()); \
|
||||
}
|
||||
#define PK_OBJ_MARK(obj) if(!is_tagged(obj)) vm->__obj_gc_mark(obj.get());
|
||||
|
||||
#define VAR(x) py_var(vm, x)
|
||||
#define CAST(T, x) py_cast<T>(vm, x)
|
||||
|
@ -5,13 +5,12 @@ namespace pkpy{
|
||||
int ManagedHeap::sweep(){
|
||||
std::vector<PyObject*> alive;
|
||||
for(PyObject* obj: gen){
|
||||
PK_DEBUG_ASSERT(!obj.is_sso)
|
||||
if(obj->gc_marked){
|
||||
obj->gc_marked = false;
|
||||
alive.push_back(obj);
|
||||
}else{
|
||||
#if PK_DEBUG_GC_STATS
|
||||
deleted[obj.type] += 1;
|
||||
deleted[obj->type] += 1;
|
||||
#endif
|
||||
if(_gc_on_delete) _gc_on_delete(vm, obj);
|
||||
_delete(obj);
|
||||
|
@ -428,6 +428,7 @@ bool VM::__py_bool_non_trivial(PyVar obj){
|
||||
}
|
||||
|
||||
void VM::__obj_gc_mark(PyObject* obj){
|
||||
if(obj->gc_marked) return;
|
||||
obj->gc_marked = true;
|
||||
const PyTypeInfo* ti = _tp_info(obj->type);
|
||||
if(ti->vt._gc_mark) ti->vt._gc_mark(obj->_value_ptr(), this);
|
||||
@ -1821,9 +1822,7 @@ void Frame::_gc_mark(VM* vm) const {
|
||||
}
|
||||
|
||||
void ManagedHeap::mark() {
|
||||
for(PyObject* obj: _no_gc){
|
||||
if(!obj->gc_marked) vm->__obj_gc_mark(obj);
|
||||
}
|
||||
for(PyObject* obj: _no_gc) vm->__obj_gc_mark(obj);
|
||||
vm->callstack.apply([this](Frame& frame){ frame._gc_mark(vm); });
|
||||
for(PyVar obj: vm->s_data) PK_OBJ_MARK(obj);
|
||||
for(auto [_, co]: vm->__cached_codes) co->_gc_mark(vm);
|
||||
|
Loading…
x
Reference in New Issue
Block a user