[DEV] remote _rawval()

This commit is contained in:
Edouard DUPIN 2018-07-03 22:39:21 +02:00
parent 51b24cad24
commit fa206b5e49
5 changed files with 6 additions and 9 deletions

View File

@ -104,7 +104,7 @@ static void dumpLiteral(rabbit::ObjectPtr &o) {
case rabbit::OT_FLOAT: printf("{%f}",o.toFloat());break; case rabbit::OT_FLOAT: printf("{%f}",o.toFloat());break;
case rabbit::OT_INTEGER: printf("{" _PRINT_INT_FMT "}",o.toInteger());break; case rabbit::OT_INTEGER: printf("{" _PRINT_INT_FMT "}",o.toInteger());break;
case rabbit::OT_BOOL: printf("%s",o.toInteger()?"true":"false");break; case rabbit::OT_BOOL: printf("%s",o.toInteger()?"true":"false");break;
default: printf("(%s %p)",getTypeName(o),(void*)_rawval(o));break; break; //shut up compiler default: printf("(%s %p)",getTypeName(o),(void*)o.toRaw());break; break; //shut up compiler
} }
} }

View File

@ -149,15 +149,12 @@ namespace rabbit {
#define is_delegable(t) (sq_type(t)&SQOBJECT_DELEGABLE) #define is_delegable(t) (sq_type(t)&SQOBJECT_DELEGABLE)
#define raw_type(obj) _RAW_TYPE((obj)._type) #define raw_type(obj) _RAW_TYPE((obj)._type)
#define _rawval(obj) ((obj)._unVal.raw)
#define _stringval(obj) (obj)._unVal.pString->_val #define _stringval(obj) (obj)._unVal.pString->_val
#define _userdataval(obj) ((rabbit::UserPointer)sq_aligning((obj)._unVal.pUserData + 1)) #define _userdataval(obj) ((rabbit::UserPointer)sq_aligning((obj)._unVal.pUserData + 1))
#define tofloat(num) ((sq_type(num)==rabbit::OT_INTEGER)?(float_t)(num).toInteger():(num).toFloat()) #define tofloat(num) ((sq_type(num)==rabbit::OT_INTEGER)?(float_t)(num).toInteger():(num).toFloat())
#define tointeger(num) ((sq_type(num)==rabbit::OT_FLOAT)?(int64_t)(num).toFloat():(num).toInteger()) #define tointeger(num) ((sq_type(num)==rabbit::OT_FLOAT)?(int64_t)(num).toFloat():(num).toInteger())
#define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC) #define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC)
#define sq_istable(o) ((o)._type==rabbit::OT_TABLE) #define sq_istable(o) ((o)._type==rabbit::OT_TABLE)
#define sq_isarray(o) ((o)._type==rabbit::OT_ARRAY) #define sq_isarray(o) ((o)._type==rabbit::OT_ARRAY)

View File

@ -118,7 +118,7 @@ rabbit::RefTable::RefNode* rabbit::RefTable::get(rabbit::Object &obj,rabbit::Has
mainpos = rabbit::HashObj(obj)&(_numofslots-1); mainpos = rabbit::HashObj(obj)&(_numofslots-1);
*prev = NULL; *prev = NULL;
for (ref = _buckets[mainpos]; ref; ) { for (ref = _buckets[mainpos]; ref; ) {
if(_rawval(ref->obj) == _rawval(obj) && sq_type(ref->obj) == sq_type(obj)) if(ref->obj.toRaw() == obj.toRaw() && sq_type(ref->obj) == sq_type(obj))
break; break;
*prev = ref; *prev = ref;
ref = ref->next; ref = ref->next;

View File

@ -253,7 +253,7 @@ rabbit::Table::~Table() {
rabbit::Table::_HashNode* rabbit::Table::_get(const rabbit::ObjectPtr &key,rabbit::Hash hash) const{ rabbit::Table::_HashNode* rabbit::Table::_get(const rabbit::ObjectPtr &key,rabbit::Hash hash) const{
_HashNode *n = &_nodes[hash]; _HashNode *n = &_nodes[hash];
do { do {
if( _rawval(n->key) == _rawval(key) if( n->key.toRaw() == key.toRaw()
&& sq_type(n->key) == sq_type(key)){ && sq_type(n->key) == sq_type(key)){
return n; return n;
} }

View File

@ -227,7 +227,7 @@ bool rabbit::VirtualMachine::objCmp(const rabbit::ObjectPtr &o1,const rabbit::Ob
{ {
rabbit::ObjectType t1 = sq_type(o1), t2 = sq_type(o2); rabbit::ObjectType t1 = sq_type(o1), t2 = sq_type(o2);
if(t1 == t2) { if(t1 == t2) {
if(_rawval(o1) == _rawval(o2))_RET_SUCCEED(0); if(o1.toRaw() == o2.toRaw())_RET_SUCCEED(0);
rabbit::ObjectPtr res; rabbit::ObjectPtr res;
switch(t1){ switch(t1){
case rabbit::OT_STRING: case rabbit::OT_STRING:
@ -332,7 +332,7 @@ bool rabbit::VirtualMachine::toString(const rabbit::ObjectPtr &o,rabbit::ObjectP
} }
} }
default: default:
snprintf(_sp(sq_rsl((sizeof(void*)*2)+NUMBER_UINT8_MAX)),sq_rsl((sizeof(void*)*2)+NUMBER_UINT8_MAX),"(%s : 0x%p)",getTypeName(o),(void*)_rawval(o)); snprintf(_sp(sq_rsl((sizeof(void*)*2)+NUMBER_UINT8_MAX)),sq_rsl((sizeof(void*)*2)+NUMBER_UINT8_MAX),"(%s : 0x%p)",getTypeName(o),(void*)o.toRaw());
} }
res = rabbit::String::create(_get_shared_state(this),_spval); res = rabbit::String::create(_get_shared_state(this),_spval);
return true; return true;
@ -659,7 +659,7 @@ bool rabbit::VirtualMachine::CLASS_OP(rabbit::ObjectPtr &target,int64_t baseclas
bool rabbit::VirtualMachine::isEqual(const rabbit::ObjectPtr &o1,const rabbit::ObjectPtr &o2,bool &res) bool rabbit::VirtualMachine::isEqual(const rabbit::ObjectPtr &o1,const rabbit::ObjectPtr &o2,bool &res)
{ {
if(sq_type(o1) == sq_type(o2)) { if(sq_type(o1) == sq_type(o2)) {
res = (_rawval(o1) == _rawval(o2)); res = (o1.toRaw() == o2.toRaw());
} }
else { else {
if(sq_isnumeric(o1) && sq_isnumeric(o2)) { if(sq_isnumeric(o1) && sq_isnumeric(o2)) {