[DEV] remote _tointeger()
This commit is contained in:
parent
966b5fdad6
commit
096051c269
@ -17,12 +17,12 @@
|
|||||||
#define MEMBER_TYPE_METHOD 0x01000000
|
#define MEMBER_TYPE_METHOD 0x01000000
|
||||||
#define MEMBER_TYPE_FIELD 0x02000000
|
#define MEMBER_TYPE_FIELD 0x02000000
|
||||||
|
|
||||||
#define _ismethod(o) (_integer(o)&MEMBER_TYPE_METHOD)
|
#define _ismethod(o) (o.toInteger()&MEMBER_TYPE_METHOD)
|
||||||
#define _isfield(o) (_integer(o)&MEMBER_TYPE_FIELD)
|
#define _isfield(o) (o.toInteger()&MEMBER_TYPE_FIELD)
|
||||||
#define _make_method_idx(i) ((int64_t)(MEMBER_TYPE_METHOD|i))
|
#define _make_method_idx(i) ((int64_t)(MEMBER_TYPE_METHOD|i))
|
||||||
#define _make_field_idx(i) ((int64_t)(MEMBER_TYPE_FIELD|i))
|
#define _make_field_idx(i) ((int64_t)(MEMBER_TYPE_FIELD|i))
|
||||||
#define _member_type(o) (_integer(o)&0xFF000000)
|
#define _member_type(o) (o.toInteger()&0xFF000000)
|
||||||
#define _member_idx(o) (_integer(o)&0x00FFFFFF)
|
#define _member_idx(o) (o.toInteger()&0x00FFFFFF)
|
||||||
|
|
||||||
namespace rabbit {
|
namespace rabbit {
|
||||||
class ClassMember {
|
class ClassMember {
|
||||||
|
@ -70,7 +70,7 @@ bool rabbit::WriteObject(rabbit::VirtualMachine* v,rabbit::UserPointer up,SQWRIT
|
|||||||
break;
|
break;
|
||||||
case rabbit::OT_BOOL:
|
case rabbit::OT_BOOL:
|
||||||
case rabbit::OT_INTEGER:
|
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:
|
case rabbit::OT_FLOAT:
|
||||||
_CHECK_IO(SafeWrite(v,write,up,&_float(o),sizeof(float_t)));break;
|
_CHECK_IO(SafeWrite(v,write,up,&_float(o),sizeof(float_t)));break;
|
||||||
case rabbit::OT_NULL:
|
case rabbit::OT_NULL:
|
||||||
|
@ -800,9 +800,9 @@ public:
|
|||||||
/* generate direct or literal function depending on size */
|
/* generate direct or literal function depending on size */
|
||||||
rabbit::ObjectType ctype = sq_type(constval);
|
rabbit::ObjectType ctype = sq_type(constval);
|
||||||
switch(ctype) {
|
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_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;
|
default: _fs->addInstruction(_OP_LOAD,_es.epos,_fs->getConstant(constval)); break;
|
||||||
}
|
}
|
||||||
_es.etype = EXPR;
|
_es.etype = EXPR;
|
||||||
|
@ -102,8 +102,8 @@ static void dumpLiteral(rabbit::ObjectPtr &o) {
|
|||||||
switch(sq_type(o)){
|
switch(sq_type(o)){
|
||||||
case rabbit::OT_STRING: printf("\"%s\"",_stringval(o));break;
|
case rabbit::OT_STRING: printf("\"%s\"",_stringval(o));break;
|
||||||
case rabbit::OT_FLOAT: printf("{%f}",_float(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_INTEGER: printf("{" _PRINT_INT_FMT "}",o.toInteger());break;
|
||||||
case rabbit::OT_BOOL: printf("%s",_integer(o)?"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*)_rawval(o));break; break; //shut up compiler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -150,7 +150,7 @@ void rabbit::FuncState::dump(rabbit::FunctionProto *func)
|
|||||||
templiterals.resize(_nliterals);
|
templiterals.resize(_nliterals);
|
||||||
while((idx=_table(_literals)->next(false,refidx,key,val))!=-1) {
|
while((idx=_table(_literals)->next(false,refidx,key,val))!=-1) {
|
||||||
refidx=idx;
|
refidx=idx;
|
||||||
templiterals[_integer(val)]=key;
|
templiterals[val.toInteger()]=key;
|
||||||
}
|
}
|
||||||
for(i=0;i<templiterals.size();i++){
|
for(i=0;i<templiterals.size();i++){
|
||||||
printf("[%d] ", (int32_t)n);
|
printf("[%d] ", (int32_t)n);
|
||||||
@ -193,7 +193,7 @@ void rabbit::FuncState::dump(rabbit::FunctionProto *func)
|
|||||||
else {
|
else {
|
||||||
int64_t refidx;
|
int64_t refidx;
|
||||||
rabbit::ObjectPtr val,key,refo;
|
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;
|
refo = refidx;
|
||||||
}
|
}
|
||||||
dumpLiteral(key);
|
dumpLiteral(key);
|
||||||
@ -209,7 +209,7 @@ void rabbit::FuncState::dump(rabbit::FunctionProto *func)
|
|||||||
else {
|
else {
|
||||||
int64_t refidx;
|
int64_t refidx;
|
||||||
rabbit::ObjectPtr val,key,refo;
|
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;
|
refo = refidx;
|
||||||
}
|
}
|
||||||
dumpLiteral(key);
|
dumpLiteral(key);
|
||||||
@ -257,7 +257,7 @@ int64_t rabbit::FuncState::getConstant(const rabbit::Object &cons)
|
|||||||
error("internal compiler error: too many literals");
|
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)
|
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;
|
f->_name = _name;
|
||||||
|
|
||||||
while((idx=_table(_literals)->next(false,refidx,key,val))!=-1) {
|
while((idx=_table(_literals)->next(false,refidx,key,val))!=-1) {
|
||||||
f->_literals[_integer(val)]=key;
|
f->_literals[val.toInteger()]=key;
|
||||||
refidx=idx;
|
refidx=idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ const char *rabbit::Lexer::tok2Str(int64_t tok)
|
|||||||
int64_t nitr;
|
int64_t nitr;
|
||||||
while((nitr = _keywords->next(false,itr, key, val)) != -1) {
|
while((nitr = _keywords->next(false,itr, key, val)) != -1) {
|
||||||
itr = (int64_t)nitr;
|
itr = (int64_t)nitr;
|
||||||
if(((int64_t)_integer(val)) == tok)
|
if(((int64_t)val.toInteger()) == tok)
|
||||||
return _stringval(key);
|
return _stringval(key);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -286,7 +286,7 @@ int64_t rabbit::Lexer::getIDType(const char *s,int64_t len)
|
|||||||
{
|
{
|
||||||
rabbit::ObjectPtr t;
|
rabbit::ObjectPtr t;
|
||||||
if(_keywords->getStr(s,len, t)) {
|
if(_keywords->getStr(s,len, t)) {
|
||||||
return int64_t(_integer(t));
|
return int64_t(t.toInteger());
|
||||||
}
|
}
|
||||||
return TK_IDENTIFIER;
|
return TK_IDENTIFIER;
|
||||||
}
|
}
|
||||||
|
@ -149,7 +149,6 @@ 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 _integer(obj) ((obj)._unVal.nInteger)
|
|
||||||
#define _float(obj) ((obj)._unVal.fFloat)
|
#define _float(obj) ((obj)._unVal.fFloat)
|
||||||
#define _string(obj) ((obj)._unVal.pString)
|
#define _string(obj) ((obj)._unVal.pString)
|
||||||
#define _table(obj) ((obj)._unVal.pTable)
|
#define _table(obj) ((obj)._unVal.pTable)
|
||||||
@ -171,8 +170,8 @@ namespace rabbit {
|
|||||||
#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)_integer(num):_float(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):_integer(num))
|
#define tointeger(num) ((sq_type(num)==rabbit::OT_FLOAT)?(int64_t)_float(num):(num).toInteger())
|
||||||
|
|
||||||
|
|
||||||
#define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC)
|
#define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC)
|
||||||
|
@ -145,7 +145,7 @@ uint64_t rabbit::translateIndex(const rabbit::ObjectPtr &idx)
|
|||||||
case rabbit::OT_NULL:
|
case rabbit::OT_NULL:
|
||||||
return 0;
|
return 0;
|
||||||
case rabbit::OT_INTEGER:
|
case rabbit::OT_INTEGER:
|
||||||
return (uint64_t)_integer(idx);
|
return (uint64_t)idx.toInteger();
|
||||||
default: assert(0); break;
|
default: assert(0); break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -200,7 +200,7 @@ int64_t rabbit::SharedState::getMetaMethodIdxByName(const rabbit::ObjectPtr &nam
|
|||||||
}
|
}
|
||||||
rabbit::ObjectPtr ret;
|
rabbit::ObjectPtr ret;
|
||||||
if(_table(_metamethodsmap)->get(name,ret)) {
|
if(_table(_metamethodsmap)->get(name,ret)) {
|
||||||
return _integer(ret);
|
return ret.toInteger();
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ rabbit::Hash rabbit::HashObj(const rabbit::ObjectPtr &key) {
|
|||||||
return (rabbit::Hash)((int64_t)_float(key));
|
return (rabbit::Hash)((int64_t)_float(key));
|
||||||
case rabbit::OT_BOOL:
|
case rabbit::OT_BOOL:
|
||||||
case rabbit::OT_INTEGER:
|
case rabbit::OT_INTEGER:
|
||||||
return (rabbit::Hash)((int64_t)_integer(key));
|
return (rabbit::Hash)((int64_t)key.toInteger());
|
||||||
default:
|
default:
|
||||||
return hashptr(key._unVal.pRefCounted);
|
return hashptr(key._unVal.pRefCounted);
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ bool rabbit::VirtualMachine::BW_OP(uint64_t op,rabbit::ObjectPtr &trg,const rabb
|
|||||||
int64_t res;
|
int64_t res;
|
||||||
if((sq_type(o1)| sq_type(o2)) == rabbit::OT_INTEGER)
|
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) {
|
switch(op) {
|
||||||
case BW_AND: res = i1 & i2; break;
|
case BW_AND: res = i1 & i2; break;
|
||||||
case BW_OR: 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); \
|
int64_t tmask = sq_type(o1)|sq_type(o2); \
|
||||||
switch(tmask) { \
|
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|OT_INTEGER): \
|
||||||
case (rabbit::OT_FLOAT): trg = tofloat(o1) op tofloat(o2); break;\
|
case (rabbit::OT_FLOAT): trg = tofloat(o1) op tofloat(o2); break;\
|
||||||
default: _GUARD(ARITH_OP((#op)[0],trg,o1,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); \
|
int64_t tmask = sq_type(o1)|sq_type(o2); \
|
||||||
switch(tmask) { \
|
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|OT_INTEGER): \
|
||||||
case (rabbit::OT_FLOAT): trg = tofloat(o1) op tofloat(o2); break;\
|
case (rabbit::OT_FLOAT): trg = tofloat(o1) op tofloat(o2); break;\
|
||||||
default: _GUARD(ARITH_OP((#op)[0],trg,o1,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);
|
int64_t tmask = sq_type(o1)| sq_type(o2);
|
||||||
switch(tmask) {
|
switch(tmask) {
|
||||||
case rabbit::OT_INTEGER:{
|
case rabbit::OT_INTEGER:{
|
||||||
int64_t res, i1 = _integer(o1), i2 = _integer(o2);
|
int64_t res, i1 = o1.toInteger(), i2 = o2.toInteger();
|
||||||
switch(op) {
|
switch(op) {
|
||||||
case '+': res = i1 + i2; break;
|
case '+': res = i1 + i2; break;
|
||||||
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)) {
|
switch(sq_type(o)) {
|
||||||
case rabbit::OT_INTEGER:
|
case rabbit::OT_INTEGER:
|
||||||
trg = -_integer(o);
|
trg = -o.toInteger();
|
||||||
return true;
|
return true;
|
||||||
case rabbit::OT_FLOAT:
|
case rabbit::OT_FLOAT:
|
||||||
trg = -_float(o);
|
trg = -_float(o);
|
||||||
@ -233,7 +233,7 @@ bool rabbit::VirtualMachine::objCmp(const rabbit::ObjectPtr &o1,const rabbit::Ob
|
|||||||
case rabbit::OT_STRING:
|
case rabbit::OT_STRING:
|
||||||
_RET_SUCCEED(strcmp(_stringval(o1),_stringval(o2)));
|
_RET_SUCCEED(strcmp(_stringval(o1),_stringval(o2)));
|
||||||
case rabbit::OT_INTEGER:
|
case rabbit::OT_INTEGER:
|
||||||
_RET_SUCCEED((_integer(o1)<_integer(o2))?-1:1);
|
_RET_SUCCEED((o1.toInteger()<o2.toInteger())?-1:1);
|
||||||
case rabbit::OT_FLOAT:
|
case rabbit::OT_FLOAT:
|
||||||
_RET_SUCCEED((_float(o1)<_float(o2))?-1:1);
|
_RET_SUCCEED((_float(o1)<_float(o2))?-1:1);
|
||||||
case rabbit::OT_TABLE:
|
case rabbit::OT_TABLE:
|
||||||
@ -248,7 +248,7 @@ bool rabbit::VirtualMachine::objCmp(const rabbit::ObjectPtr &o1,const rabbit::Ob
|
|||||||
raise_error("_cmp must return an integer");
|
raise_error("_cmp must return an integer");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
_RET_SUCCEED(_integer(res))
|
_RET_SUCCEED(res.toInteger())
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -259,19 +259,19 @@ bool rabbit::VirtualMachine::objCmp(const rabbit::ObjectPtr &o1,const rabbit::Ob
|
|||||||
}
|
}
|
||||||
assert(0);
|
assert(0);
|
||||||
//if(type(res)!=rabbit::OT_INTEGER) { raise_Compareerror(o1,o2); return false; }
|
//if(type(res)!=rabbit::OT_INTEGER) { raise_Compareerror(o1,o2); return false; }
|
||||||
// _RET_SUCCEED(_integer(res));
|
// _RET_SUCCEED(res.toInteger());
|
||||||
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if(sq_isnumeric(o1) && sq_isnumeric(o2)){
|
if(sq_isnumeric(o1) && sq_isnumeric(o2)){
|
||||||
if((t1==rabbit::OT_INTEGER) && (t2==OT_FLOAT)) {
|
if((t1==rabbit::OT_INTEGER) && (t2==OT_FLOAT)) {
|
||||||
if( _integer(o1)==_float(o2) ) { _RET_SUCCEED(0); }
|
if( o1.toInteger()==_float(o2) ) { _RET_SUCCEED(0); }
|
||||||
else if( _integer(o1)<_float(o2) ) { _RET_SUCCEED(-1); }
|
else if( o1.toInteger()<_float(o2) ) { _RET_SUCCEED(-1); }
|
||||||
_RET_SUCCEED(1);
|
_RET_SUCCEED(1);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if( _float(o1)==_integer(o2) ) { _RET_SUCCEED(0); }
|
if( _float(o1)==o2.toInteger() ) { _RET_SUCCEED(0); }
|
||||||
else if( _float(o1)<_integer(o2) ) { _RET_SUCCEED(-1); }
|
else if( _float(o1)<o2.toInteger() ) { _RET_SUCCEED(-1); }
|
||||||
_RET_SUCCEED(1);
|
_RET_SUCCEED(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -310,10 +310,10 @@ bool rabbit::VirtualMachine::toString(const rabbit::ObjectPtr &o,rabbit::ObjectP
|
|||||||
snprintf(_sp(sq_rsl(NUMBER_UINT8_MAX+1)),sq_rsl(NUMBER_UINT8_MAX),"%g",_float(o));
|
snprintf(_sp(sq_rsl(NUMBER_UINT8_MAX+1)),sq_rsl(NUMBER_UINT8_MAX),"%g",_float(o));
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_INTEGER:
|
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());
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_BOOL:
|
case rabbit::OT_BOOL:
|
||||||
snprintf(_sp(sq_rsl(6)),sq_rsl(6),_integer(o)?"true":"false");
|
snprintf(_sp(sq_rsl(6)),sq_rsl(6),o.toInteger()?"true":"false");
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_TABLE:
|
case rabbit::OT_TABLE:
|
||||||
case rabbit::OT_USERDATA:
|
case rabbit::OT_USERDATA:
|
||||||
@ -581,7 +581,7 @@ bool rabbit::VirtualMachine::FOREACH_OP(rabbit::ObjectPtr &o1,rabbit::ObjectPtr
|
|||||||
if(_generator(o1)->_state == rabbit::Generator::eSuspended) {
|
if(_generator(o1)->_state == rabbit::Generator::eSuspended) {
|
||||||
int64_t idx = 0;
|
int64_t idx = 0;
|
||||||
if(sq_type(o4) == rabbit::OT_INTEGER) {
|
if(sq_type(o4) == rabbit::OT_INTEGER) {
|
||||||
idx = _integer(o4) + 1;
|
idx = o4.toInteger() + 1;
|
||||||
}
|
}
|
||||||
o2 = idx;
|
o2 = idx;
|
||||||
o4 = idx;
|
o4 = idx;
|
||||||
@ -609,10 +609,10 @@ bool rabbit::VirtualMachine::CLOSURE_OP(rabbit::ObjectPtr &target, rabbit::Funct
|
|||||||
rabbit::OuterVar &v = func->_outervalues[i];
|
rabbit::OuterVar &v = func->_outervalues[i];
|
||||||
switch(v._type){
|
switch(v._type){
|
||||||
case otLOCAL:
|
case otLOCAL:
|
||||||
findOuter(closure->_outervalues[i], &STK(_integer(v._src)));
|
findOuter(closure->_outervalues[i], &STK(v._src.toInteger()));
|
||||||
break;
|
break;
|
||||||
case otOUTER:
|
case otOUTER:
|
||||||
closure->_outervalues[i] = _closure(ci->_closure)->_outervalues[_integer(v._src)];
|
closure->_outervalues[i] = _closure(ci->_closure)->_outervalues[v._src.toInteger()];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -676,7 +676,7 @@ bool rabbit::VirtualMachine::IsFalse(rabbit::ObjectPtr &o)
|
|||||||
{
|
{
|
||||||
if(((sq_type(o) & SQOBJECT_CANBEFALSE)
|
if(((sq_type(o) & SQOBJECT_CANBEFALSE)
|
||||||
&& ( ((sq_type(o) == rabbit::OT_FLOAT) && (_float(o) == float_t(0.0))) ))
|
&& ( ((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;
|
return true;
|
||||||
}
|
}
|
||||||
@ -948,7 +948,7 @@ exception_restore:
|
|||||||
case _OP_INCL: {
|
case _OP_INCL: {
|
||||||
rabbit::ObjectPtr &a = STK(arg1);
|
rabbit::ObjectPtr &a = STK(arg1);
|
||||||
if(sq_type(a) == rabbit::OT_INTEGER) {
|
if(sq_type(a) == rabbit::OT_INTEGER) {
|
||||||
a._unVal.nInteger = _integer(a) + sarg3;
|
a._unVal.nInteger = a.toInteger() + sarg3;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rabbit::ObjectPtr o(sarg3); //_GUARD(LOCAL_INC('+',TARGET, STK(arg1), o));
|
rabbit::ObjectPtr o(sarg3); //_GUARD(LOCAL_INC('+',TARGET, STK(arg1), o));
|
||||||
@ -960,7 +960,7 @@ exception_restore:
|
|||||||
rabbit::ObjectPtr &a = STK(arg1);
|
rabbit::ObjectPtr &a = STK(arg1);
|
||||||
if(sq_type(a) == rabbit::OT_INTEGER) {
|
if(sq_type(a) == rabbit::OT_INTEGER) {
|
||||||
TARGET = a;
|
TARGET = a;
|
||||||
a._unVal.nInteger = _integer(a) + sarg3;
|
a._unVal.nInteger = a.toInteger() + sarg3;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rabbit::ObjectPtr o(sarg3); _GUARD(PLOCAL_INC('+',TARGET, STK(arg1), o));
|
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_NOT: TARGET = IsFalse(STK(arg1)); continue;
|
||||||
case _OP_BWNOT:
|
case _OP_BWNOT:
|
||||||
if(sq_type(STK(arg1)) == rabbit::OT_INTEGER) {
|
if(sq_type(STK(arg1)) == rabbit::OT_INTEGER) {
|
||||||
int64_t t = _integer(STK(arg1));
|
int64_t t = STK(arg1).toInteger();
|
||||||
TARGET = int64_t(~t);
|
TARGET = int64_t(~t);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1782,8 +1782,8 @@ void rabbit::VirtualMachine::dumpstack(int64_t stackbase,bool dumpall)
|
|||||||
printf("[" _PRINT_INT_FMT "]:",n);
|
printf("[" _PRINT_INT_FMT "]:",n);
|
||||||
switch(sq_type(obj)){
|
switch(sq_type(obj)){
|
||||||
case rabbit::OT_FLOAT: printf("FLOAT %.3f",_float(obj));break;
|
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_INTEGER: printf("INTEGER " _PRINT_INT_FMT,obj.toInteger());break;
|
||||||
case rabbit::OT_BOOL: printf("BOOL %s",_integer(obj)?"true":"false");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_STRING: printf("STRING %s",_stringval(obj));break;
|
||||||
case rabbit::OT_NULL: printf("NULL"); break;
|
case rabbit::OT_NULL: printf("NULL"); break;
|
||||||
case rabbit::OT_TABLE: printf("TABLE %p[%p]",_table(obj),_table(obj)->_delegate);break;
|
case rabbit::OT_TABLE: printf("TABLE %p[%p]",_table(obj),_table(obj)->_delegate);break;
|
||||||
|
@ -221,7 +221,7 @@ float_t rabbit::sq_objtofloat(const rabbit::Object *o)
|
|||||||
rabbit::Bool rabbit::sq_objtobool(const rabbit::Object *o)
|
rabbit::Bool rabbit::sq_objtobool(const rabbit::Object *o)
|
||||||
{
|
{
|
||||||
if(sq_isbool(*o)) {
|
if(sq_isbool(*o)) {
|
||||||
return _integer(*o);
|
return o->toInteger();
|
||||||
}
|
}
|
||||||
return SQFalse;
|
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);
|
rabbit::ObjectPtr &o = stack_get(v, idx);
|
||||||
if(sq_isbool(o)) {
|
if(sq_isbool(o)) {
|
||||||
*b = _integer(o);
|
*b = o.toInteger();
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
return SQ_ERROR;
|
return SQ_ERROR;
|
||||||
|
@ -357,7 +357,7 @@ static int64_t default_delegate_tofloat(rabbit::VirtualMachine* v)
|
|||||||
v->push(rabbit::ObjectPtr(tofloat(o)));
|
v->push(rabbit::ObjectPtr(tofloat(o)));
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_BOOL:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
v->pushNull();
|
v->pushNull();
|
||||||
@ -387,7 +387,7 @@ static int64_t default_delegate_tointeger(rabbit::VirtualMachine* v)
|
|||||||
v->push(rabbit::ObjectPtr(tointeger(o)));
|
v->push(rabbit::ObjectPtr(tointeger(o)));
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_BOOL:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
v->pushNull();
|
v->pushNull();
|
||||||
|
@ -90,7 +90,7 @@ rabbit::String *rabbit::VirtualMachine::printObjVal(const rabbit::ObjectPtr &o)
|
|||||||
switch(sq_type(o)) {
|
switch(sq_type(o)) {
|
||||||
case rabbit::OT_STRING: return _string(o);
|
case rabbit::OT_STRING: return _string(o);
|
||||||
case rabbit::OT_INTEGER:
|
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);
|
return rabbit::String::create(_get_shared_state(this), _spval);
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_FLOAT:
|
case rabbit::OT_FLOAT:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user