[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
&& _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;
}

View File

@ -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;

View File

@ -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;
}

View File

@ -8,6 +8,7 @@
#include <rabbit/Object.hpp>
#include <rabbit/String.hpp>
#include <rabbit/WeakRef.hpp>
const char* rabbit::Object::getStringValue() const {
return (const char*)&_unVal.pString->_val[0];
@ -16,3 +17,11 @@ 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;
}

View File

@ -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)

View File

@ -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;

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))) {
return SQ_ERROR;
}
v->push(_realval(*val));
v->push(val->getRealObject());
return SQ_OK;
}