mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-21 12:00:18 +00:00
change PY_NULL
into nullptr
This commit is contained in:
parent
617ff4fc77
commit
6099e62314
@ -182,7 +182,7 @@ struct const_sso_var {};
|
|||||||
|
|
||||||
struct PyVar final{
|
struct PyVar final{
|
||||||
Type type;
|
Type type;
|
||||||
bool is_sso;
|
bool is_ptr;
|
||||||
uint8_t flags;
|
uint8_t flags;
|
||||||
// 12 bytes SSO
|
// 12 bytes SSO
|
||||||
int _0; i64 _1;
|
int _0; i64 _1;
|
||||||
@ -192,14 +192,14 @@ struct PyVar final{
|
|||||||
|
|
||||||
/* We must initialize all members to allow == operator to work correctly */
|
/* We must initialize all members to allow == operator to work correctly */
|
||||||
// constexpr initialized
|
// constexpr initialized
|
||||||
constexpr PyVar(const const_sso_var&, Type type, int value): type(type), is_sso(true), flags(0), _0(value), _1(0) {}
|
constexpr PyVar(const const_sso_var&, Type type, int value): type(type), is_ptr(false), flags(0), _0(value), _1(0) {}
|
||||||
// zero initialized
|
// zero initialized
|
||||||
constexpr PyVar(std::nullptr_t): type(0), is_sso(false), flags(0), _0(0), _1(0) {}
|
constexpr PyVar(std::nullptr_t): type(0), is_ptr(false), flags(0), _0(0), _1(0) {}
|
||||||
// PyObject* initialized (is_sso = false)
|
// PyObject* initialized (is_sso = false)
|
||||||
PyVar(Type type, PyObject* p): type(type), is_sso(false), flags(0), _0(0), _1(reinterpret_cast<i64>(p)) {}
|
PyVar(Type type, PyObject* p): type(type), is_ptr(true), flags(0), _0(0), _1(reinterpret_cast<i64>(p)) {}
|
||||||
// SSO initialized (is_sso = true)
|
// SSO initialized (is_sso = true)
|
||||||
template<typename T>
|
template<typename T>
|
||||||
PyVar(Type type, T value): type(type), is_sso(true), flags(0), _0(0), _1(0) {
|
PyVar(Type type, T value): type(type), is_ptr(false), flags(0), _0(0), _1(0) {
|
||||||
static_assert(sizeof(T) <= 12, "SSO size exceeded");
|
static_assert(sizeof(T) <= 12, "SSO size exceeded");
|
||||||
as<T>() = value;
|
as<T>() = value;
|
||||||
}
|
}
|
||||||
|
@ -153,7 +153,7 @@ inline constexpr int py_sizeof = PyObject::FIXED_SIZE + sizeof(T);
|
|||||||
const int kTpIntIndex = 3;
|
const int kTpIntIndex = 3;
|
||||||
const int kTpFloatIndex = 4;
|
const int kTpFloatIndex = 4;
|
||||||
|
|
||||||
inline bool is_tagged(PyVar p) noexcept { return p.is_sso; }
|
inline bool is_tagged(PyVar p) noexcept { return !p.is_ptr; }
|
||||||
inline bool is_float(PyVar p) noexcept { return p.type.index == kTpFloatIndex; }
|
inline bool is_float(PyVar p) noexcept { return p.type.index == kTpFloatIndex; }
|
||||||
inline bool is_int(PyVar p) noexcept { return p.type.index == kTpIntIndex; }
|
inline bool is_int(PyVar p) noexcept { return p.type.index == kTpIntIndex; }
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ obj_get_t<T> PyVar::obj_get(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define PK_OBJ_GET(T, obj) (obj).obj_get<T>()
|
#define PK_OBJ_GET(T, obj) (obj).obj_get<T>()
|
||||||
#define PK_OBJ_MARK(obj) if(!is_tagged(obj)) vm->__obj_gc_mark(obj.get());
|
#define PK_OBJ_MARK(obj) if((obj).is_ptr) vm->__obj_gc_mark(obj.get());
|
||||||
|
|
||||||
#define VAR(x) py_var(vm, x)
|
#define VAR(x) py_var(vm, x)
|
||||||
#define CAST(T, x) py_cast<T>(vm, x)
|
#define CAST(T, x) py_cast<T>(vm, x)
|
||||||
@ -207,7 +207,7 @@ inline bool try_cast_int(PyVar obj, i64* val) noexcept {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern PyVar const PY_NULL;
|
#define PY_NULL nullptr
|
||||||
extern PyVar const PY_OP_CALL;
|
extern PyVar const PY_OP_CALL;
|
||||||
extern PyVar const PY_OP_YIELD;
|
extern PyVar const PY_OP_YIELD;
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ 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(Type()));
|
|
||||||
PyVar const PY_OP_CALL(Type(), new PyObject(Type()));
|
PyVar const PY_OP_CALL(Type(), new PyObject(Type()));
|
||||||
PyVar const PY_OP_YIELD(Type(), new PyObject(Type()));
|
PyVar const PY_OP_YIELD(Type(), new PyObject(Type()));
|
||||||
} // namespace pkpy
|
} // namespace pkpy
|
Loading…
x
Reference in New Issue
Block a user