[DEV] remove to_integer() and to_float()
This commit is contained in:
parent
74d6af9ac4
commit
fa37b1fedb
@ -30,6 +30,24 @@ namespace rabbit {
|
|||||||
float_t toFloat() const {
|
float_t toFloat() const {
|
||||||
return _unVal.fFloat;
|
return _unVal.fFloat;
|
||||||
}
|
}
|
||||||
|
int64_t toIntegerValue() const {
|
||||||
|
if (isInteger() == true){
|
||||||
|
return _unVal.nInteger;
|
||||||
|
}
|
||||||
|
if (isFloat() == true){
|
||||||
|
return _unVal.fFloat;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
float_t toFloatValue() const {
|
||||||
|
if (isFloat() == true){
|
||||||
|
return _unVal.fFloat;
|
||||||
|
}
|
||||||
|
if (isInteger() == true){
|
||||||
|
return _unVal.nInteger;
|
||||||
|
}
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
rabbit::String*& toString() {
|
rabbit::String*& toString() {
|
||||||
return _unVal.pString;
|
return _unVal.pString;
|
||||||
}
|
}
|
||||||
@ -219,9 +237,6 @@ 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) (((num).isInteger()==true)?(float_t)(num).toInteger():(num).toFloat())
|
|
||||||
#define tointeger(num) (((num).isFloat()==true)?(int64_t)(num).toFloat():(num).toInteger())
|
|
||||||
|
|
||||||
inline void _Swap(rabbit::Object &a,rabbit::Object &b)
|
inline void _Swap(rabbit::Object &a,rabbit::Object &b)
|
||||||
{
|
{
|
||||||
rabbit::ObjectType tOldType = a._type;
|
rabbit::ObjectType tOldType = a._type;
|
||||||
|
@ -77,7 +77,7 @@ void rabbit::VirtualMachine::release() {
|
|||||||
switch(tmask) { \
|
switch(tmask) { \
|
||||||
case rabbit::OT_INTEGER: trg = o1.toInteger() op o2.toInteger();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 = o1.toFloatValue() op o2.toFloatValue(); break;\
|
||||||
default: _GUARD(ARITH_OP((#op)[0],trg,o1,o2)); break;\
|
default: _GUARD(ARITH_OP((#op)[0],trg,o1,o2)); break;\
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
@ -88,7 +88,7 @@ void rabbit::VirtualMachine::release() {
|
|||||||
switch(tmask) { \
|
switch(tmask) { \
|
||||||
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_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 = o1.toFloatValue() op o2.toFloatValue(); break;\
|
||||||
default: _GUARD(ARITH_OP((#op)[0],trg,o1,o2)); break;\
|
default: _GUARD(ARITH_OP((#op)[0],trg,o1,o2)); break;\
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
@ -117,14 +117,14 @@ bool rabbit::VirtualMachine::ARITH_OP(uint64_t op,rabbit::ObjectPtr &trg,const r
|
|||||||
break;
|
break;
|
||||||
case (rabbit::OT_FLOAT|OT_INTEGER):
|
case (rabbit::OT_FLOAT|OT_INTEGER):
|
||||||
case (rabbit::OT_FLOAT):{
|
case (rabbit::OT_FLOAT):{
|
||||||
float_t res, f1 = tofloat(o1), f2 = tofloat(o2);
|
float_t res, f1 = o1.toFloatValue(), f2 = o2.toFloatValue();
|
||||||
switch(op) {
|
switch(op) {
|
||||||
case '+': res = f1 + f2; break;
|
case '+': res = f1 + f2; break;
|
||||||
case '-': res = f1 - f2; break;
|
case '-': res = f1 - f2; break;
|
||||||
case '/': res = f1 / f2; break;
|
case '/': res = f1 / f2; break;
|
||||||
case '*': res = f1 * f2; break;
|
case '*': res = f1 * f2; break;
|
||||||
case '%': res = float_t(fmod((double)f1,(double)f2)); break;
|
case '%': res = float_t(fmod((double)f1,(double)f2)); break;
|
||||||
default: res = 0x0f;
|
default: res = 0x0f;
|
||||||
}
|
}
|
||||||
trg = res; }
|
trg = res; }
|
||||||
break;
|
break;
|
||||||
@ -692,7 +692,7 @@ bool rabbit::VirtualMachine::isEqual(const rabbit::ObjectPtr &o1,const rabbit::O
|
|||||||
} else {
|
} else {
|
||||||
if( o1.isNumeric() == true
|
if( o1.isNumeric() == true
|
||||||
&& o2.isNumeric() == true) {
|
&& o2.isNumeric() == true) {
|
||||||
res = (tofloat(o1) == tofloat(o2));
|
res = o1.toFloatValue() == o2.toFloatValue();
|
||||||
} else {
|
} else {
|
||||||
res = false;
|
res = false;
|
||||||
}
|
}
|
||||||
@ -1305,7 +1305,7 @@ bool rabbit::VirtualMachine::get(const rabbit::ObjectPtr &self, const rabbit::Ob
|
|||||||
break;
|
break;
|
||||||
case rabbit::OT_ARRAY:
|
case rabbit::OT_ARRAY:
|
||||||
if (key.isNumeric() == true) {
|
if (key.isNumeric() == true) {
|
||||||
if (self.toArray()->get(tointeger(key), dest)) {
|
if (self.toArray()->get(key.toIntegerValue(), dest)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if ((getflags & GET_FLAG_DO_NOT_RAISE_ERROR) == 0) {
|
if ((getflags & GET_FLAG_DO_NOT_RAISE_ERROR) == 0) {
|
||||||
@ -1326,7 +1326,7 @@ bool rabbit::VirtualMachine::get(const rabbit::ObjectPtr &self, const rabbit::Ob
|
|||||||
break;
|
break;
|
||||||
case rabbit::OT_STRING:
|
case rabbit::OT_STRING:
|
||||||
if(key.isNumeric()){
|
if(key.isNumeric()){
|
||||||
int64_t n = tointeger(key);
|
int64_t n = key.toIntegerValue();
|
||||||
int64_t len = self.toString()->_len;
|
int64_t len = self.toString()->_len;
|
||||||
if (n < 0) { n += len; }
|
if (n < 0) { n += len; }
|
||||||
if (n >= 0 && n < len) {
|
if (n >= 0 && n < len) {
|
||||||
@ -1437,7 +1437,7 @@ bool rabbit::VirtualMachine::set(const rabbit::ObjectPtr &self,const rabbit::Obj
|
|||||||
break;
|
break;
|
||||||
case rabbit::OT_ARRAY:
|
case rabbit::OT_ARRAY:
|
||||||
if(key.isNumeric() == false) { raise_error("indexing %s with %s",getTypeName(self),getTypeName(key)); return false; }
|
if(key.isNumeric() == false) { raise_error("indexing %s with %s",getTypeName(self),getTypeName(key)); return false; }
|
||||||
if(!self.toArray()->set(tointeger(key),val)) {
|
if(!self.toArray()->set(key.toIntegerValue(),val)) {
|
||||||
raise_Idxerror(key);
|
raise_Idxerror(key);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -217,7 +217,7 @@ const char * rabbit::sq_objtostring(const rabbit::Object *o)
|
|||||||
int64_t rabbit::sq_objtointeger(const rabbit::Object *o)
|
int64_t rabbit::sq_objtointeger(const rabbit::Object *o)
|
||||||
{
|
{
|
||||||
if(o->isNumeric() == true) {
|
if(o->isNumeric() == true) {
|
||||||
return tointeger(*o);
|
return o->toIntegerValue();
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -225,7 +225,7 @@ int64_t rabbit::sq_objtointeger(const rabbit::Object *o)
|
|||||||
float_t rabbit::sq_objtofloat(const rabbit::Object *o)
|
float_t rabbit::sq_objtofloat(const rabbit::Object *o)
|
||||||
{
|
{
|
||||||
if(o->isNumeric() == true) {
|
if(o->isNumeric() == true) {
|
||||||
return tofloat(*o);
|
return o->toFloatValue();
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -684,7 +684,7 @@ rabbit::Result rabbit::sq_getinteger(rabbit::VirtualMachine* v,int64_t idx,int64
|
|||||||
{
|
{
|
||||||
rabbit::ObjectPtr &o = stack_get(v, idx);
|
rabbit::ObjectPtr &o = stack_get(v, idx);
|
||||||
if(o.isNumeric() == true) {
|
if(o.isNumeric() == true) {
|
||||||
*i = tointeger(o);
|
*i = o.toIntegerValue();
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
if(o.isBoolean() == true) {
|
if(o.isBoolean() == true) {
|
||||||
@ -698,7 +698,7 @@ rabbit::Result rabbit::sq_getfloat(rabbit::VirtualMachine* v,int64_t idx,float_t
|
|||||||
{
|
{
|
||||||
rabbit::ObjectPtr &o = stack_get(v, idx);
|
rabbit::ObjectPtr &o = stack_get(v, idx);
|
||||||
if(o.isNumeric() == true) {
|
if(o.isNumeric() == true) {
|
||||||
*f = tofloat(o);
|
*f = o.toFloatValue();
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
return SQ_ERROR;
|
return SQ_ERROR;
|
||||||
@ -1131,7 +1131,7 @@ rabbit::Result rabbit::sq_rawget(rabbit::VirtualMachine* v,int64_t idx) {
|
|||||||
break;
|
break;
|
||||||
case rabbit::OT_ARRAY:
|
case rabbit::OT_ARRAY:
|
||||||
if(obj.isNumeric() == true) {
|
if(obj.isNumeric() == true) {
|
||||||
if(self.toArray()->get(tointeger(obj), obj)) {
|
if(self.toArray()->get(obj.toIntegerValue(), obj)) {
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -178,13 +178,13 @@ static int64_t get_slice_params(rabbit::VirtualMachine* v,int64_t &sidx,int64_t
|
|||||||
rabbit::ObjectPtr &start=stack_get(v,2);
|
rabbit::ObjectPtr &start=stack_get(v,2);
|
||||||
if( start.isNull() == false
|
if( start.isNull() == false
|
||||||
&& start.isNumeric() == true){
|
&& start.isNumeric() == true){
|
||||||
sidx=tointeger(start);
|
sidx=start.toIntegerValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(top>2){
|
if(top>2){
|
||||||
rabbit::ObjectPtr &end=stack_get(v,3);
|
rabbit::ObjectPtr &end=stack_get(v,3);
|
||||||
if(end.isNumeric() == true){
|
if(end.isNumeric() == true){
|
||||||
eidx=tointeger(end);
|
eidx=end.toIntegerValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -255,10 +255,10 @@ static int64_t base_array(rabbit::VirtualMachine* v)
|
|||||||
rabbit::Object &size = stack_get(v,2);
|
rabbit::Object &size = stack_get(v,2);
|
||||||
if(sq_gettop(v) > 2) {
|
if(sq_gettop(v) > 2) {
|
||||||
a = rabbit::Array::create(_get_shared_state(v),0);
|
a = rabbit::Array::create(_get_shared_state(v),0);
|
||||||
a->resize(tointeger(size),stack_get(v,3));
|
a->resize(size.toIntegerValue(),stack_get(v,3));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
a = rabbit::Array::create(_get_shared_state(v),tointeger(size));
|
a = rabbit::Array::create(_get_shared_state(v),size.toIntegerValue());
|
||||||
}
|
}
|
||||||
v->push(a);
|
v->push(a);
|
||||||
return 1;
|
return 1;
|
||||||
@ -348,14 +348,14 @@ static int64_t default_delegate_tofloat(rabbit::VirtualMachine* v)
|
|||||||
case rabbit::OT_STRING:{
|
case rabbit::OT_STRING:{
|
||||||
rabbit::ObjectPtr res;
|
rabbit::ObjectPtr res;
|
||||||
if(str2num(_stringval(o),res,10)){
|
if(str2num(_stringval(o),res,10)){
|
||||||
v->push(rabbit::ObjectPtr(tofloat(res)));
|
v->push(rabbit::ObjectPtr(res.toFloatValue()));
|
||||||
break;
|
break;
|
||||||
}}
|
}}
|
||||||
return sq_throwerror(v, "cannot convert the string");
|
return sq_throwerror(v, "cannot convert the string");
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_INTEGER:
|
case rabbit::OT_INTEGER:
|
||||||
case rabbit::OT_FLOAT:
|
case rabbit::OT_FLOAT:
|
||||||
v->push(rabbit::ObjectPtr(tofloat(o)));
|
v->push(rabbit::ObjectPtr(o.toFloatValue()));
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_BOOL:
|
case rabbit::OT_BOOL:
|
||||||
v->push(rabbit::ObjectPtr((float_t)(o.toInteger()?1:0)));
|
v->push(rabbit::ObjectPtr((float_t)(o.toInteger()?1:0)));
|
||||||
@ -378,14 +378,14 @@ static int64_t default_delegate_tointeger(rabbit::VirtualMachine* v)
|
|||||||
case rabbit::OT_STRING:{
|
case rabbit::OT_STRING:{
|
||||||
rabbit::ObjectPtr res;
|
rabbit::ObjectPtr res;
|
||||||
if(str2num(_stringval(o),res,base)){
|
if(str2num(_stringval(o),res,base)){
|
||||||
v->push(rabbit::ObjectPtr(tointeger(res)));
|
v->push(rabbit::ObjectPtr(res.toIntegerValue()));
|
||||||
break;
|
break;
|
||||||
}}
|
}}
|
||||||
return sq_throwerror(v, "cannot convert the string");
|
return sq_throwerror(v, "cannot convert the string");
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_INTEGER:
|
case rabbit::OT_INTEGER:
|
||||||
case rabbit::OT_FLOAT:
|
case rabbit::OT_FLOAT:
|
||||||
v->push(rabbit::ObjectPtr(tointeger(o)));
|
v->push(rabbit::ObjectPtr(o.toIntegerValue()));
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_BOOL:
|
case rabbit::OT_BOOL:
|
||||||
v->push(rabbit::ObjectPtr(o.toInteger()?(int64_t)1:(int64_t)0));
|
v->push(rabbit::ObjectPtr(o.toInteger()?(int64_t)1:(int64_t)0));
|
||||||
@ -419,7 +419,7 @@ static int64_t obj_clear(rabbit::VirtualMachine* v)
|
|||||||
static int64_t number_delegate_tochar(rabbit::VirtualMachine* v)
|
static int64_t number_delegate_tochar(rabbit::VirtualMachine* v)
|
||||||
{
|
{
|
||||||
rabbit::Object &o=stack_get(v,1);
|
rabbit::Object &o=stack_get(v,1);
|
||||||
char c = (char)tointeger(o);
|
char c = (char)o.toIntegerValue();
|
||||||
v->push(rabbit::String::create(_get_shared_state(v),(const char *)&c,1));
|
v->push(rabbit::String::create(_get_shared_state(v),(const char *)&c,1));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -553,7 +553,7 @@ static int64_t array_insert(rabbit::VirtualMachine* v)
|
|||||||
rabbit::Object &o=stack_get(v,1);
|
rabbit::Object &o=stack_get(v,1);
|
||||||
rabbit::Object &idx=stack_get(v,2);
|
rabbit::Object &idx=stack_get(v,2);
|
||||||
rabbit::Object &val=stack_get(v,3);
|
rabbit::Object &val=stack_get(v,3);
|
||||||
if(!o.toArray()->insert(tointeger(idx),val))
|
if(!o.toArray()->insert(idx.toIntegerValue(),val))
|
||||||
return sq_throwerror(v,"index out of range");
|
return sq_throwerror(v,"index out of range");
|
||||||
sq_pop(v,2);
|
sq_pop(v,2);
|
||||||
return 1;
|
return 1;
|
||||||
@ -567,8 +567,8 @@ static int64_t array_remove(rabbit::VirtualMachine* v)
|
|||||||
return sq_throwerror(v, "wrong type");
|
return sq_throwerror(v, "wrong type");
|
||||||
}
|
}
|
||||||
rabbit::ObjectPtr val;
|
rabbit::ObjectPtr val;
|
||||||
if(o.toArray()->get(tointeger(idx), val)) {
|
if(o.toArray()->get(idx.toIntegerValue(), val)) {
|
||||||
o.toArray()->remove(tointeger(idx));
|
o.toArray()->remove(idx.toIntegerValue());
|
||||||
v->push(val);
|
v->push(val);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -581,7 +581,7 @@ static int64_t array_resize(rabbit::VirtualMachine* v)
|
|||||||
rabbit::Object &nsize = stack_get(v, 2);
|
rabbit::Object &nsize = stack_get(v, 2);
|
||||||
rabbit::ObjectPtr fill;
|
rabbit::ObjectPtr fill;
|
||||||
if (nsize.isNumeric() == true) {
|
if (nsize.isNumeric() == true) {
|
||||||
int64_t sz = tointeger(nsize);
|
int64_t sz = nsize.toIntegerValue();
|
||||||
if (sz<0)
|
if (sz<0)
|
||||||
return sq_throwerror(v, "resizing to negative length");
|
return sq_throwerror(v, "resizing to negative length");
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user