From 2704e12018e3734a255edf766f083ae90d603422 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Wed, 4 Jul 2018 21:53:40 +0200 Subject: [PATCH] [DEV] remove _realval() --- rabbit/Array.cpp | 4 ++-- rabbit/Class.cpp | 4 ++-- rabbit/Instance.cpp | 2 +- rabbit/Object.cpp | 9 +++++++++ rabbit/Object.hpp | 3 +-- rabbit/Table.cpp | 6 +++--- rabbit/sqapi.cpp | 2 +- 7 files changed, 19 insertions(+), 11 deletions(-) diff --git a/rabbit/Array.cpp b/rabbit/Array.cpp index feaa39c..b335134 100644 --- a/rabbit/Array.cpp +++ b/rabbit/Array.cpp @@ -41,7 +41,7 @@ bool rabbit::Array::get(const int64_t _nidx, rabbit::ObjectPtr& _val) const { if( _nidx >= 0 && _nidx < (int64_t)m_data.size()){ rabbit::ObjectPtr &o = m_data[_nidx]; - _val = _realval(o); + _val = o.getRealObject(); return true; } return false; @@ -61,7 +61,7 @@ int64_t rabbit::Array::next(const rabbit::ObjectPtr& _refpos, //first found _outkey=(int64_t)idx; rabbit::ObjectPtr& o = m_data[idx]; - _outval = _realval(o); + _outval = o.getRealObject(); //return idx for the next iteration return ++idx; } diff --git a/rabbit/Class.cpp b/rabbit/Class.cpp index 5ce69b9..193ef3d 100644 --- a/rabbit/Class.cpp +++ b/rabbit/Class.cpp @@ -59,7 +59,7 @@ bool rabbit::Class::get(const rabbit::ObjectPtr &key,rabbit::ObjectPtr &val) { if(_members->get(key,val)) { if(_isfield(val)) { rabbit::ObjectPtr &o = _defaultvalues[_member_idx(val)].val; - val = _realval(o); + val = o.getRealObject(); } else { val = _methods[_member_idx(val)].val; } @@ -155,7 +155,7 @@ int64_t rabbit::Class::next(const rabbit::ObjectPtr &refpos, rabbit::ObjectPtr & outval = _methods[_member_idx(oval)].val; } else { rabbit::ObjectPtr &o = _defaultvalues[_member_idx(oval)].val; - outval = _realval(o); + outval = o.getRealObject(); } } return idx; diff --git a/rabbit/Instance.cpp b/rabbit/Instance.cpp index 6fd5d09..8394fc6 100644 --- a/rabbit/Instance.cpp +++ b/rabbit/Instance.cpp @@ -102,7 +102,7 @@ bool rabbit::Instance::get(const rabbit::ObjectPtr &key,rabbit::ObjectPtr &val) if(_class->_members->get(key,val)) { if(_isfield(val)) { rabbit::ObjectPtr &o = _values[_member_idx(val)]; - val = _realval(o); + val = o.getRealObject(); } else { val = _class->_methods[_member_idx(val)].val; } diff --git a/rabbit/Object.cpp b/rabbit/Object.cpp index dd3d9c1..c0b2f17 100644 --- a/rabbit/Object.cpp +++ b/rabbit/Object.cpp @@ -8,6 +8,7 @@ #include #include +#include const char* rabbit::Object::getStringValue() const { return (const char*)&_unVal.pString->_val[0]; @@ -15,4 +16,12 @@ const char* rabbit::Object::getStringValue() const { char* rabbit::Object::getStringValue() { return (char*)&_unVal.pString->_val[0]; +} + + +rabbit::Object rabbit::Object::getRealObject() const { + if (isWeakRef() == false) { + return *this; + } + return toWeakRef()->_obj; } \ No newline at end of file diff --git a/rabbit/Object.hpp b/rabbit/Object.hpp index db0a9b5..140e9f7 100644 --- a/rabbit/Object.hpp +++ b/rabbit/Object.hpp @@ -221,6 +221,7 @@ namespace rabbit { rabbit::ObjectType getTypeRaw() const { return rabbit::ObjectType(_type&_RT_MASK); } + rabbit::Object getRealObject() const; }; #define ISREFCOUNTED(t) (t&SQOBJECT_REF_COUNTED) @@ -235,8 +236,6 @@ namespace rabbit { unval.pRefCounted->release(); \ } - #define _realval(o) ((o).isWeakRef() == false?(rabbit::Object)o:(o).toWeakRef()->_obj) - #define _userdataval(obj) ((rabbit::UserPointer)sq_aligning((obj)._unVal.pUserData + 1)) inline void _Swap(rabbit::Object &a,rabbit::Object &b) diff --git a/rabbit/Table.cpp b/rabbit/Table.cpp index 78d6908..79122f2 100644 --- a/rabbit/Table.cpp +++ b/rabbit/Table.cpp @@ -131,7 +131,7 @@ bool rabbit::Table::get(const rabbit::ObjectPtr &key,rabbit::ObjectPtr &val) con return false; _HashNode *n = _get(key, HashObj(key) & (_numofnodes - 1)); if (n) { - val = _realval(n->val); + val = n->val.getRealObject(); return true; } return false; @@ -204,7 +204,7 @@ int64_t rabbit::Table::next(bool getweakrefs,const rabbit::ObjectPtr &refpos, ra //first found _HashNode &n = _nodes[idx]; outkey = n.key; - outval = getweakrefs?(rabbit::Object)n.val:_realval(n.val); + outval = getweakrefs?(rabbit::Object)n.val:n.val.getRealObject(); //return idx for the next iteration return ++idx; } @@ -282,7 +282,7 @@ bool rabbit::Table::getStr(const char* key,int64_t keylen,rabbit::ObjectPtr &val } } while((n = n->next)); if (res) { - val = _realval(res->val); + val = res->val.getRealObject(); return true; } return false; diff --git a/rabbit/sqapi.cpp b/rabbit/sqapi.cpp index 80137e8..768c390 100644 --- a/rabbit/sqapi.cpp +++ b/rabbit/sqapi.cpp @@ -1559,7 +1559,7 @@ rabbit::Result rabbit::sq_getbyhandle(rabbit::VirtualMachine* v,int64_t idx,cons if(SQ_FAILED(_getmemberbyhandle(v,self,handle,val))) { return SQ_ERROR; } - v->push(_realval(*val)); + v->push(val->getRealObject()); return SQ_OK; }