[DEV] remote _tofloat()

This commit is contained in:
Edouard DUPIN 2018-07-03 21:43:55 +02:00
parent 096051c269
commit 0f930d76f7
7 changed files with 16 additions and 17 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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