diff --git a/include/pocketpy/gc.h b/include/pocketpy/gc.h index 54deade7..27fd3c55 100644 --- a/include/pocketpy/gc.h +++ b/include/pocketpy/gc.h @@ -53,7 +53,7 @@ struct ManagedHeap{ using __T = Py_>; // https://github.com/pocketpy/pocketpy/issues/94#issuecomment-1594784476 PyObject* obj = new(pool64_alloc<__T>()) Py_>(type, std::forward(args)...); - obj->gc.enabled = false; + obj->gc_enabled = false; _no_gc.push_back(obj); return obj; } diff --git a/include/pocketpy/obj.h b/include/pocketpy/obj.h index 66cfdee2..86f41e60 100644 --- a/include/pocketpy/obj.h +++ b/include/pocketpy/obj.h @@ -94,14 +94,9 @@ struct Slice { Slice(PyObject* start, PyObject* stop, PyObject* step) : start(start), stop(stop), step(step) {} }; -struct GCHeader { - bool enabled; // whether this object is managed by GC - bool marked; // whether this object is marked - GCHeader() : enabled(true), marked(false) {} -}; - struct PyObject{ - GCHeader gc; + bool gc_enabled; // whether this object is managed by GC + bool gc_marked; // whether this object is marked Type type; NameDict* _attr; @@ -114,7 +109,7 @@ struct PyObject{ virtual void _obj_gc_mark() = 0; virtual void* _value_ptr() = 0; - PyObject(Type type) : type(type), _attr(nullptr) {} + PyObject(Type type) : gc_enabled(true), gc_marked(false), type(type), _attr(nullptr) {} virtual ~PyObject(); @@ -129,7 +124,7 @@ struct PyObject{ struct PySignalObject: PyObject { PySignalObject() : PyObject(0) { - gc.enabled = false; + gc_enabled = false; } void _obj_gc_mark() override {} void* _value_ptr() override { return nullptr; } @@ -195,8 +190,8 @@ struct MappingProxy{ #define PK_OBJ_GET(T, obj) (((Py_*)(obj))->_value) #define PK_OBJ_MARK(obj) \ - if(!is_tagged(obj) && !(obj)->gc.marked) { \ - (obj)->gc.marked = true; \ + if(!is_tagged(obj) && !(obj)->gc_marked) { \ + (obj)->gc_marked = true; \ (obj)->_obj_gc_mark(); \ if((obj)->is_attr_valid()) gc_mark_namedict((obj)->attr()); \ } diff --git a/src/gc.cpp b/src/gc.cpp index 207e1975..72eaecfd 100644 --- a/src/gc.cpp +++ b/src/gc.cpp @@ -5,8 +5,8 @@ namespace pkpy{ int ManagedHeap::sweep(){ std::vector alive; for(PyObject* obj: gen){ - if(obj->gc.marked){ - obj->gc.marked = false; + if(obj->gc_marked){ + obj->gc_marked = false; alive.push_back(obj); }else{ #if PK_DEBUG_GC_STATS @@ -19,7 +19,7 @@ namespace pkpy{ } // clear _no_gc marked flag - for(PyObject* obj: _no_gc) obj->gc.marked = false; + for(PyObject* obj: _no_gc) obj->gc_marked = false; int freed = gen.size() - alive.size();