[DEV] remote _class()
This commit is contained in:
parent
25e0b49c20
commit
36a162e89d
@ -149,7 +149,6 @@ namespace rabbit {
|
|||||||
#define is_delegable(t) (sq_type(t)&SQOBJECT_DELEGABLE)
|
#define is_delegable(t) (sq_type(t)&SQOBJECT_DELEGABLE)
|
||||||
#define raw_type(obj) _RAW_TYPE((obj)._type)
|
#define raw_type(obj) _RAW_TYPE((obj)._type)
|
||||||
|
|
||||||
#define _class(obj) ((obj)._unVal.pClass)
|
|
||||||
#define _instance(obj) ((obj)._unVal.pInstance)
|
#define _instance(obj) ((obj)._unVal.pInstance)
|
||||||
#define _delegable(obj) ((rabbit::Delegable *)(obj)._unVal.pDelegable)
|
#define _delegable(obj) ((rabbit::Delegable *)(obj)._unVal.pDelegable)
|
||||||
#define _weakref(obj) ((obj)._unVal.pWeakRef)
|
#define _weakref(obj) ((obj)._unVal.pWeakRef)
|
||||||
|
@ -549,7 +549,7 @@ bool rabbit::VirtualMachine::FOREACH_OP(rabbit::ObjectPtr &o1,rabbit::ObjectPtr
|
|||||||
if((nrefidx = o1.toString()->next(o4, o2, o3)) == -1)_FINISH(exitpos);
|
if((nrefidx = o1.toString()->next(o4, o2, o3)) == -1)_FINISH(exitpos);
|
||||||
o4 = (int64_t)nrefidx; _FINISH(1);
|
o4 = (int64_t)nrefidx; _FINISH(1);
|
||||||
case rabbit::OT_CLASS:
|
case rabbit::OT_CLASS:
|
||||||
if((nrefidx = _class(o1)->next(o4, o2, o3)) == -1)_FINISH(exitpos);
|
if((nrefidx = o1.toClass()->next(o4, o2, o3)) == -1)_FINISH(exitpos);
|
||||||
o4 = (int64_t)nrefidx; _FINISH(1);
|
o4 = (int64_t)nrefidx; _FINISH(1);
|
||||||
case rabbit::OT_USERDATA:
|
case rabbit::OT_USERDATA:
|
||||||
case rabbit::OT_INSTANCE:
|
case rabbit::OT_INSTANCE:
|
||||||
@ -636,23 +636,23 @@ bool rabbit::VirtualMachine::CLASS_OP(rabbit::ObjectPtr &target,int64_t baseclas
|
|||||||
rabbit::ObjectPtr attrs;
|
rabbit::ObjectPtr attrs;
|
||||||
if(baseclass != -1) {
|
if(baseclass != -1) {
|
||||||
if(sq_type(_stack[_stackbase+baseclass]) != rabbit::OT_CLASS) { raise_error("trying to inherit from a %s",getTypeName(_stack[_stackbase+baseclass])); return false; }
|
if(sq_type(_stack[_stackbase+baseclass]) != rabbit::OT_CLASS) { raise_error("trying to inherit from a %s",getTypeName(_stack[_stackbase+baseclass])); return false; }
|
||||||
base = _class(_stack[_stackbase + baseclass]);
|
base = _stack[_stackbase + baseclass].toClass();
|
||||||
}
|
}
|
||||||
if(attributes != MAX_FUNC_STACKSIZE) {
|
if(attributes != MAX_FUNC_STACKSIZE) {
|
||||||
attrs = _stack[_stackbase+attributes];
|
attrs = _stack[_stackbase+attributes];
|
||||||
}
|
}
|
||||||
target = rabbit::Class::create(_get_shared_state(this),base);
|
target = rabbit::Class::create(_get_shared_state(this),base);
|
||||||
if(sq_type(_class(target)->_metamethods[MT_INHERITED]) != rabbit::OT_NULL) {
|
if(sq_type(target.toClass()->_metamethods[MT_INHERITED]) != rabbit::OT_NULL) {
|
||||||
int nparams = 2;
|
int nparams = 2;
|
||||||
rabbit::ObjectPtr ret;
|
rabbit::ObjectPtr ret;
|
||||||
push(target); push(attrs);
|
push(target); push(attrs);
|
||||||
if(!call(_class(target)->_metamethods[MT_INHERITED],nparams,_top - nparams, ret, false)) {
|
if(!call(target.toClass()->_metamethods[MT_INHERITED],nparams,_top - nparams, ret, false)) {
|
||||||
pop(nparams);
|
pop(nparams);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
pop(nparams);
|
pop(nparams);
|
||||||
}
|
}
|
||||||
_class(target)->_attributes = attrs;
|
target.toClass()->_attributes = attrs;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -772,7 +772,7 @@ exception_restore:
|
|||||||
continue;
|
continue;
|
||||||
case rabbit::OT_CLASS:{
|
case rabbit::OT_CLASS:{
|
||||||
rabbit::ObjectPtr inst;
|
rabbit::ObjectPtr inst;
|
||||||
_GUARD(createClassInstance(_class(clo),inst,clo));
|
_GUARD(createClassInstance(clo.toClass(),inst,clo));
|
||||||
if(sarg0 != -1) {
|
if(sarg0 != -1) {
|
||||||
STK(arg0) = inst;
|
STK(arg0) = inst;
|
||||||
}
|
}
|
||||||
@ -972,7 +972,7 @@ exception_restore:
|
|||||||
case _OP_INSTANCEOF:
|
case _OP_INSTANCEOF:
|
||||||
if(sq_type(STK(arg1)) != rabbit::OT_CLASS)
|
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();}
|
{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(_class(STK(arg1)))?true:false) : false;
|
TARGET = (sq_type(STK(arg2)) == rabbit::OT_INSTANCE) ? (_instance(STK(arg2))->instanceOf(STK(arg1).toClass())?true:false) : false;
|
||||||
continue;
|
continue;
|
||||||
case _OP_AND:
|
case _OP_AND:
|
||||||
if(IsFalse(STK(arg2))) {
|
if(IsFalse(STK(arg2))) {
|
||||||
@ -1265,7 +1265,7 @@ bool rabbit::VirtualMachine::get(const rabbit::ObjectPtr &self, const rabbit::Ob
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_CLASS:
|
case rabbit::OT_CLASS:
|
||||||
if(_class(self)->get(key,dest)) {
|
if(const_cast<rabbit::Class*>(self.toClass())->get(key,dest)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1476,7 +1476,7 @@ bool rabbit::VirtualMachine::newSlotA(const rabbit::ObjectPtr &self,const rabbit
|
|||||||
raise_error("object must be a class");
|
raise_error("object must be a class");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
rabbit::Class *c = _class(self);
|
rabbit::Class *c = const_cast<rabbit::Class*>(self.toClass());
|
||||||
if(!raw) {
|
if(!raw) {
|
||||||
rabbit::ObjectPtr &mm = c->_metamethods[MT_NEWMEMBER];
|
rabbit::ObjectPtr &mm = c->_metamethods[MT_NEWMEMBER];
|
||||||
if(sq_type(mm) != rabbit::OT_NULL ) {
|
if(sq_type(mm) != rabbit::OT_NULL ) {
|
||||||
@ -1536,8 +1536,8 @@ bool rabbit::VirtualMachine::newSlot(const rabbit::ObjectPtr &self,const rabbit:
|
|||||||
return false;
|
return false;
|
||||||
break;}
|
break;}
|
||||||
case rabbit::OT_CLASS:
|
case rabbit::OT_CLASS:
|
||||||
if(!_class(self)->newSlot(_get_shared_state(this),key,val,bstatic)) {
|
if(!const_cast<rabbit::Class*>(self.toClass())->newSlot(_get_shared_state(this),key,val,bstatic)) {
|
||||||
if(_class(self)->_locked) {
|
if(self.toClass()->_locked) {
|
||||||
raise_error("trying to modify a class that has already been instantiated");
|
raise_error("trying to modify a class that has already been instantiated");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1614,7 +1614,7 @@ int64_t prevstackbase = _stackbase;
|
|||||||
case rabbit::OT_CLASS: {
|
case rabbit::OT_CLASS: {
|
||||||
rabbit::ObjectPtr constr;
|
rabbit::ObjectPtr constr;
|
||||||
rabbit::ObjectPtr temp;
|
rabbit::ObjectPtr temp;
|
||||||
createClassInstance(_class(closure),outres,constr);
|
createClassInstance(closure.toClass(),outres,constr);
|
||||||
rabbit::ObjectType ctype = sq_type(constr);
|
rabbit::ObjectType ctype = sq_type(constr);
|
||||||
if (ctype == rabbit::OT_NATIVECLOSURE || ctype == OT_CLOSURE) {
|
if (ctype == rabbit::OT_NATIVECLOSURE || ctype == OT_CLOSURE) {
|
||||||
_stack[stackbase] = outres;
|
_stack[stackbase] = outres;
|
||||||
@ -1797,7 +1797,7 @@ void rabbit::VirtualMachine::dumpstack(int64_t stackbase,bool dumpall)
|
|||||||
case rabbit::OT_GENERATOR: printf("GENERATOR %p",obj.toGenerator());break;
|
case rabbit::OT_GENERATOR: printf("GENERATOR %p",obj.toGenerator());break;
|
||||||
case rabbit::OT_THREAD: printf("THREAD [%p]",obj.toVirtualMachine());break;
|
case rabbit::OT_THREAD: printf("THREAD [%p]",obj.toVirtualMachine());break;
|
||||||
case rabbit::OT_USERPOINTER: printf("USERPOINTER %p",obj.toUserPointer());break;
|
case rabbit::OT_USERPOINTER: printf("USERPOINTER %p",obj.toUserPointer());break;
|
||||||
case rabbit::OT_CLASS: printf("CLASS %p",_class(obj));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",_instance(obj));break;
|
||||||
case rabbit::OT_WEAKREF: printf("WEAKERF %p",_weakref(obj));break;
|
case rabbit::OT_WEAKREF: printf("WEAKERF %p",_weakref(obj));break;
|
||||||
default:
|
default:
|
||||||
|
@ -300,7 +300,7 @@ rabbit::Result rabbit::sq_newclass(rabbit::VirtualMachine* v,rabbit::Bool hasbas
|
|||||||
rabbit::ObjectPtr &base = stack_get(v,-1);
|
rabbit::ObjectPtr &base = stack_get(v,-1);
|
||||||
if(sq_type(base) != rabbit::OT_CLASS)
|
if(sq_type(base) != rabbit::OT_CLASS)
|
||||||
return sq_throwerror(v,"invalid base type");
|
return sq_throwerror(v,"invalid base type");
|
||||||
baseclass = _class(base);
|
baseclass = base.toClass();
|
||||||
}
|
}
|
||||||
rabbit::Class *newclass = rabbit::Class::create(_get_shared_state(v), baseclass);
|
rabbit::Class *newclass = rabbit::Class::create(_get_shared_state(v), baseclass);
|
||||||
if(baseclass) v->pop();
|
if(baseclass) v->pop();
|
||||||
@ -315,7 +315,7 @@ rabbit::Bool rabbit::sq_instanceof(rabbit::VirtualMachine* v)
|
|||||||
if( sq_type(inst) != rabbit::OT_INSTANCE
|
if( sq_type(inst) != rabbit::OT_INSTANCE
|
||||||
|| sq_type(cl) != rabbit::OT_CLASS)
|
|| sq_type(cl) != rabbit::OT_CLASS)
|
||||||
return sq_throwerror(v,"invalid param type");
|
return sq_throwerror(v,"invalid param type");
|
||||||
return _instance(inst)->instanceOf(_class(cl))?SQTrue:SQFalse;
|
return _instance(inst)->instanceOf(cl.toClass())?SQTrue:SQFalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
rabbit::Result rabbit::sq_arrayappend(rabbit::VirtualMachine* v,int64_t idx)
|
rabbit::Result rabbit::sq_arrayappend(rabbit::VirtualMachine* v,int64_t idx)
|
||||||
@ -742,7 +742,7 @@ int64_t rabbit::sq_getsize(rabbit::VirtualMachine* v, int64_t idx)
|
|||||||
case rabbit::OT_ARRAY: return o.toArray()->size();
|
case rabbit::OT_ARRAY: return o.toArray()->size();
|
||||||
case rabbit::OT_USERDATA: return o.toUserData()->getsize();
|
case rabbit::OT_USERDATA: return o.toUserData()->getsize();
|
||||||
case rabbit::OT_INSTANCE: return _instance(o)->_class->_udsize;
|
case rabbit::OT_INSTANCE: return _instance(o)->_class->_udsize;
|
||||||
case rabbit::OT_CLASS: return _class(o)->_udsize;
|
case rabbit::OT_CLASS: return o.toClass()->_udsize;
|
||||||
default:
|
default:
|
||||||
return sq_aux_invalidtype(v, type);
|
return sq_aux_invalidtype(v, type);
|
||||||
}
|
}
|
||||||
@ -773,7 +773,7 @@ rabbit::Result rabbit::sq_settypetag(rabbit::VirtualMachine* v,int64_t idx,rabbi
|
|||||||
o.toUserData()->setTypeTag(typetag);
|
o.toUserData()->setTypeTag(typetag);
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_CLASS:
|
case rabbit::OT_CLASS:
|
||||||
_class(o)->_typetag = typetag;
|
o.toClass()->_typetag = typetag;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return sq_throwerror(v,"invalid object type");
|
return sq_throwerror(v,"invalid object type");
|
||||||
@ -786,7 +786,7 @@ rabbit::Result rabbit::sq_getobjtypetag(const rabbit::Object *o,rabbit::UserPoin
|
|||||||
switch(sq_type(*o)) {
|
switch(sq_type(*o)) {
|
||||||
case rabbit::OT_INSTANCE: *typetag = _instance(*o)->_class->_typetag; break;
|
case rabbit::OT_INSTANCE: *typetag = _instance(*o)->_class->_typetag; break;
|
||||||
case rabbit::OT_USERDATA: *typetag = o->toUserData()->getTypeTag(); break;
|
case rabbit::OT_USERDATA: *typetag = o->toUserData()->getTypeTag(); break;
|
||||||
case rabbit::OT_CLASS: *typetag = _class(*o)->_typetag; break;
|
case rabbit::OT_CLASS: *typetag = o->toClass()->_typetag; break;
|
||||||
default: return SQ_ERROR;
|
default: return SQ_ERROR;
|
||||||
}
|
}
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
@ -820,8 +820,8 @@ rabbit::Result rabbit::sq_setclassudsize(rabbit::VirtualMachine* v, int64_t idx,
|
|||||||
{
|
{
|
||||||
rabbit::ObjectPtr &o = stack_get(v,idx);
|
rabbit::ObjectPtr &o = stack_get(v,idx);
|
||||||
if(sq_type(o) != rabbit::OT_CLASS) return sq_throwerror(v,"the object is not a class");
|
if(sq_type(o) != rabbit::OT_CLASS) return sq_throwerror(v,"the object is not a class");
|
||||||
if(_class(o)->_locked) return sq_throwerror(v,"the class is locked");
|
if(o.toClass()->_locked) return sq_throwerror(v,"the class is locked");
|
||||||
_class(o)->_udsize = udsize;
|
o.toClass()->_udsize = udsize;
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -937,7 +937,7 @@ rabbit::Result rabbit::sq_rawset(rabbit::VirtualMachine* v,int64_t idx)
|
|||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_CLASS:
|
case rabbit::OT_CLASS:
|
||||||
_class(self)->newSlot(_get_shared_state(v), key, v->getUp(-1),false);
|
self.toClass()->newSlot(_get_shared_state(v), key, v->getUp(-1),false);
|
||||||
v->pop(2);
|
v->pop(2);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
break;
|
break;
|
||||||
@ -1074,7 +1074,7 @@ rabbit::Result rabbit::sq_rawget(rabbit::VirtualMachine* v,int64_t idx)
|
|||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_CLASS:
|
case rabbit::OT_CLASS:
|
||||||
if(_class(self)->get(obj,obj))
|
if(self.toClass()->get(obj,obj))
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_INSTANCE:
|
case rabbit::OT_INSTANCE:
|
||||||
@ -1270,7 +1270,7 @@ void rabbit::sq_setreleasehook(rabbit::VirtualMachine* v,int64_t idx,SQRELEASEHO
|
|||||||
_instance(ud)->_hook = hook;
|
_instance(ud)->_hook = hook;
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_CLASS:
|
case rabbit::OT_CLASS:
|
||||||
_class(ud)->_hook = hook;
|
ud.toClass()->_hook = hook;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
@ -1288,7 +1288,7 @@ SQRELEASEHOOK rabbit::sq_getreleasehook(rabbit::VirtualMachine* v,int64_t idx)
|
|||||||
return _instance(ud)->_hook;
|
return _instance(ud)->_hook;
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_CLASS:
|
case rabbit::OT_CLASS:
|
||||||
return _class(ud)->_hook;
|
return ud.toClass()->_hook;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1418,13 +1418,13 @@ rabbit::Result rabbit::sq_setattributes(rabbit::VirtualMachine* v,int64_t idx)
|
|||||||
rabbit::ObjectPtr &val = stack_get(v,-1);
|
rabbit::ObjectPtr &val = stack_get(v,-1);
|
||||||
rabbit::ObjectPtr attrs;
|
rabbit::ObjectPtr attrs;
|
||||||
if(sq_type(key) == rabbit::OT_NULL) {
|
if(sq_type(key) == rabbit::OT_NULL) {
|
||||||
attrs = _class(*o)->_attributes;
|
attrs = o->toClass()->_attributes;
|
||||||
_class(*o)->_attributes = val;
|
o->toClass()->_attributes = val;
|
||||||
v->pop(2);
|
v->pop(2);
|
||||||
v->push(attrs);
|
v->push(attrs);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}else if(_class(*o)->getAttributes(key,attrs)) {
|
}else if(o->toClass()->getAttributes(key,attrs)) {
|
||||||
_class(*o)->setAttributes(key,val);
|
o->toClass()->setAttributes(key,val);
|
||||||
v->pop(2);
|
v->pop(2);
|
||||||
v->push(attrs);
|
v->push(attrs);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
@ -1439,12 +1439,12 @@ rabbit::Result rabbit::sq_getattributes(rabbit::VirtualMachine* v,int64_t idx)
|
|||||||
rabbit::ObjectPtr &key = stack_get(v,-1);
|
rabbit::ObjectPtr &key = stack_get(v,-1);
|
||||||
rabbit::ObjectPtr attrs;
|
rabbit::ObjectPtr attrs;
|
||||||
if(sq_type(key) == rabbit::OT_NULL) {
|
if(sq_type(key) == rabbit::OT_NULL) {
|
||||||
attrs = _class(*o)->_attributes;
|
attrs = o->toClass()->_attributes;
|
||||||
v->pop();
|
v->pop();
|
||||||
v->push(attrs);
|
v->push(attrs);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
else if(_class(*o)->getAttributes(key,attrs)) {
|
else if(o->toClass()->getAttributes(key,attrs)) {
|
||||||
v->pop();
|
v->pop();
|
||||||
v->push(attrs);
|
v->push(attrs);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
@ -1457,7 +1457,7 @@ rabbit::Result rabbit::sq_getmemberhandle(rabbit::VirtualMachine* v,int64_t idx,
|
|||||||
rabbit::ObjectPtr *o = NULL;
|
rabbit::ObjectPtr *o = NULL;
|
||||||
_GETSAFE_OBJ(v, idx, rabbit::OT_CLASS,o);
|
_GETSAFE_OBJ(v, idx, rabbit::OT_CLASS,o);
|
||||||
rabbit::ObjectPtr &key = stack_get(v,-1);
|
rabbit::ObjectPtr &key = stack_get(v,-1);
|
||||||
rabbit::Table *m = _class(*o)->_members;
|
rabbit::Table *m = o->toClass()->_members;
|
||||||
rabbit::ObjectPtr val;
|
rabbit::ObjectPtr val;
|
||||||
if(m->get(key,val)) {
|
if(m->get(key,val)) {
|
||||||
handle->_static = _isfield(val) ? SQFalse : SQTrue;
|
handle->_static = _isfield(val) ? SQFalse : SQTrue;
|
||||||
@ -1484,7 +1484,7 @@ rabbit::Result _getmemberbyhandle(rabbit::VirtualMachine* v,rabbit::ObjectPtr &s
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case rabbit::OT_CLASS: {
|
case rabbit::OT_CLASS: {
|
||||||
rabbit::Class *c = _class(self);
|
rabbit::Class *c = self.toClass();
|
||||||
if(handle->_static) {
|
if(handle->_static) {
|
||||||
val = &c->_methods[handle->_index].val;
|
val = &c->_methods[handle->_index].val;
|
||||||
}
|
}
|
||||||
@ -1527,8 +1527,8 @@ rabbit::Result rabbit::sq_getbase(rabbit::VirtualMachine* v,int64_t idx)
|
|||||||
{
|
{
|
||||||
rabbit::ObjectPtr *o = NULL;
|
rabbit::ObjectPtr *o = NULL;
|
||||||
_GETSAFE_OBJ(v, idx, rabbit::OT_CLASS,o);
|
_GETSAFE_OBJ(v, idx, rabbit::OT_CLASS,o);
|
||||||
if(_class(*o)->_base)
|
if(o->toClass()->_base)
|
||||||
v->push(rabbit::ObjectPtr(_class(*o)->_base));
|
v->push(rabbit::ObjectPtr(o->toClass()->_base));
|
||||||
else
|
else
|
||||||
v->pushNull();
|
v->pushNull();
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
@ -1546,7 +1546,7 @@ rabbit::Result rabbit::sq_createinstance(rabbit::VirtualMachine* v,int64_t idx)
|
|||||||
{
|
{
|
||||||
rabbit::ObjectPtr *o = NULL;
|
rabbit::ObjectPtr *o = NULL;
|
||||||
_GETSAFE_OBJ(v, idx, rabbit::OT_CLASS,o);
|
_GETSAFE_OBJ(v, idx, rabbit::OT_CLASS,o);
|
||||||
v->push(_class(*o)->createInstance());
|
v->push(o->toClass()->createInstance());
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user