This commit is contained in:
blueloveTH 2024-05-20 00:24:35 +08:00
parent 39ad3f2ef4
commit a1f7a16ddc
3 changed files with 8 additions and 7 deletions

View File

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

View File

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

View File

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