| 30 | #define IOOBJECT_PERSISTENCE 1 |
| 31 | |
| 32 | struct IoObjectData { |
| 33 | unsigned int markerCount; |
| 34 | |
| 35 | union { |
| 36 | void *ptr; |
| 37 | double d; |
| 38 | uint32_t ui32; |
| 39 | } data; // 8 bytes (9+8 = 17) |
| 40 | |
| 41 | // 4*4 = 16 bytes (17+16 = 33) |
| 42 | IoTag *tag; |
| 43 | PHash *slots; |
| 44 | List *listeners; |
| 45 | IoObject **protos; |
| 46 | |
| 47 | unsigned int hasDoneLookup : 1; // used to avoid slot lookup loops |
| 48 | unsigned int |
| 49 | isActivatable : 1; // if true, upon activation, call activate slot |
| 50 | unsigned int |
| 51 | isDirty : 1; // set to true when the object changes its storable state |
| 52 | |
| 53 | // optimizations |
| 54 | |
| 55 | unsigned int ownsSlots : 1; // if true, io_free slots hash table when |
| 56 | // io_freeing object |
| 57 | unsigned int |
| 58 | isSymbol : 1; // true if the object is a unqiue sequence - a symbol |
| 59 | unsigned int isLocals : 1; // true if the Object is a locals object |
| 60 | unsigned int isReferenced : 1; // 1 bit ref counter |
| 61 | unsigned int sentWillFree : 1; // 1 is sent willFree mes |
| 62 | // unsigned int isPObject : 1; // check before type tests? |
| 63 | }; |
| 64 | |
| 65 | #define IoObject_deref(self) \ |
| 66 | ((IoObjectData *)(((CollectorMarker *)(self))->object)) |
nothing calls this directly
no outgoing calls
no test coverage detected