diff --git a/rabbit/Object.hpp b/rabbit/Object.hpp index d653cfb..b232ebe 100644 --- a/rabbit/Object.hpp +++ b/rabbit/Object.hpp @@ -149,7 +149,6 @@ namespace rabbit { #define is_delegable(t) (sq_type(t)&SQOBJECT_DELEGABLE) #define raw_type(obj) _RAW_TYPE((obj)._type) - #define _instance(obj) ((obj)._unVal.pInstance) #define _delegable(obj) ((rabbit::Delegable *)(obj)._unVal.pDelegable) #define _weakref(obj) ((obj)._unVal.pWeakRef) #define _outer(obj) ((obj)._unVal.pOuter) diff --git a/rabbit/VirtualMachine.cpp b/rabbit/VirtualMachine.cpp index 05eeaad..9122fbf 100644 --- a/rabbit/VirtualMachine.cpp +++ b/rabbit/VirtualMachine.cpp @@ -972,7 +972,7 @@ exception_restore: case _OP_INSTANCEOF: if(sq_type(STK(arg1)) != rabbit::OT_CLASS) {raise_error("cannot apply instanceof between a %s and a %s",getTypeName(STK(arg1)),getTypeName(STK(arg2))); SQ_THROW();} - TARGET = (sq_type(STK(arg2)) == rabbit::OT_INSTANCE) ? (_instance(STK(arg2))->instanceOf(STK(arg1).toClass())?true:false) : false; + TARGET = (sq_type(STK(arg2)) == rabbit::OT_INSTANCE) ? (STK(arg2).toInstance()->instanceOf(STK(arg1).toClass())?true:false) : false; continue; case _OP_AND: if(IsFalse(STK(arg2))) { @@ -1260,7 +1260,7 @@ bool rabbit::VirtualMachine::get(const rabbit::ObjectPtr &self, const rabbit::Ob } break; case rabbit::OT_INSTANCE: - if(_instance(self)->get(key,dest)) { + if(const_cast(self.toInstance())->get(key,dest)) { return true; } break; @@ -1377,7 +1377,7 @@ bool rabbit::VirtualMachine::set(const rabbit::ObjectPtr &self,const rabbit::Obj if(self.toTable()->set(key,val)) return true; break; case rabbit::OT_INSTANCE: - if(_instance(self)->set(key,val)) return true; + 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; } @@ -1449,7 +1449,7 @@ bool rabbit::VirtualMachine::clone(const rabbit::ObjectPtr &self,rabbit::ObjectP newobj = self.toTable()->clone(); goto cloned_mt; case rabbit::OT_INSTANCE: { - newobj = _instance(self)->clone(_get_shared_state(this)); + newobj = const_cast(self.toInstance())->clone(_get_shared_state(this)); cloned_mt: rabbit::ObjectPtr closure; if(_delegable(newobj)->_delegate && _delegable(newobj)->getMetaMethod(this,MT_CLONED,closure)) { @@ -1798,7 +1798,7 @@ void rabbit::VirtualMachine::dumpstack(int64_t stackbase,bool dumpall) case rabbit::OT_THREAD: printf("THREAD [%p]",obj.toVirtualMachine());break; case rabbit::OT_USERPOINTER: printf("USERPOINTER %p",obj.toUserPointer());break; case rabbit::OT_CLASS: printf("CLASS %p",obj.toClass());break; - case rabbit::OT_INSTANCE: printf("INSTANCE %p",_instance(obj));break; + case rabbit::OT_INSTANCE: printf("INSTANCE %p",obj.toInstance());break; case rabbit::OT_WEAKREF: printf("WEAKERF %p",_weakref(obj));break; default: assert(0); diff --git a/rabbit/sqapi.cpp b/rabbit/sqapi.cpp index badfa86..270cf6a 100644 --- a/rabbit/sqapi.cpp +++ b/rabbit/sqapi.cpp @@ -315,7 +315,7 @@ rabbit::Bool rabbit::sq_instanceof(rabbit::VirtualMachine* v) if( sq_type(inst) != rabbit::OT_INSTANCE || sq_type(cl) != rabbit::OT_CLASS) return sq_throwerror(v,"invalid param type"); - return _instance(inst)->instanceOf(cl.toClass())?SQTrue:SQFalse; + return inst.toInstance()->instanceOf(cl.toClass())?SQTrue:SQFalse; } rabbit::Result rabbit::sq_arrayappend(rabbit::VirtualMachine* v,int64_t idx) @@ -741,7 +741,7 @@ int64_t rabbit::sq_getsize(rabbit::VirtualMachine* v, int64_t idx) case rabbit::OT_TABLE: return o.toTable()->countUsed(); case rabbit::OT_ARRAY: return o.toArray()->size(); case rabbit::OT_USERDATA: return o.toUserData()->getsize(); - case rabbit::OT_INSTANCE: return _instance(o)->_class->_udsize; + case rabbit::OT_INSTANCE: return o.toInstance()->_class->_udsize; case rabbit::OT_CLASS: return o.toClass()->_udsize; default: return sq_aux_invalidtype(v, type); @@ -784,7 +784,7 @@ rabbit::Result rabbit::sq_settypetag(rabbit::VirtualMachine* v,int64_t idx,rabbi rabbit::Result rabbit::sq_getobjtypetag(const rabbit::Object *o,rabbit::UserPointer * typetag) { switch(sq_type(*o)) { - case rabbit::OT_INSTANCE: *typetag = _instance(*o)->_class->_typetag; break; + case rabbit::OT_INSTANCE: *typetag = o->toInstance()->_class->_typetag; break; case rabbit::OT_USERDATA: *typetag = o->toUserData()->getTypeTag(); break; case rabbit::OT_CLASS: *typetag = o->toClass()->_typetag; break; default: return SQ_ERROR; @@ -812,7 +812,7 @@ rabbit::Result rabbit::sq_setinstanceup(rabbit::VirtualMachine* v, int64_t idx, { rabbit::ObjectPtr &o = stack_get(v,idx); if(sq_type(o) != rabbit::OT_INSTANCE) return sq_throwerror(v,"the object is not a class instance"); - _instance(o)->_userpointer = p; + o.toInstance()->_userpointer = p; return SQ_OK; } @@ -830,9 +830,9 @@ rabbit::Result rabbit::sq_getinstanceup(rabbit::VirtualMachine* v, int64_t idx, { rabbit::ObjectPtr &o = stack_get(v,idx); if(sq_type(o) != rabbit::OT_INSTANCE) return sq_throwerror(v,"the object is not a class instance"); - (*p) = _instance(o)->_userpointer; + (*p) = o.toInstance()->_userpointer; if(typetag != 0) { - rabbit::Class *cl = _instance(o)->_class; + rabbit::Class *cl = o.toInstance()->_class; do{ if(cl->_typetag == typetag) return SQ_OK; @@ -942,7 +942,7 @@ rabbit::Result rabbit::sq_rawset(rabbit::VirtualMachine* v,int64_t idx) return SQ_OK; break; case rabbit::OT_INSTANCE: - if(_instance(self)->set(key, v->getUp(-1))) { + if(self.toInstance()->set(key, v->getUp(-1))) { v->pop(2); return SQ_OK; } @@ -1078,7 +1078,7 @@ rabbit::Result rabbit::sq_rawget(rabbit::VirtualMachine* v,int64_t idx) return SQ_OK; break; case rabbit::OT_INSTANCE: - if(_instance(self)->get(obj,obj)) + if(self.toInstance()->get(obj,obj)) return SQ_OK; break; case rabbit::OT_ARRAY: @@ -1267,7 +1267,7 @@ void rabbit::sq_setreleasehook(rabbit::VirtualMachine* v,int64_t idx,SQRELEASEHO ud.toUserData()->setHook(hook); break; case rabbit::OT_INSTANCE: - _instance(ud)->_hook = hook; + ud.toInstance()->_hook = hook; break; case rabbit::OT_CLASS: ud.toClass()->_hook = hook; @@ -1285,7 +1285,7 @@ SQRELEASEHOOK rabbit::sq_getreleasehook(rabbit::VirtualMachine* v,int64_t idx) return ud.toUserData()->getHook(); break; case rabbit::OT_INSTANCE: - return _instance(ud)->_hook; + return ud.toInstance()->_hook; break; case rabbit::OT_CLASS: return ud.toClass()->_hook; @@ -1472,7 +1472,7 @@ rabbit::Result _getmemberbyhandle(rabbit::VirtualMachine* v,rabbit::ObjectPtr &s { switch(sq_type(self)) { case rabbit::OT_INSTANCE: { - rabbit::Instance *i = _instance(self); + rabbit::Instance *i = self.toInstance(); if(handle->_static) { rabbit::Class *c = i->_class; val = &c->_methods[handle->_index].val; @@ -1538,7 +1538,7 @@ rabbit::Result rabbit::sq_getclass(rabbit::VirtualMachine* v,int64_t idx) { rabbit::ObjectPtr *o = NULL; _GETSAFE_OBJ(v, idx, rabbit::OT_INSTANCE,o); - v->push(rabbit::ObjectPtr(_instance(*o)->_class)); + v->push(rabbit::ObjectPtr(o->toInstance()->_class)); return SQ_OK; }