From f57ca260ea4eb91aea9c093c87312b3fb610e7c6 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Wed, 7 Dec 2022 20:49:27 +0800 Subject: [PATCH] Update obj.h --- src/obj.h | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/obj.h b/src/obj.h index ef86e8b0..d7ff8565 100644 --- a/src/obj.h +++ b/src/obj.h @@ -68,27 +68,25 @@ typedef pkpy::shared_ptr _Func; typedef pkpy::shared_ptr _Iterator; struct PyObject { -protected: - void* _value; -public: PyVar _type; PyVarDict attribs; inline bool isType(const PyVar& type){ return this->_type == type; } - inline void* value(){ return _value; } + inline virtual void* value() = 0; // currently __name__ is only used for 'type' PyVar _typeName(){ return _type->attribs[__name__]; } + + PyObject(PyVar type) : _type(type) {} + virtual ~PyObject() = default; }; template struct Py_ : PyObject { T _valueT; - Py_(T val, const PyVar& type) : _valueT(val) { - _value = &_valueT; - _type = type; - } + Py_(T val, const PyVar& type) : PyObject(type), _valueT(val) {} + virtual void* value() override { return &_valueT; } }; #define UNION_GET(T, obj) (((Py_*)((obj).get()))->_valueT)