mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-21 03:50:16 +00:00
some fix
This commit is contained in:
parent
39ad3f2ef4
commit
a1f7a16ddc
@ -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();
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user