MCPcopy Create free account
hub / github.com/HaxeFoundation/hxcpp / GetAllocTypeChecked

Method GetAllocTypeChecked

src/hx/gc/Immix.cpp:1147–1172  ·  view source on GitHub ↗

When known to be an actual object start...

Source from the content-addressed store, hash-verified

1145
1146 // When known to be an actual object start...
1147 AllocType GetAllocTypeChecked(int inOffset, bool allowPrevious)
1148 {
1149 char time = mPtr->mRow[0][inOffset+HX_ENDIAN_MARK_ID_BYTE_HEADER];
1150 if ( ((time+1) & MARK_BYTE_MASK) != (gByteMarkID & MARK_BYTE_MASK) )
1151 {
1152 // Object is either out-of-date, or already marked....
1153 return time==gByteMarkID ? allocMarked : allocNone;
1154 }
1155
1156 if (!allowPrevious)
1157 return allocNone;
1158
1159 if (*(unsigned int *)(mPtr->mRow[0] + inOffset) & IMMIX_ALLOC_IS_CONTAINER)
1160 {
1161 // See if object::new has been called, but not constructed yet ...
1162 void **vtable = (void **)(mPtr->mRow[0] + inOffset + sizeof(int));
1163 if (vtable[0]==0)
1164 {
1165 // GCLOG("Partially constructed object.");
1166 return allocString;
1167 }
1168 return allocObject;
1169 }
1170
1171 return allocString;
1172 }
1173
1174 #ifdef HXCPP_GC_NURSERY
1175 AllocType GetEnclosingNurseryType(int inOffset, void **outPtr)

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected