[DEV] remote _weakref()
This commit is contained in:
parent
0f8fe6003f
commit
d1509119e9
@ -74,7 +74,7 @@ bool rabbit::Generator::resume(rabbit::VirtualMachine *v,rabbit::ObjectPtr &dest
|
|||||||
et._stacksize += newbase;
|
et._stacksize += newbase;
|
||||||
}
|
}
|
||||||
rabbit::Object _this = _stack[0];
|
rabbit::Object _this = _stack[0];
|
||||||
v->_stack[v->_stackbase] = sq_type(_this) == rabbit::OT_WEAKREF ? _weakref(_this)->_obj : _this;
|
v->_stack[v->_stackbase] = sq_type(_this) == rabbit::OT_WEAKREF ? _this.toWeakRef()->_obj : _this;
|
||||||
|
|
||||||
for(int64_t n = 1; n<size; n++) {
|
for(int64_t n = 1; n<size; n++) {
|
||||||
v->_stack[v->_stackbase+n] = _stack[n];
|
v->_stack[v->_stackbase+n] = _stack[n];
|
||||||
|
@ -144,12 +144,11 @@ namespace rabbit {
|
|||||||
unval.pRefCounted->release(); \
|
unval.pRefCounted->release(); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define _realval(o) (sq_type((o)) != rabbit::OT_WEAKREF?(rabbit::Object)o:_weakref(o)->_obj)
|
#define _realval(o) (sq_type((o)) != rabbit::OT_WEAKREF?(rabbit::Object)o:(o).toWeakRef()->_obj)
|
||||||
|
|
||||||
#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 _weakref(obj) ((obj)._unVal.pWeakRef)
|
|
||||||
#define _outer(obj) ((obj)._unVal.pOuter)
|
#define _outer(obj) ((obj)._unVal.pOuter)
|
||||||
#define _refcounted(obj) ((obj)._unVal.pRefCounted)
|
#define _refcounted(obj) ((obj)._unVal.pRefCounted)
|
||||||
#define _rawval(obj) ((obj)._unVal.raw)
|
#define _rawval(obj) ((obj)._unVal.raw)
|
||||||
|
@ -1799,7 +1799,7 @@ void rabbit::VirtualMachine::dumpstack(int64_t stackbase,bool dumpall)
|
|||||||
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",obj.toClass());break;
|
case rabbit::OT_CLASS: printf("CLASS %p",obj.toClass());break;
|
||||||
case rabbit::OT_INSTANCE: printf("INSTANCE %p",obj.toInstance());break;
|
case rabbit::OT_INSTANCE: printf("INSTANCE %p",obj.toInstance());break;
|
||||||
case rabbit::OT_WEAKREF: printf("WEAKERF %p",_weakref(obj));break;
|
case rabbit::OT_WEAKREF: printf("WEAKERF %p",obj.toWeakRef());break;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
break;
|
break;
|
||||||
|
@ -1566,7 +1566,7 @@ rabbit::Result rabbit::sq_getweakrefval(rabbit::VirtualMachine* v,int64_t idx)
|
|||||||
if(sq_type(o) != rabbit::OT_WEAKREF) {
|
if(sq_type(o) != rabbit::OT_WEAKREF) {
|
||||||
return sq_throwerror(v,"the object must be a weakref");
|
return sq_throwerror(v,"the object must be a weakref");
|
||||||
}
|
}
|
||||||
v->push(_weakref(o)->_obj);
|
v->push(o.toWeakRef()->_obj);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user