[DEV] remote _instance()
This commit is contained in:
parent
36a162e89d
commit
be1fc5ae60
@ -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)
|
||||
|
@ -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<rabbit::Instance*>(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<rabbit::Instance*>(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<rabbit::Instance*>(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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user