From 096051c269f144aedc8a10b422c4c43264804a55 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Tue, 3 Jul 2018 21:40:21 +0200 Subject: [PATCH] [DEV] remote _tointeger() --- rabbit/ClassMember.hpp | 8 +++---- rabbit/Closure.cpp | 2 +- rabbit/Compiler.cpp | 4 ++-- rabbit/FuncState.cpp | 14 ++++++------ rabbit/Lexer.cpp | 4 ++-- rabbit/Object.hpp | 5 ++--- rabbit/ObjectPtr.cpp | 2 +- rabbit/SharedState.cpp | 2 +- rabbit/Table.cpp | 2 +- rabbit/VirtualMachine.cpp | 46 +++++++++++++++++++-------------------- rabbit/sqapi.cpp | 4 ++-- rabbit/sqbaselib.cpp | 4 ++-- rabbit/sqdebug.cpp | 2 +- 13 files changed, 49 insertions(+), 50 deletions(-) diff --git a/rabbit/ClassMember.hpp b/rabbit/ClassMember.hpp index 09bdfa5..30fadf4 100644 --- a/rabbit/ClassMember.hpp +++ b/rabbit/ClassMember.hpp @@ -17,12 +17,12 @@ #define MEMBER_TYPE_METHOD 0x01000000 #define MEMBER_TYPE_FIELD 0x02000000 -#define _ismethod(o) (_integer(o)&MEMBER_TYPE_METHOD) -#define _isfield(o) (_integer(o)&MEMBER_TYPE_FIELD) +#define _ismethod(o) (o.toInteger()&MEMBER_TYPE_METHOD) +#define _isfield(o) (o.toInteger()&MEMBER_TYPE_FIELD) #define _make_method_idx(i) ((int64_t)(MEMBER_TYPE_METHOD|i)) #define _make_field_idx(i) ((int64_t)(MEMBER_TYPE_FIELD|i)) -#define _member_type(o) (_integer(o)&0xFF000000) -#define _member_idx(o) (_integer(o)&0x00FFFFFF) +#define _member_type(o) (o.toInteger()&0xFF000000) +#define _member_idx(o) (o.toInteger()&0x00FFFFFF) namespace rabbit { class ClassMember { diff --git a/rabbit/Closure.cpp b/rabbit/Closure.cpp index f1e98cb..9873392 100644 --- a/rabbit/Closure.cpp +++ b/rabbit/Closure.cpp @@ -70,7 +70,7 @@ bool rabbit::WriteObject(rabbit::VirtualMachine* v,rabbit::UserPointer up,SQWRIT break; case rabbit::OT_BOOL: case rabbit::OT_INTEGER: - _CHECK_IO(SafeWrite(v,write,up,&_integer(o),sizeof(int64_t)));break; + _CHECK_IO(SafeWrite(v,write,up,&o.toInteger(),sizeof(int64_t)));break; case rabbit::OT_FLOAT: _CHECK_IO(SafeWrite(v,write,up,&_float(o),sizeof(float_t)));break; case rabbit::OT_NULL: diff --git a/rabbit/Compiler.cpp b/rabbit/Compiler.cpp index c59956d..ed40d85 100644 --- a/rabbit/Compiler.cpp +++ b/rabbit/Compiler.cpp @@ -800,9 +800,9 @@ public: /* generate direct or literal function depending on size */ rabbit::ObjectType ctype = sq_type(constval); switch(ctype) { - case rabbit::OT_INTEGER: EmitloadConstInt(_integer(constval),_es.epos); break; + case rabbit::OT_INTEGER: EmitloadConstInt(constval.toInteger(),_es.epos); break; case rabbit::OT_FLOAT: EmitloadConstFloat(_float(constval),_es.epos); break; - case rabbit::OT_BOOL: _fs->addInstruction(_OP_LOADBOOL, _es.epos, _integer(constval)); break; + case rabbit::OT_BOOL: _fs->addInstruction(_OP_LOADBOOL, _es.epos, constval.toInteger()); break; default: _fs->addInstruction(_OP_LOAD,_es.epos,_fs->getConstant(constval)); break; } _es.etype = EXPR; diff --git a/rabbit/FuncState.cpp b/rabbit/FuncState.cpp index bb20675..bafb947 100644 --- a/rabbit/FuncState.cpp +++ b/rabbit/FuncState.cpp @@ -102,8 +102,8 @@ static void dumpLiteral(rabbit::ObjectPtr &o) { switch(sq_type(o)){ case rabbit::OT_STRING: printf("\"%s\"",_stringval(o));break; case rabbit::OT_FLOAT: printf("{%f}",_float(o));break; - case rabbit::OT_INTEGER: printf("{" _PRINT_INT_FMT "}",_integer(o));break; - case rabbit::OT_BOOL: printf("%s",_integer(o)?"true":"false");break; + case rabbit::OT_INTEGER: printf("{" _PRINT_INT_FMT "}",o.toInteger());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 } } @@ -150,7 +150,7 @@ void rabbit::FuncState::dump(rabbit::FunctionProto *func) templiterals.resize(_nliterals); while((idx=_table(_literals)->next(false,refidx,key,val))!=-1) { refidx=idx; - templiterals[_integer(val)]=key; + templiterals[val.toInteger()]=key; } for(i=0;inext(false,refo,key,val))!= -1) && (_integer(val) != lidx)) { + while(((refidx=_table(_literals)->next(false,refo,key,val))!= -1) && (val.toInteger() != lidx)) { refo = refidx; } dumpLiteral(key); @@ -209,7 +209,7 @@ void rabbit::FuncState::dump(rabbit::FunctionProto *func) else { int64_t refidx; rabbit::ObjectPtr val,key,refo; - while(((refidx=_table(_literals)->next(false,refo,key,val))!= -1) && (_integer(val) != lidx)) { + while(((refidx=_table(_literals)->next(false,refo,key,val))!= -1) && (val.toInteger() != lidx)) { refo = refidx; } dumpLiteral(key); @@ -257,7 +257,7 @@ int64_t rabbit::FuncState::getConstant(const rabbit::Object &cons) error("internal compiler error: too many literals"); } } - return _integer(val); + return val.toInteger(); } void rabbit::FuncState::setIntructionParams(int64_t pos,int64_t arg0,int64_t arg1,int64_t arg2,int64_t arg3) @@ -626,7 +626,7 @@ rabbit::FunctionProto* rabbit::FuncState::buildProto() { f->_name = _name; while((idx=_table(_literals)->next(false,refidx,key,val))!=-1) { - f->_literals[_integer(val)]=key; + f->_literals[val.toInteger()]=key; refidx=idx; } diff --git a/rabbit/Lexer.cpp b/rabbit/Lexer.cpp index a4b3b9f..7419196 100644 --- a/rabbit/Lexer.cpp +++ b/rabbit/Lexer.cpp @@ -104,7 +104,7 @@ const char *rabbit::Lexer::tok2Str(int64_t tok) int64_t nitr; while((nitr = _keywords->next(false,itr, key, val)) != -1) { itr = (int64_t)nitr; - if(((int64_t)_integer(val)) == tok) + if(((int64_t)val.toInteger()) == tok) return _stringval(key); } return NULL; @@ -286,7 +286,7 @@ int64_t rabbit::Lexer::getIDType(const char *s,int64_t len) { rabbit::ObjectPtr t; if(_keywords->getStr(s,len, t)) { - return int64_t(_integer(t)); + return int64_t(t.toInteger()); } return TK_IDENTIFIER; } diff --git a/rabbit/Object.hpp b/rabbit/Object.hpp index f8d7ec6..4b19fe6 100644 --- a/rabbit/Object.hpp +++ b/rabbit/Object.hpp @@ -149,7 +149,6 @@ namespace rabbit { #define is_delegable(t) (sq_type(t)&SQOBJECT_DELEGABLE) #define raw_type(obj) _RAW_TYPE((obj)._type) - #define _integer(obj) ((obj)._unVal.nInteger) #define _float(obj) ((obj)._unVal.fFloat) #define _string(obj) ((obj)._unVal.pString) #define _table(obj) ((obj)._unVal.pTable) @@ -171,8 +170,8 @@ namespace rabbit { #define _stringval(obj) (obj)._unVal.pString->_val #define _userdataval(obj) ((rabbit::UserPointer)sq_aligning((obj)._unVal.pUserData + 1)) - #define tofloat(num) ((sq_type(num)==rabbit::OT_INTEGER)?(float_t)_integer(num):_float(num)) - #define tointeger(num) ((sq_type(num)==rabbit::OT_FLOAT)?(int64_t)_float(num):_integer(num)) + #define tofloat(num) ((sq_type(num)==rabbit::OT_INTEGER)?(float_t)(num).toInteger():_float(num)) + #define tointeger(num) ((sq_type(num)==rabbit::OT_FLOAT)?(int64_t)_float(num):(num).toInteger()) #define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC) diff --git a/rabbit/ObjectPtr.cpp b/rabbit/ObjectPtr.cpp index 77c540c..2b0542e 100644 --- a/rabbit/ObjectPtr.cpp +++ b/rabbit/ObjectPtr.cpp @@ -145,7 +145,7 @@ uint64_t rabbit::translateIndex(const rabbit::ObjectPtr &idx) case rabbit::OT_NULL: return 0; case rabbit::OT_INTEGER: - return (uint64_t)_integer(idx); + return (uint64_t)idx.toInteger(); default: assert(0); break; } return 0; diff --git a/rabbit/SharedState.cpp b/rabbit/SharedState.cpp index 173886c..1d5751e 100644 --- a/rabbit/SharedState.cpp +++ b/rabbit/SharedState.cpp @@ -200,7 +200,7 @@ int64_t rabbit::SharedState::getMetaMethodIdxByName(const rabbit::ObjectPtr &nam } rabbit::ObjectPtr ret; if(_table(_metamethodsmap)->get(name,ret)) { - return _integer(ret); + return ret.toInteger(); } return -1; } diff --git a/rabbit/Table.cpp b/rabbit/Table.cpp index 9c3cec2..68b8636 100644 --- a/rabbit/Table.cpp +++ b/rabbit/Table.cpp @@ -18,7 +18,7 @@ rabbit::Hash rabbit::HashObj(const rabbit::ObjectPtr &key) { return (rabbit::Hash)((int64_t)_float(key)); case rabbit::OT_BOOL: case rabbit::OT_INTEGER: - return (rabbit::Hash)((int64_t)_integer(key)); + return (rabbit::Hash)((int64_t)key.toInteger()); default: return hashptr(key._unVal.pRefCounted); } diff --git a/rabbit/VirtualMachine.cpp b/rabbit/VirtualMachine.cpp index c368fb0..7c896c0 100644 --- a/rabbit/VirtualMachine.cpp +++ b/rabbit/VirtualMachine.cpp @@ -39,7 +39,7 @@ bool rabbit::VirtualMachine::BW_OP(uint64_t op,rabbit::ObjectPtr &trg,const rabb int64_t res; if((sq_type(o1)| sq_type(o2)) == rabbit::OT_INTEGER) { - int64_t i1 = _integer(o1), i2 = _integer(o2); + int64_t i1 = o1.toInteger(), i2 = o2.toInteger(); switch(op) { case BW_AND: res = i1 & i2; break; case BW_OR: res = i1 | i2; break; @@ -63,7 +63,7 @@ void rabbit::VirtualMachine::release() { { \ int64_t tmask = sq_type(o1)|sq_type(o2); \ switch(tmask) { \ - case rabbit::OT_INTEGER: trg = _integer(o1) op _integer(o2);break; \ + case rabbit::OT_INTEGER: trg = o1.toInteger() op o2.toInteger();break; \ case (rabbit::OT_FLOAT|OT_INTEGER): \ case (rabbit::OT_FLOAT): trg = tofloat(o1) op tofloat(o2); break;\ default: _GUARD(ARITH_OP((#op)[0],trg,o1,o2)); break;\ @@ -74,7 +74,7 @@ void rabbit::VirtualMachine::release() { { \ int64_t tmask = sq_type(o1)|sq_type(o2); \ switch(tmask) { \ - case rabbit::OT_INTEGER: { int64_t i2 = _integer(o2); if(i2 == 0) { raise_error(err); SQ_THROW(); } trg = _integer(o1) op i2; } break;\ + case rabbit::OT_INTEGER: { int64_t i2 = o2.toInteger(); if(i2 == 0) { raise_error(err); SQ_THROW(); } trg = o1.toInteger() op i2; } break;\ case (rabbit::OT_FLOAT|OT_INTEGER): \ case (rabbit::OT_FLOAT): trg = tofloat(o1) op tofloat(o2); break;\ default: _GUARD(ARITH_OP((#op)[0],trg,o1,o2)); break;\ @@ -86,7 +86,7 @@ bool rabbit::VirtualMachine::ARITH_OP(uint64_t op,rabbit::ObjectPtr &trg,const r int64_t tmask = sq_type(o1)| sq_type(o2); switch(tmask) { case rabbit::OT_INTEGER:{ - int64_t res, i1 = _integer(o1), i2 = _integer(o2); + int64_t res, i1 = o1.toInteger(), i2 = o2.toInteger(); switch(op) { case '+': res = i1 + i2; break; case '-': res = i1 - i2; break; @@ -198,7 +198,7 @@ bool rabbit::VirtualMachine::NEG_OP(rabbit::ObjectPtr &trg,const rabbit::ObjectP switch(sq_type(o)) { case rabbit::OT_INTEGER: - trg = -_integer(o); + trg = -o.toInteger(); return true; case rabbit::OT_FLOAT: trg = -_float(o); @@ -233,7 +233,7 @@ bool rabbit::VirtualMachine::objCmp(const rabbit::ObjectPtr &o1,const rabbit::Ob case rabbit::OT_STRING: _RET_SUCCEED(strcmp(_stringval(o1),_stringval(o2))); case rabbit::OT_INTEGER: - _RET_SUCCEED((_integer(o1)<_integer(o2))?-1:1); + _RET_SUCCEED((o1.toInteger()_state == rabbit::Generator::eSuspended) { int64_t idx = 0; if(sq_type(o4) == rabbit::OT_INTEGER) { - idx = _integer(o4) + 1; + idx = o4.toInteger() + 1; } o2 = idx; o4 = idx; @@ -609,10 +609,10 @@ bool rabbit::VirtualMachine::CLOSURE_OP(rabbit::ObjectPtr &target, rabbit::Funct rabbit::OuterVar &v = func->_outervalues[i]; switch(v._type){ case otLOCAL: - findOuter(closure->_outervalues[i], &STK(_integer(v._src))); + findOuter(closure->_outervalues[i], &STK(v._src.toInteger())); break; case otOUTER: - closure->_outervalues[i] = _closure(ci->_closure)->_outervalues[_integer(v._src)]; + closure->_outervalues[i] = _closure(ci->_closure)->_outervalues[v._src.toInteger()]; break; } } @@ -676,7 +676,7 @@ bool rabbit::VirtualMachine::IsFalse(rabbit::ObjectPtr &o) { if(((sq_type(o) & SQOBJECT_CANBEFALSE) && ( ((sq_type(o) == rabbit::OT_FLOAT) && (_float(o) == float_t(0.0))) )) - || (_integer(o) == 0) ) //rabbit::OT_NULL|OT_INTEGER|OT_BOOL + || (o.toInteger() == 0) ) //rabbit::OT_NULL|OT_INTEGER|OT_BOOL { return true; } @@ -948,7 +948,7 @@ exception_restore: case _OP_INCL: { rabbit::ObjectPtr &a = STK(arg1); if(sq_type(a) == rabbit::OT_INTEGER) { - a._unVal.nInteger = _integer(a) + sarg3; + a._unVal.nInteger = a.toInteger() + sarg3; } else { rabbit::ObjectPtr o(sarg3); //_GUARD(LOCAL_INC('+',TARGET, STK(arg1), o)); @@ -960,7 +960,7 @@ exception_restore: rabbit::ObjectPtr &a = STK(arg1); if(sq_type(a) == rabbit::OT_INTEGER) { TARGET = a; - a._unVal.nInteger = _integer(a) + sarg3; + a._unVal.nInteger = a.toInteger() + sarg3; } else { rabbit::ObjectPtr o(sarg3); _GUARD(PLOCAL_INC('+',TARGET, STK(arg1), o)); @@ -990,7 +990,7 @@ exception_restore: case _OP_NOT: TARGET = IsFalse(STK(arg1)); continue; case _OP_BWNOT: if(sq_type(STK(arg1)) == rabbit::OT_INTEGER) { - int64_t t = _integer(STK(arg1)); + int64_t t = STK(arg1).toInteger(); TARGET = int64_t(~t); continue; } @@ -1782,8 +1782,8 @@ void rabbit::VirtualMachine::dumpstack(int64_t stackbase,bool dumpall) printf("[" _PRINT_INT_FMT "]:",n); switch(sq_type(obj)){ case rabbit::OT_FLOAT: printf("FLOAT %.3f",_float(obj));break; - case rabbit::OT_INTEGER: printf("INTEGER " _PRINT_INT_FMT,_integer(obj));break; - case rabbit::OT_BOOL: printf("BOOL %s",_integer(obj)?"true":"false");break; + case rabbit::OT_INTEGER: printf("INTEGER " _PRINT_INT_FMT,obj.toInteger());break; + case rabbit::OT_BOOL: printf("BOOL %s",obj.toInteger()?"true":"false");break; case rabbit::OT_STRING: printf("STRING %s",_stringval(obj));break; case rabbit::OT_NULL: printf("NULL"); break; case rabbit::OT_TABLE: printf("TABLE %p[%p]",_table(obj),_table(obj)->_delegate);break; diff --git a/rabbit/sqapi.cpp b/rabbit/sqapi.cpp index e5f79fe..3f7e07f 100644 --- a/rabbit/sqapi.cpp +++ b/rabbit/sqapi.cpp @@ -221,7 +221,7 @@ float_t rabbit::sq_objtofloat(const rabbit::Object *o) rabbit::Bool rabbit::sq_objtobool(const rabbit::Object *o) { if(sq_isbool(*o)) { - return _integer(*o); + return o->toInteger(); } return SQFalse; } @@ -690,7 +690,7 @@ rabbit::Result rabbit::sq_getbool(rabbit::VirtualMachine* v,int64_t idx,rabbit:: { rabbit::ObjectPtr &o = stack_get(v, idx); if(sq_isbool(o)) { - *b = _integer(o); + *b = o.toInteger(); return SQ_OK; } return SQ_ERROR; diff --git a/rabbit/sqbaselib.cpp b/rabbit/sqbaselib.cpp index ddf9ba2..fec9658 100644 --- a/rabbit/sqbaselib.cpp +++ b/rabbit/sqbaselib.cpp @@ -357,7 +357,7 @@ static int64_t default_delegate_tofloat(rabbit::VirtualMachine* v) v->push(rabbit::ObjectPtr(tofloat(o))); break; case rabbit::OT_BOOL: - v->push(rabbit::ObjectPtr((float_t)(_integer(o)?1:0))); + v->push(rabbit::ObjectPtr((float_t)(o.toInteger()?1:0))); break; default: v->pushNull(); @@ -387,7 +387,7 @@ static int64_t default_delegate_tointeger(rabbit::VirtualMachine* v) v->push(rabbit::ObjectPtr(tointeger(o))); break; case rabbit::OT_BOOL: - v->push(rabbit::ObjectPtr(_integer(o)?(int64_t)1:(int64_t)0)); + v->push(rabbit::ObjectPtr(o.toInteger()?(int64_t)1:(int64_t)0)); break; default: v->pushNull(); diff --git a/rabbit/sqdebug.cpp b/rabbit/sqdebug.cpp index 9cbaf5f..06b3cdb 100644 --- a/rabbit/sqdebug.cpp +++ b/rabbit/sqdebug.cpp @@ -90,7 +90,7 @@ rabbit::String *rabbit::VirtualMachine::printObjVal(const rabbit::ObjectPtr &o) switch(sq_type(o)) { case rabbit::OT_STRING: return _string(o); case rabbit::OT_INTEGER: - snprintf(_sp(sq_rsl(NUMBER_UINT8_MAX+1)),sq_rsl(NUMBER_UINT8_MAX), _PRINT_INT_FMT, _integer(o)); + snprintf(_sp(sq_rsl(NUMBER_UINT8_MAX+1)),sq_rsl(NUMBER_UINT8_MAX), _PRINT_INT_FMT, o.toInteger()); return rabbit::String::create(_get_shared_state(this), _spval); break; case rabbit::OT_FLOAT: