mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-21 12:00:18 +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>;
|
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();
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user