[DEV] remote _tofloat()
This commit is contained in:
parent
096051c269
commit
0f930d76f7
@ -72,7 +72,7 @@ bool rabbit::WriteObject(rabbit::VirtualMachine* v,rabbit::UserPointer up,SQWRIT
|
|||||||
case rabbit::OT_INTEGER:
|
case rabbit::OT_INTEGER:
|
||||||
_CHECK_IO(SafeWrite(v,write,up,&o.toInteger(),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,&o.toFloat(),sizeof(float_t)));break;
|
||||||
case rabbit::OT_NULL:
|
case rabbit::OT_NULL:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -801,7 +801,7 @@ public:
|
|||||||
rabbit::ObjectType ctype = sq_type(constval);
|
rabbit::ObjectType ctype = sq_type(constval);
|
||||||
switch(ctype) {
|
switch(ctype) {
|
||||||
case rabbit::OT_INTEGER: EmitloadConstInt(constval.toInteger(),_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(constval.toFloat(),_es.epos); break;
|
||||||
case rabbit::OT_BOOL: _fs->addInstruction(_OP_LOADBOOL, _es.epos, constval.toInteger()); 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;
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ void rabbit::FuncState::addInstruction(SQOpcode _op,int64_t arg0,int64_t arg1,in
|
|||||||
static void dumpLiteral(rabbit::ObjectPtr &o) {
|
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}",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*)_rawval(o));break; break; //shut up compiler
|
||||||
|
@ -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 _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)
|
||||||
#define _closure(obj) ((obj)._unVal.pClosure)
|
#define _closure(obj) ((obj)._unVal.pClosure)
|
||||||
@ -170,8 +169,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)(num).toInteger():_float(num))
|
#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)_float(num):(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)
|
||||||
|
@ -15,7 +15,7 @@ rabbit::Hash rabbit::HashObj(const rabbit::ObjectPtr &key) {
|
|||||||
case rabbit::OT_STRING:
|
case rabbit::OT_STRING:
|
||||||
return _string(key)->_hash;
|
return _string(key)->_hash;
|
||||||
case rabbit::OT_FLOAT:
|
case rabbit::OT_FLOAT:
|
||||||
return (rabbit::Hash)((int64_t)_float(key));
|
return (rabbit::Hash)((int64_t)key.toFloat());
|
||||||
case rabbit::OT_BOOL:
|
case rabbit::OT_BOOL:
|
||||||
case rabbit::OT_INTEGER:
|
case rabbit::OT_INTEGER:
|
||||||
return (rabbit::Hash)((int64_t)key.toInteger());
|
return (rabbit::Hash)((int64_t)key.toInteger());
|
||||||
|
@ -201,7 +201,7 @@ bool rabbit::VirtualMachine::NEG_OP(rabbit::ObjectPtr &trg,const rabbit::ObjectP
|
|||||||
trg = -o.toInteger();
|
trg = -o.toInteger();
|
||||||
return true;
|
return true;
|
||||||
case rabbit::OT_FLOAT:
|
case rabbit::OT_FLOAT:
|
||||||
trg = -_float(o);
|
trg = -o.toFloat();
|
||||||
return true;
|
return true;
|
||||||
case rabbit::OT_TABLE:
|
case rabbit::OT_TABLE:
|
||||||
case rabbit::OT_USERDATA:
|
case rabbit::OT_USERDATA:
|
||||||
@ -235,7 +235,7 @@ bool rabbit::VirtualMachine::objCmp(const rabbit::ObjectPtr &o1,const rabbit::Ob
|
|||||||
case rabbit::OT_INTEGER:
|
case rabbit::OT_INTEGER:
|
||||||
_RET_SUCCEED((o1.toInteger()<o2.toInteger())?-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((o1.toFloat()<o2.toFloat())?-1:1);
|
||||||
case rabbit::OT_TABLE:
|
case rabbit::OT_TABLE:
|
||||||
case rabbit::OT_USERDATA:
|
case rabbit::OT_USERDATA:
|
||||||
case rabbit::OT_INSTANCE:
|
case rabbit::OT_INSTANCE:
|
||||||
@ -265,13 +265,13 @@ bool rabbit::VirtualMachine::objCmp(const rabbit::ObjectPtr &o1,const rabbit::Ob
|
|||||||
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( o1.toInteger()==_float(o2) ) { _RET_SUCCEED(0); }
|
if( o1.toInteger()==o2.toFloat() ) { _RET_SUCCEED(0); }
|
||||||
else if( o1.toInteger()<_float(o2) ) { _RET_SUCCEED(-1); }
|
else if( o1.toInteger()<o2.toFloat() ) { _RET_SUCCEED(-1); }
|
||||||
_RET_SUCCEED(1);
|
_RET_SUCCEED(1);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if( _float(o1)==o2.toInteger() ) { _RET_SUCCEED(0); }
|
if( o1.toFloat()==o2.toInteger() ) { _RET_SUCCEED(0); }
|
||||||
else if( _float(o1)<o2.toInteger() ) { _RET_SUCCEED(-1); }
|
else if( o1.toFloat()<o2.toInteger() ) { _RET_SUCCEED(-1); }
|
||||||
_RET_SUCCEED(1);
|
_RET_SUCCEED(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -307,7 +307,7 @@ bool rabbit::VirtualMachine::toString(const rabbit::ObjectPtr &o,rabbit::ObjectP
|
|||||||
res = o;
|
res = o;
|
||||||
return true;
|
return true;
|
||||||
case rabbit::OT_FLOAT:
|
case rabbit::OT_FLOAT:
|
||||||
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",o.toFloat());
|
||||||
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,o.toInteger());
|
snprintf(_sp(sq_rsl(NUMBER_UINT8_MAX+1)),sq_rsl(NUMBER_UINT8_MAX),_PRINT_INT_FMT,o.toInteger());
|
||||||
@ -675,7 +675,7 @@ bool rabbit::VirtualMachine::isEqual(const rabbit::ObjectPtr &o1,const rabbit::O
|
|||||||
bool rabbit::VirtualMachine::IsFalse(rabbit::ObjectPtr &o)
|
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) && (o.toFloat() == float_t(0.0))) ))
|
||||||
|| (o.toInteger() == 0) ) //rabbit::OT_NULL|OT_INTEGER|OT_BOOL
|
|| (o.toInteger() == 0) ) //rabbit::OT_NULL|OT_INTEGER|OT_BOOL
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@ -1781,7 +1781,7 @@ 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",obj.toFloat());break;
|
||||||
case rabbit::OT_INTEGER: printf("INTEGER " _PRINT_INT_FMT,obj.toInteger());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_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;
|
||||||
|
@ -94,7 +94,7 @@ rabbit::String *rabbit::VirtualMachine::printObjVal(const rabbit::ObjectPtr &o)
|
|||||||
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:
|
||||||
snprintf(_sp(sq_rsl(NUMBER_UINT8_MAX+1)), sq_rsl(NUMBER_UINT8_MAX), "%.14g", _float(o));
|
snprintf(_sp(sq_rsl(NUMBER_UINT8_MAX+1)), sq_rsl(NUMBER_UINT8_MAX), "%.14g", o.toFloat());
|
||||||
return rabbit::String::create(_get_shared_state(this), _spval);
|
return rabbit::String::create(_get_shared_state(this), _spval);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user