blueloveTH 1 yıl önce
ebeveyn
işleme
a1f7a16ddc
3 değiştirilmiş dosya ile 8 ekleme ve 7 silme
  1. 2 2
      include/pocketpy/gc.h
  2. 3 2
      include/pocketpy/obj.h
  3. 3 3
      src/codeobject.cpp

+ 2 - 2
include/pocketpy/gc.h

@@ -43,7 +43,7 @@ struct ManagedHeap{
         using __T = std::decay_t<T>;
         static_assert(!is_sso_v<__T>, "gcnew cannot be used with SSO types");
         // https://github.com/pocketpy/pocketpy/issues/94#issuecomment-1594784476
-        PyObject* p = new(pool128_alloc(py_sizeof<__T>)) PyObject(true);
+        PyObject* p = new(pool128_alloc(py_sizeof<__T>)) PyObject();
         p->placement_new<__T>(std::forward<Args>(args)...);
         gen.emplace_back(type, p);
         gc_counter++;
@@ -54,7 +54,7 @@ struct ManagedHeap{
     PyVar _new(Type type, Args&&... args){
         using __T = std::decay_t<T>;
         static_assert(!is_sso_v<__T>);
-        PyObject* p = new(pool128_alloc<__T>()) PyObject(false);
+        PyObject* p = new(pool128_alloc<__T>()) PyObject();
         p->placement_new<__T>(std::forward<Args>(args)...);
         _no_gc.emplace_back(type, p);
         return _no_gc.back();

+ 3 - 2
include/pocketpy/obj.h

@@ -102,7 +102,6 @@ struct Slice {
 };
 
 struct PyObject final{
-    bool gc_enabled;    // whether this object is managed by GC
     bool gc_marked;     // whether this object is marked
     NameDict* _attr;
 
@@ -119,7 +118,7 @@ struct PyObject final{
         return (*_attr)[name];
     }
 
-    PyObject(bool gc_enabled) : gc_enabled(gc_enabled), gc_marked(false), _attr(nullptr) {}
+    PyObject() : gc_marked(false), _attr(nullptr) {}
 
     template<typename T, typename ...Args>
     void placement_new(Args&&... args){
@@ -147,6 +146,8 @@ struct PyObject final{
 template<typename T>
 inline constexpr int py_sizeof = sizeof(PyObject) + sizeof(T);
 
+static_assert(sizeof(PyObject) == 16);
+
 const int kTpIntIndex = 3;
 const int kTpFloatIndex = 4;
 

+ 3 - 3
src/codeobject.cpp

@@ -7,7 +7,7 @@ namespace pkpy{
             blocks.push_back(CodeBlock(CodeBlockType::NO_BLOCK, -1, 0, 0));
         }
 
-    PyVar const PY_NULL(Type(), new PyObject(false));
-    PyVar const PY_OP_CALL(Type(), new PyObject(false));
-    PyVar const PY_OP_YIELD(Type(), new PyObject(false));
+    PyVar const PY_NULL(Type(), new PyObject());
+    PyVar const PY_OP_CALL(Type(), new PyObject());
+    PyVar const PY_OP_YIELD(Type(), new PyObject());
 }   // namespace pkpy