7 #define UINT_MINUS_ONE (0xFFFFFFFF)
9 #define VX_OBJECT_RAWINIT(selfptr) { selfptr->_unVal.raw = 0; }
10 #define VX_REFOBJECT_INIT(selfptr) VX_OBJECT_RAWINIT(selfptr)
13 #define VX_CLOSURESTREAM_HEAD (('L' << 24) | ('X' << 16) | ('O' << 8) | 'V')
14 #define VX_CLOSURESTREAM_PART (('P' << 24) | ('A' << 16) |('R' << 8) | 'T')
15 #define VX_CLOSURESTREAM_TAIL (('T' << 24) | ('A' << 16) |('I' << 8) | 'L')
18 #define VX_CLOSURESTREAM_HEAD \
19 (('!' << 24) | ('X' << 16) | ('O' << 8) | 'V')
21 #define VX_CLOSURESTREAM_PART \
22 (('T' << 24) | (10 << 16) | ('P' << 8) | 100)
24 #define VX_CLOSURESTREAM_TAIL \
25 (('L' << 24) | (10 << 16) | ('T' << 8) | 200)
27 #define _CHECK_IO(exp) { if(!exp)return false; }
29 #define VX_MM_ADD "__add__"
30 #define VX_MM_SUB "__sub__"
31 #define VX_MM_MUL "__mul__"
32 #define VX_MM_DIV "__div__"
33 #define VX_MM_UNM "__unm__"
34 #define VX_MM_MODULO "__modulo__"
35 #define VX_MM_SET "__set__"
36 #define VX_MM_GET "__get__"
37 #define VX_MM_TYPEOF "__typeof__"
38 #define VX_MM_NEXTI "__nexti__"
39 #define VX_MM_CMP "__cmp__"
40 #define VX_MM_CALL "__call__"
41 #define VX_MM_CLONED "__cloned__"
42 #define VX_MM_NEWSLOT "__newslot__"
43 #define VX_MM_DELSLOT "__delslot__"
44 #define VX_MM_TOSTRING "__tostring__"
45 #define VX_MM_NEWMEMBER "__newmember__"
46 #define VX_MM_INHERITED "__inherited__"
49 #define VX_CONSTRUCT_VECTOR(type,size,ptr) \
51 for(VXInteger n = 0; n < ((VXInteger)size); n++) { \
52 new (&ptr[n]) type(); \
56 #define VX_DESTRUCT_VECTOR(type,size,ptr) { \
57 for(VXInteger nl = 0; nl < ((VXInteger)size); nl++) { \
62 #define VX_COPY_VECTOR(dest,src,size) { \
63 for(VXInteger _n_ = 0; _n_ < ((VXInteger)size); _n_++) { \
64 dest[_n_] = src[_n_]; \
75 #define VX_REALVAL(o) (type((o)) != VX_OT_WEAKREF?(VXRawObj)o:_weakref(o)->_obj)
78 #define VX_ADDREF(type,unval) if(ISREFCOUNTED(type)) \
80 unval.pRefCounted->_uiRef++; \
83 #define __Release(type,unval) \
84 if(ISREFCOUNTED(type) && ((--unval.pRefCounted->_uiRef)==0)) \
86 unval.pRefCounted->Release(); \
89 #define __ObjRelease(obj) { \
92 if((obj)->_uiRef == 0) \
98 #define __ObjAddRef(obj) { \
102 #define type(obj) ((obj)._type)
103 #define is_delegable(t) (t.Type() & VXOBJECT_DELEGABLE)
105 #define _integer(obj) ((obj)._unVal.nInteger)
106 #define _float(obj) ((obj)._unVal.fFloat)
107 #define _string(obj) ((obj)._unVal.pString)
108 #define _table(obj) ((obj)._unVal.pTable)
109 #define _array(obj) ((obj)._unVal.pArray)
110 #define _closure(obj) ((obj)._unVal.pClosure)
111 #define _generator(obj) ((obj)._unVal.pGenerator)
112 #define _nativeclosure(obj) ((obj)._unVal.pNativeClosure)
113 #define _userdata(obj) ((obj)._unVal.pUserData)
114 #define _userpointerval(obj) ((obj)._unVal.pUserPointer)
115 #define _thread(obj) ((obj)._unVal.pThread)
116 #define _funcproto(obj) ((obj)._unVal.pFunctionProto)
117 #define _class(obj) ((obj)._unVal.pClass)
118 #define _instance(obj) ((obj)._unVal.pInstance)
119 #define _delegable(obj) ((VXDelegableObj *)(obj)._unVal.pDelegable)
120 #define _weakref(obj) ((obj)._unVal.pWeakRef)
121 #define _outer(obj) ((obj)._unVal.pOuter)
122 #define _refcounted(obj) ((obj)._unVal.pRefCounted)
123 #define _rawval(obj) ((obj)._unVal.raw)
125 #define _stringval(obj) (((obj)._unVal).pString->Value())
126 #define _stringlen(obj) (((obj)._unVal).pString->Length())
127 #define _userdataval(obj) ((VXUserPointer)vox_aligning((obj)._unVal.pUserData + 1))
129 #define tofloat(num) ((type(num)==VX_OT_INTEGER)?(VXFloat)_integer(num):_float(num))
130 #define tointeger(num) ((type(num)==VX_OT_FLOAT)?(VXInteger)_float(num):_integer(num))
134 #define START_MARK() \
135 if(!(_uiRef & MARK_FLAG))\
140 this->RemoveFromChain(&_sharedstate->_gc_chain, this); \
141 this->AddToChain(chain, this); \
145 #define MARK_FLAG 0x80000000
146 #define ADD_TO_CHAIN(chain,obj) AddToChain(chain,obj)
147 #define REMOVE_FROM_CHAIN(chain,obj) {if(!(_uiRef&MARK_FLAG)) this->RemoveFromChain(chain,obj);}
148 #define CHAINABLE_OBJ VXCollectable
149 #define INIT_CHAIN() {_next=NULL;_prev=NULL;_sharedstate=ss;}
153 struct VXSharedState
;
155 typedef VXVector
<VXInteger
> VXIntVec
;
157 inline void _Swap(VXRawObj
&a
,VXRawObj
&b
)
159 VXOType tOldType
= a
._type
;
160 VXRawObj::Value unOldVal
= a
._unVal
;
167 template<typename Type
> void _NULL_VXOBJECT_VECTOR(Type
& vec
, VXInteger size
)
170 for(n
= 0; n
< size
; n
++)
177 VXUnsignedInteger
TranslateIndex(const VXObject
&idx
);
180 const char *GetTypeName(const VXObject
&obj1
);
181 const char *IdType2Name(VXOType type
);
183 bool SafeWrite(VXState
* v
,
188 bool SafeRead(VXState
* v
,VXWriteFunc read
,VXUserPointer up
,VXUserPointer dest
,VXInteger size
);
189 bool WriteTag(VXState
* v
,VXWriteFunc write
,VXUserPointer up
,VXUnsignedInteger32 tag
);
190 bool CheckTag(VXState
* v
,VXWriteFunc read
,VXUserPointer up
,VXUnsignedInteger32 tag
);
191 bool WriteObject(VXState
* v
,VXUserPointer up
,VXWriteFunc write
,VXObject
&o
);
192 bool ReadObject(VXState
* v
,VXUserPointer up
,VXReadFunc read
,VXObject
&o
);
195 #endif //_VXOBJECT_H_