From b6c6a38844c0c597553f8a8e1c32a313897b0873 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Tue, 3 Jul 2018 22:54:43 +0200 Subject: [PATCH] [DEV] remove sq_is*() --- rabbit/Object.hpp | 77 +++++++++++++++++++++++++++++---------- rabbit/VirtualMachine.cpp | 11 +++--- rabbit/sqapi.cpp | 75 ++++++++++++++++++++++---------------- rabbit/sqbaselib.cpp | 14 ++++--- rabbit/sqdebug.cpp | 2 +- 5 files changed, 117 insertions(+), 62 deletions(-) diff --git a/rabbit/Object.hpp b/rabbit/Object.hpp index e6328fa..e6098e3 100644 --- a/rabbit/Object.hpp +++ b/rabbit/Object.hpp @@ -132,6 +132,63 @@ namespace rabbit { uint64_t toRaw() const { return _unVal.raw; } + bool isNumeric() const { + return (_type & SQOBJECT_NUMERIC) != 0; + } + bool isTable() const { + return _type == rabbit::OT_TABLE; + } + bool isArray() const { + return _type == rabbit::OT_ARRAY; + } + bool isFunctionProto() const { + return _type == rabbit::OT_FUNCPROTO; + } + bool isClosure() const { + return _type == rabbit::OT_CLOSURE; + } + bool isGenerator() const { + return _type == rabbit::OT_GENERATOR; + } + bool isNativeClosure() const { + return _type == rabbit::OT_NATIVECLOSURE; + } + bool isString() const { + return _type == rabbit::OT_STRING; + } + bool isInteger() const { + return _type == rabbit::OT_INTEGER; + } + bool isFloat() const { + return _type == rabbit::OT_FLOAT; + } + bool isUserPointer() const { + return _type == rabbit::OT_USERPOINTER; + } + bool isUserData() const { + return _type == rabbit::OT_USERDATA; + } + bool isVirtualMachine() const { + return _type == rabbit::OT_THREAD; + } + bool isNull() const { + return _type == rabbit::OT_NULL; + } + bool isClass() const { + return _type == rabbit::OT_CLASS; + } + bool isInstance() const { + return _type == rabbit::OT_INSTANCE; + } + bool isBoolean() const { + return _type == rabbit::OT_BOOL; + } + bool isWeakRef() const { + return _type == rabbit::OT_WEAKREF; + } + rabbit::ObjectType getType() const { + return _type; + } }; #define __addRef(type,unval) if(ISREFCOUNTED(type)) \ @@ -155,26 +212,8 @@ namespace rabbit { #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)(num).toFloat():(num).toInteger()) - #define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC) - #define sq_istable(o) ((o)._type==rabbit::OT_TABLE) - #define sq_isarray(o) ((o)._type==rabbit::OT_ARRAY) - #define sq_isfunction(o) ((o)._type==rabbit::OT_FUNCPROTO) - #define sq_isclosure(o) ((o)._type==rabbit::OT_CLOSURE) - #define sq_isgenerator(o) ((o)._type==rabbit::OT_GENERATOR) - #define sq_isnativeclosure(o) ((o)._type==rabbit::OT_NATIVECLOSURE) - #define sq_isstring(o) ((o)._type==rabbit::OT_STRING) - #define sq_isinteger(o) ((o)._type==rabbit::OT_INTEGER) - #define sq_isfloat(o) ((o)._type==rabbit::OT_FLOAT) - #define sq_isuserpointer(o) ((o)._type==rabbit::OT_USERPOINTER) - #define sq_isuserdata(o) ((o)._type==rabbit::OT_USERDATA) - #define sq_isthread(o) ((o)._type==rabbit::OT_THREAD) - #define sq_isnull(o) ((o)._type==rabbit::OT_NULL) - #define sq_isclass(o) ((o)._type==rabbit::OT_CLASS) - #define sq_isinstance(o) ((o)._type==rabbit::OT_INSTANCE) - #define sq_isbool(o) ((o)._type==rabbit::OT_BOOL) - #define sq_isweakref(o) ((o)._type==rabbit::OT_WEAKREF) #define sq_type(o) ((o)._type) - + 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 a24c0fc..55098e2 100644 --- a/rabbit/VirtualMachine.cpp +++ b/rabbit/VirtualMachine.cpp @@ -263,7 +263,8 @@ bool rabbit::VirtualMachine::objCmp(const rabbit::ObjectPtr &o1,const rabbit::Ob } else{ - if(sq_isnumeric(o1) && sq_isnumeric(o2)){ + if( o1.isNumeric() ==true + && o2.isNumeric() == true){ if((t1==rabbit::OT_INTEGER) && (t2==OT_FLOAT)) { if( o1.toInteger()==o2.toFloat() ) { _RET_SUCCEED(0); } else if( o1.toInteger()get(tointeger(key), dest)) { return true; } @@ -1270,7 +1271,7 @@ bool rabbit::VirtualMachine::get(const rabbit::ObjectPtr &self, const rabbit::Ob } break; case rabbit::OT_STRING: - if(sq_isnumeric(key)){ + if(key.isNumeric()){ int64_t n = tointeger(key); int64_t len = self.toString()->_len; if (n < 0) { n += len; } @@ -1380,7 +1381,7 @@ bool rabbit::VirtualMachine::set(const rabbit::ObjectPtr &self,const rabbit::Obj if(const_cast(self.toInstance())->set(key,val)) return true; break; case rabbit::OT_ARRAY: - if(!sq_isnumeric(key)) { 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)) { raise_Idxerror(key); return false; diff --git a/rabbit/sqapi.cpp b/rabbit/sqapi.cpp index 87e8b9c..30158f5 100644 --- a/rabbit/sqapi.cpp +++ b/rabbit/sqapi.cpp @@ -108,7 +108,9 @@ int64_t rabbit::sq_getvmstate(rabbit::VirtualMachine* v) void rabbit::sq_seterrorhandler(rabbit::VirtualMachine* v) { rabbit::Object o = stack_get(v, -1); - if(sq_isclosure(o) || sq_isnativeclosure(o) || sq_isnull(o)) { + if( o.isClosure() == true + || o.isNativeClosure() == true + || o.isNull() == true) { v->_errorhandler = o; v->pop(); } @@ -124,10 +126,12 @@ void rabbit::sq_setnativedebughook(rabbit::VirtualMachine* v,SQDEBUGHOOK hook) void rabbit::sq_setdebughook(rabbit::VirtualMachine* v) { rabbit::Object o = stack_get(v,-1); - if(sq_isclosure(o) || sq_isnativeclosure(o) || sq_isnull(o)) { + if ( o.isClosure() == true + || o.isNativeClosure() == true + || o.isNull() == true) { v->_debughook_closure = o; v->_debughook_native = NULL; - v->_debughook = !sq_isnull(o); + v->_debughook = ! o.isNull(); v->pop(); } } @@ -204,7 +208,7 @@ const char * rabbit::sq_objtostring(const rabbit::Object *o) int64_t rabbit::sq_objtointeger(const rabbit::Object *o) { - if(sq_isnumeric(*o)) { + if(o->isNumeric() == true) { return tointeger(*o); } return 0; @@ -212,7 +216,7 @@ int64_t rabbit::sq_objtointeger(const rabbit::Object *o) float_t rabbit::sq_objtofloat(const rabbit::Object *o) { - if(sq_isnumeric(*o)) { + if(o->isNumeric() == true) { return tofloat(*o); } return 0; @@ -220,7 +224,7 @@ float_t rabbit::sq_objtofloat(const rabbit::Object *o) rabbit::Bool rabbit::sq_objtobool(const rabbit::Object *o) { - if(sq_isbool(*o)) { + if(o->isBoolean() == true) { return o->toInteger(); } return SQFalse; @@ -228,7 +232,7 @@ rabbit::Bool rabbit::sq_objtobool(const rabbit::Object *o) rabbit::UserPointer rabbit::sq_objtouserpointer(const rabbit::Object *o) { - if(sq_isuserpointer(*o)) { + if(o->isUserPointer() == true) { return o->toUserPointer(); } return 0; @@ -429,7 +433,7 @@ rabbit::Result rabbit::sq_getclosureinfo(rabbit::VirtualMachine* v,int64_t idx,u rabbit::Result rabbit::sq_setnativeclosurename(rabbit::VirtualMachine* v,int64_t idx,const char *name) { rabbit::Object o = stack_get(v, idx); - if(sq_isnativeclosure(o)) { + if(o.isNativeClosure() == true) { rabbit::NativeClosure *nc = o.toNativeClosure(); nc->_name = rabbit::String::create(_get_shared_state(v),name); return SQ_OK; @@ -440,7 +444,7 @@ rabbit::Result rabbit::sq_setnativeclosurename(rabbit::VirtualMachine* v,int64_t rabbit::Result rabbit::sq_setparamscheck(rabbit::VirtualMachine* v,int64_t nparamscheck,const char *typemask) { rabbit::Object o = stack_get(v, -1); - if(!sq_isnativeclosure(o)) + if(o.isNativeClosure() == false) return sq_throwerror(v, "native closure expected"); rabbit::NativeClosure *nc = o.toNativeClosure(); nc->_nparamscheck = nparamscheck; @@ -462,18 +466,20 @@ rabbit::Result rabbit::sq_setparamscheck(rabbit::VirtualMachine* v,int64_t npara rabbit::Result rabbit::sq_bindenv(rabbit::VirtualMachine* v,int64_t idx) { rabbit::ObjectPtr &o = stack_get(v,idx); - if(!sq_isnativeclosure(o) && - !sq_isclosure(o)) + if( o.isNativeClosure() == false + && o.isClosure() == false) { return sq_throwerror(v, "the target is not a closure"); + } rabbit::ObjectPtr &env = stack_get(v,-1); - if(!sq_istable(env) && - !sq_isarray(env) && - !sq_isclass(env) && - !sq_isinstance(env)) + if ( env.isTable() == false + && env.isArray() ==false + && env.isClass() == false + && env.isInstance() == false) { return sq_throwerror(v,"invalid environment"); + } rabbit::WeakRef *w = env.toRefCounted()->getWeakRef(sq_type(env)); rabbit::ObjectPtr ret; - if(sq_isclosure(o)) { + if(o.isClosure() == true) { rabbit::Closure *c = o.toClosure()->clone(); __Objrelease(c->_env); c->_env = w; @@ -499,14 +505,14 @@ rabbit::Result rabbit::sq_bindenv(rabbit::VirtualMachine* v,int64_t idx) rabbit::Result rabbit::sq_getclosurename(rabbit::VirtualMachine* v,int64_t idx) { rabbit::ObjectPtr &o = stack_get(v,idx); - if(!sq_isnativeclosure(o) && - !sq_isclosure(o)) + if ( o.isNativeClosure() == false + && o.isClosure() == false) { return sq_throwerror(v,"the target is not a closure"); - if(sq_isnativeclosure(o)) - { - v->push(o.toNativeClosure()->_name); } - else { //closure + if (o.isNativeClosure() == true) { + v->push(o.toNativeClosure()->_name); + } else { + //closure v->push(o.toClosure()->_function->_name); } return SQ_OK; @@ -516,8 +522,10 @@ rabbit::Result rabbit::sq_setclosureroot(rabbit::VirtualMachine* v,int64_t idx) { rabbit::ObjectPtr &c = stack_get(v,idx); rabbit::Object o = stack_get(v, -1); - if(!sq_isclosure(c)) return sq_throwerror(v, "closure expected"); - if(sq_istable(o)) { + if(c.isClosure() == false) { + return sq_throwerror(v, "closure expected"); + } + if(o.isTable() == true) { c.toClosure()->setRoot(o.toTable()->getWeakRef(rabbit::OT_TABLE)); v->pop(); return SQ_OK; @@ -528,7 +536,9 @@ rabbit::Result rabbit::sq_setclosureroot(rabbit::VirtualMachine* v,int64_t idx) rabbit::Result rabbit::sq_getclosureroot(rabbit::VirtualMachine* v,int64_t idx) { rabbit::ObjectPtr &c = stack_get(v,idx); - if(!sq_isclosure(c)) return sq_throwerror(v, "closure expected"); + if(c.isClosure() == false) { + return sq_throwerror(v, "closure expected"); + } v->push(c.toClosure()->_root->_obj); return SQ_OK; } @@ -565,7 +575,8 @@ void rabbit::sq_pushconsttable(rabbit::VirtualMachine* v) rabbit::Result rabbit::sq_setroottable(rabbit::VirtualMachine* v) { rabbit::Object o = stack_get(v, -1); - if(sq_istable(o) || sq_isnull(o)) { + if ( o.isTable() == true + || o.isNull() == true) { v->_roottable = o; v->pop(); return SQ_OK; @@ -576,7 +587,7 @@ rabbit::Result rabbit::sq_setroottable(rabbit::VirtualMachine* v) rabbit::Result rabbit::sq_setconsttable(rabbit::VirtualMachine* v) { rabbit::Object o = stack_get(v, -1); - if(sq_istable(o)) { + if (o.isTable() == true) { _get_shared_state(v)->_consts = o; v->pop(); return SQ_OK; @@ -665,11 +676,11 @@ void rabbit::sq_tobool(rabbit::VirtualMachine* v, int64_t idx, rabbit::Bool *b) rabbit::Result rabbit::sq_getinteger(rabbit::VirtualMachine* v,int64_t idx,int64_t *i) { rabbit::ObjectPtr &o = stack_get(v, idx); - if(sq_isnumeric(o)) { + if(o.isNumeric() == true) { *i = tointeger(o); return SQ_OK; } - if(sq_isbool(o)) { + if(o.isBoolean() == true) { *i = rabbit::VirtualMachine::IsFalse(o)?SQFalse:SQTrue; return SQ_OK; } @@ -679,7 +690,7 @@ rabbit::Result rabbit::sq_getinteger(rabbit::VirtualMachine* v,int64_t idx,int64 rabbit::Result rabbit::sq_getfloat(rabbit::VirtualMachine* v,int64_t idx,float_t *f) { rabbit::ObjectPtr &o = stack_get(v, idx); - if(sq_isnumeric(o)) { + if(o.isNumeric() == true) { *f = tofloat(o); return SQ_OK; } @@ -689,7 +700,7 @@ rabbit::Result rabbit::sq_getfloat(rabbit::VirtualMachine* v,int64_t idx,float_t rabbit::Result rabbit::sq_getbool(rabbit::VirtualMachine* v,int64_t idx,rabbit::Bool *b) { rabbit::ObjectPtr &o = stack_get(v, idx); - if(sq_isbool(o)) { + if (o.isBoolean() == true) { *b = o.toInteger(); return SQ_OK; } @@ -1083,7 +1094,7 @@ rabbit::Result rabbit::sq_rawget(rabbit::VirtualMachine* v,int64_t idx) break; case rabbit::OT_ARRAY: { - if(sq_isnumeric(obj)){ + if(obj.isNumeric() == true){ if(self.toArray()->get(tointeger(obj),obj)) { return SQ_OK; } diff --git a/rabbit/sqbaselib.cpp b/rabbit/sqbaselib.cpp index d6f4045..0a7dc7a 100644 --- a/rabbit/sqbaselib.cpp +++ b/rabbit/sqbaselib.cpp @@ -176,13 +176,14 @@ static int64_t get_slice_params(rabbit::VirtualMachine* v,int64_t &sidx,int64_t o=stack_get(v,1); if(top>1){ rabbit::ObjectPtr &start=stack_get(v,2); - if(sq_type(start)!=rabbit::OT_NULL && sq_isnumeric(start)){ + if( sq_type(start)!=rabbit::OT_NULL + && start.isNumeric() == true){ sidx=tointeger(start); } } if(top>2){ rabbit::ObjectPtr &end=stack_get(v,3); - if(sq_isnumeric(end)){ + if(end.isNumeric() == true){ eidx=tointeger(end); } } @@ -562,7 +563,9 @@ static int64_t array_remove(rabbit::VirtualMachine* v) { rabbit::Object &o = stack_get(v, 1); rabbit::Object &idx = stack_get(v, 2); - if(!sq_isnumeric(idx)) return sq_throwerror(v, "wrong type"); + if(idx.isNumeric() == false) { + return sq_throwerror(v, "wrong type"); + } rabbit::ObjectPtr val; if(o.toArray()->get(tointeger(idx), val)) { o.toArray()->remove(tointeger(idx)); @@ -577,7 +580,7 @@ static int64_t array_resize(rabbit::VirtualMachine* v) rabbit::Object &o = stack_get(v, 1); rabbit::Object &nsize = stack_get(v, 2); rabbit::ObjectPtr fill; - if(sq_isnumeric(nsize)) { + if (nsize.isNumeric() == true) { int64_t sz = tointeger(nsize); if (sz<0) return sq_throwerror(v, "resizing to negative length"); @@ -710,8 +713,9 @@ static bool _sort_compare(rabbit::VirtualMachine* v,rabbit::ObjectPtr &a,rabbit: v->push(a); v->push(b); if(SQ_FAILED(sq_call(v, 3, SQTrue, SQFalse))) { - if(!sq_isstring( v->_lasterror)) + if (v->_lasterror.isString() == false) { v->raise_error("compare func failed"); + } return false; } if(SQ_FAILED(sq_getinteger(v, -1, &ret))) { diff --git a/rabbit/sqdebug.cpp b/rabbit/sqdebug.cpp index 093fb49..4289b66 100644 --- a/rabbit/sqdebug.cpp +++ b/rabbit/sqdebug.cpp @@ -27,7 +27,7 @@ rabbit::Result rabbit::sq_getfunctioninfo(rabbit::VirtualMachine* v,int64_t leve int64_t cssize = v->_callsstacksize; if (cssize > level) { rabbit::VirtualMachine::callInfo &ci = v->_callsstack[cssize-level-1]; - if(sq_isclosure(ci._closure)) { + if(ci._closure.isClosure()) { rabbit::Closure *c = ci._closure.toClosure(); rabbit::FunctionProto *proto = c->_function; fi->funcid = proto;