[DEV] remove _realval()

This commit is contained in:
Edouard DUPIN 2018-07-04 21:53:40 +02:00
parent 48c38c1797
commit 2704e12018
7 changed files with 19 additions and 11 deletions

View File

@ -41,7 +41,7 @@ bool rabbit::Array::get(const int64_t _nidx, rabbit::ObjectPtr& _val) const {
if( _nidx >= 0 if( _nidx >= 0
&& _nidx < (int64_t)m_data.size()){ && _nidx < (int64_t)m_data.size()){
rabbit::ObjectPtr &o = m_data[_nidx]; rabbit::ObjectPtr &o = m_data[_nidx];
_val = _realval(o); _val = o.getRealObject();
return true; return true;
} }
return false; return false;
@ -61,7 +61,7 @@ int64_t rabbit::Array::next(const rabbit::ObjectPtr& _refpos,
//first found //first found
_outkey=(int64_t)idx; _outkey=(int64_t)idx;
rabbit::ObjectPtr& o = m_data[idx]; rabbit::ObjectPtr& o = m_data[idx];
_outval = _realval(o); _outval = o.getRealObject();
//return idx for the next iteration //return idx for the next iteration
return ++idx; return ++idx;
} }

View File

@ -59,7 +59,7 @@ bool rabbit::Class::get(const rabbit::ObjectPtr &key,rabbit::ObjectPtr &val) {
if(_members->get(key,val)) { if(_members->get(key,val)) {
if(_isfield(val)) { if(_isfield(val)) {
rabbit::ObjectPtr &o = _defaultvalues[_member_idx(val)].val; rabbit::ObjectPtr &o = _defaultvalues[_member_idx(val)].val;
val = _realval(o); val = o.getRealObject();
} else { } else {
val = _methods[_member_idx(val)].val; 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; outval = _methods[_member_idx(oval)].val;
} else { } else {
rabbit::ObjectPtr &o = _defaultvalues[_member_idx(oval)].val; rabbit::ObjectPtr &o = _defaultvalues[_member_idx(oval)].val;
outval = _realval(o); outval = o.getRealObject();
} }
} }
return idx; return idx;

View File

@ -102,7 +102,7 @@ bool rabbit::Instance::get(const rabbit::ObjectPtr &key,rabbit::ObjectPtr &val)
if(_class->_members->get(key,val)) { if(_class->_members->get(key,val)) {
if(_isfield(val)) { if(_isfield(val)) {
rabbit::ObjectPtr &o = _values[_member_idx(val)]; rabbit::ObjectPtr &o = _values[_member_idx(val)];
val = _realval(o); val = o.getRealObject();
} else { } else {
val = _class->_methods[_member_idx(val)].val; val = _class->_methods[_member_idx(val)].val;
} }

View File

@ -8,6 +8,7 @@
#include <rabbit/Object.hpp> #include <rabbit/Object.hpp>
#include <rabbit/String.hpp> #include <rabbit/String.hpp>
#include <rabbit/WeakRef.hpp>
const char* rabbit::Object::getStringValue() const { const char* rabbit::Object::getStringValue() const {
return (const char*)&_unVal.pString->_val[0]; return (const char*)&_unVal.pString->_val[0];
@ -16,3 +17,11 @@ const char* rabbit::Object::getStringValue() const {
char* rabbit::Object::getStringValue() { char* rabbit::Object::getStringValue() {
return (char*)&_unVal.pString->_val[0]; return (char*)&_unVal.pString->_val[0];
} }
rabbit::Object rabbit::Object::getRealObject() const {
if (isWeakRef() == false) {
return *this;
}
return toWeakRef()->_obj;
}

View File

@ -221,6 +221,7 @@ namespace rabbit {
rabbit::ObjectType getTypeRaw() const { rabbit::ObjectType getTypeRaw() const {
return rabbit::ObjectType(_type&_RT_MASK); return rabbit::ObjectType(_type&_RT_MASK);
} }
rabbit::Object getRealObject() const;
}; };
#define ISREFCOUNTED(t) (t&SQOBJECT_REF_COUNTED) #define ISREFCOUNTED(t) (t&SQOBJECT_REF_COUNTED)
@ -235,8 +236,6 @@ namespace rabbit {
unval.pRefCounted->release(); \ 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)) #define _userdataval(obj) ((rabbit::UserPointer)sq_aligning((obj)._unVal.pUserData + 1))
inline void _Swap(rabbit::Object &a,rabbit::Object &b) inline void _Swap(rabbit::Object &a,rabbit::Object &b)

View File

@ -131,7 +131,7 @@ bool rabbit::Table::get(const rabbit::ObjectPtr &key,rabbit::ObjectPtr &val) con
return false; return false;
_HashNode *n = _get(key, HashObj(key) & (_numofnodes - 1)); _HashNode *n = _get(key, HashObj(key) & (_numofnodes - 1));
if (n) { if (n) {
val = _realval(n->val); val = n->val.getRealObject();
return true; return true;
} }
return false; return false;
@ -204,7 +204,7 @@ int64_t rabbit::Table::next(bool getweakrefs,const rabbit::ObjectPtr &refpos, ra
//first found //first found
_HashNode &n = _nodes[idx]; _HashNode &n = _nodes[idx];
outkey = n.key; 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 for the next iteration
return ++idx; return ++idx;
} }
@ -282,7 +282,7 @@ bool rabbit::Table::getStr(const char* key,int64_t keylen,rabbit::ObjectPtr &val
} }
} while((n = n->next)); } while((n = n->next));
if (res) { if (res) {
val = _realval(res->val); val = res->val.getRealObject();
return true; return true;
} }
return false; return false;

View File

@ -1559,7 +1559,7 @@ rabbit::Result rabbit::sq_getbyhandle(rabbit::VirtualMachine* v,int64_t idx,cons
if(SQ_FAILED(_getmemberbyhandle(v,self,handle,val))) { if(SQ_FAILED(_getmemberbyhandle(v,self,handle,val))) {
return SQ_ERROR; return SQ_ERROR;
} }
v->push(_realval(*val)); v->push(val->getRealObject());
return SQ_OK; return SQ_OK;
} }