From fa37b1fedba704cf5667c536758de3558a7eb909 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Wed, 4 Jul 2018 21:32:01 +0200 Subject: [PATCH] [DEV] remove to_integer() and to_float() --- rabbit/Object.hpp | 21 ++++++++++++++++++--- rabbit/VirtualMachine.cpp | 26 +++++++++++++------------- rabbit/sqapi.cpp | 10 +++++----- rabbit/sqbaselib.cpp | 26 +++++++++++++------------- 4 files changed, 49 insertions(+), 34 deletions(-) diff --git a/rabbit/Object.hpp b/rabbit/Object.hpp index ca71e0b..54b8779 100644 --- a/rabbit/Object.hpp +++ b/rabbit/Object.hpp @@ -30,6 +30,24 @@ namespace rabbit { float_t toFloat() const { 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() { return _unVal.pString; } @@ -219,9 +237,6 @@ namespace rabbit { #define _stringval(obj) (obj)._unVal.pString->_val #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) { rabbit::ObjectType tOldType = a._type; diff --git a/rabbit/VirtualMachine.cpp b/rabbit/VirtualMachine.cpp index afb0262..3b4cb5b 100644 --- a/rabbit/VirtualMachine.cpp +++ b/rabbit/VirtualMachine.cpp @@ -77,7 +77,7 @@ void rabbit::VirtualMachine::release() { switch(tmask) { \ 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;\ + case (rabbit::OT_FLOAT): trg = o1.toFloatValue() op o2.toFloatValue(); break;\ default: _GUARD(ARITH_OP((#op)[0],trg,o1,o2)); break;\ } \ } @@ -88,7 +88,7 @@ void rabbit::VirtualMachine::release() { 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_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;\ } \ } @@ -117,14 +117,14 @@ bool rabbit::VirtualMachine::ARITH_OP(uint64_t op,rabbit::ObjectPtr &trg,const r break; case (rabbit::OT_FLOAT|OT_INTEGER): case (rabbit::OT_FLOAT):{ - float_t res, f1 = tofloat(o1), f2 = tofloat(o2); + float_t res, f1 = o1.toFloatValue(), f2 = o2.toFloatValue(); switch(op) { - 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; - default: res = 0x0f; + 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; + default: res = 0x0f; } trg = res; } break; @@ -692,7 +692,7 @@ bool rabbit::VirtualMachine::isEqual(const rabbit::ObjectPtr &o1,const rabbit::O } else { if( o1.isNumeric() == true && o2.isNumeric() == true) { - res = (tofloat(o1) == tofloat(o2)); + res = o1.toFloatValue() == o2.toFloatValue(); } else { res = false; } @@ -1305,7 +1305,7 @@ bool rabbit::VirtualMachine::get(const rabbit::ObjectPtr &self, const rabbit::Ob break; case rabbit::OT_ARRAY: if (key.isNumeric() == true) { - if (self.toArray()->get(tointeger(key), dest)) { + if (self.toArray()->get(key.toIntegerValue(), dest)) { return true; } 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; case rabbit::OT_STRING: if(key.isNumeric()){ - int64_t n = tointeger(key); + int64_t n = key.toIntegerValue(); int64_t len = self.toString()->_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; case rabbit::OT_ARRAY: 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); return false; } diff --git a/rabbit/sqapi.cpp b/rabbit/sqapi.cpp index f65c328..e89fc55 100644 --- a/rabbit/sqapi.cpp +++ b/rabbit/sqapi.cpp @@ -217,7 +217,7 @@ const char * rabbit::sq_objtostring(const rabbit::Object *o) int64_t rabbit::sq_objtointeger(const rabbit::Object *o) { if(o->isNumeric() == true) { - return tointeger(*o); + return o->toIntegerValue(); } return 0; } @@ -225,7 +225,7 @@ int64_t rabbit::sq_objtointeger(const rabbit::Object *o) float_t rabbit::sq_objtofloat(const rabbit::Object *o) { if(o->isNumeric() == true) { - return tofloat(*o); + return o->toFloatValue(); } 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); if(o.isNumeric() == true) { - *i = tointeger(o); + *i = o.toIntegerValue(); return SQ_OK; } 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); if(o.isNumeric() == true) { - *f = tofloat(o); + *f = o.toFloatValue(); return SQ_OK; } return SQ_ERROR; @@ -1131,7 +1131,7 @@ rabbit::Result rabbit::sq_rawget(rabbit::VirtualMachine* v,int64_t idx) { break; case rabbit::OT_ARRAY: if(obj.isNumeric() == true) { - if(self.toArray()->get(tointeger(obj), obj)) { + if(self.toArray()->get(obj.toIntegerValue(), obj)) { return SQ_OK; } } else { diff --git a/rabbit/sqbaselib.cpp b/rabbit/sqbaselib.cpp index 2b4de2d..6a5d6ff 100644 --- a/rabbit/sqbaselib.cpp +++ b/rabbit/sqbaselib.cpp @@ -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); if( start.isNull() == false && start.isNumeric() == true){ - sidx=tointeger(start); + sidx=start.toIntegerValue(); } } if(top>2){ rabbit::ObjectPtr &end=stack_get(v,3); if(end.isNumeric() == true){ - eidx=tointeger(end); + eidx=end.toIntegerValue(); } } else { @@ -255,10 +255,10 @@ static int64_t base_array(rabbit::VirtualMachine* v) rabbit::Object &size = stack_get(v,2); if(sq_gettop(v) > 2) { 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 { - a = rabbit::Array::create(_get_shared_state(v),tointeger(size)); + a = rabbit::Array::create(_get_shared_state(v),size.toIntegerValue()); } v->push(a); return 1; @@ -348,14 +348,14 @@ static int64_t default_delegate_tofloat(rabbit::VirtualMachine* v) case rabbit::OT_STRING:{ rabbit::ObjectPtr res; if(str2num(_stringval(o),res,10)){ - v->push(rabbit::ObjectPtr(tofloat(res))); + v->push(rabbit::ObjectPtr(res.toFloatValue())); break; }} return sq_throwerror(v, "cannot convert the string"); break; case rabbit::OT_INTEGER: case rabbit::OT_FLOAT: - v->push(rabbit::ObjectPtr(tofloat(o))); + v->push(rabbit::ObjectPtr(o.toFloatValue())); break; case rabbit::OT_BOOL: 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:{ rabbit::ObjectPtr res; if(str2num(_stringval(o),res,base)){ - v->push(rabbit::ObjectPtr(tointeger(res))); + v->push(rabbit::ObjectPtr(res.toIntegerValue())); break; }} return sq_throwerror(v, "cannot convert the string"); break; case rabbit::OT_INTEGER: case rabbit::OT_FLOAT: - v->push(rabbit::ObjectPtr(tointeger(o))); + v->push(rabbit::ObjectPtr(o.toIntegerValue())); break; case rabbit::OT_BOOL: 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) { 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)); return 1; } @@ -553,7 +553,7 @@ static int64_t array_insert(rabbit::VirtualMachine* v) rabbit::Object &o=stack_get(v,1); rabbit::Object &idx=stack_get(v,2); 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"); sq_pop(v,2); return 1; @@ -567,8 +567,8 @@ static int64_t array_remove(rabbit::VirtualMachine* v) return sq_throwerror(v, "wrong type"); } rabbit::ObjectPtr val; - if(o.toArray()->get(tointeger(idx), val)) { - o.toArray()->remove(tointeger(idx)); + if(o.toArray()->get(idx.toIntegerValue(), val)) { + o.toArray()->remove(idx.toIntegerValue()); v->push(val); return 1; } @@ -581,7 +581,7 @@ static int64_t array_resize(rabbit::VirtualMachine* v) rabbit::Object &nsize = stack_get(v, 2); rabbit::ObjectPtr fill; if (nsize.isNumeric() == true) { - int64_t sz = tointeger(nsize); + int64_t sz = nsize.toIntegerValue(); if (sz<0) return sq_throwerror(v, "resizing to negative length");