[DEV] remote _weakref()

This commit is contained in:
Edouard DUPIN 2018-07-03 22:34:09 +02:00
parent 0f8fe6003f
commit d1509119e9
4 changed files with 4 additions and 5 deletions

View File

@ -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];

View File

@ -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)

View File

@ -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;

View File

@ -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;
} }