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

Method MarkObjectArray

src/hx/gc/Immix.cpp:2231–2313  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2229
2230
2231void MarkObjectArray(hx::Object **inPtr, int inLength, hx::MarkContext *__inCtx)
2232{
2233 hx::Object *tmp;
2234
2235 int extra = inLength & 0x0f;
2236 for(int i=0;i<extra;i++)
2237 if (inPtr[i]) MarkObjectAlloc(inPtr[i],__inCtx);
2238 if (inLength==extra)
2239 return;
2240
2241 inLength -= extra;
2242 hx::Object **ptrI = inPtr + extra;
2243 hx::Object **end = ptrI + inLength;
2244
2245
2246 #define MARK_PTR_I \
2247 tmp = *ptrI++; \
2248 if (tmp) MarkObjectAlloc(tmp,__inCtx);
2249
2250
2251
2252 #ifdef HX_MULTI_THREAD_MARKING
2253 if (sAllThreads && inLength>4096)
2254 {
2255 hx::Object **dishOffEnd = end - 4096;
2256 while(ptrI<end)
2257 {
2258 // Are the other threads slacking off?
2259 if ((sRunningThreads != sAllThreads) && ptrI<dishOffEnd)
2260 {
2261 ptrI += sGlobalChunks.takeArrayJob(ptrI, end-ptrI);
2262 }
2263 else
2264 {
2265 MARK_PTR_I;
2266 MARK_PTR_I;
2267 MARK_PTR_I;
2268 MARK_PTR_I;
2269
2270 MARK_PTR_I;
2271 MARK_PTR_I;
2272 MARK_PTR_I;
2273 MARK_PTR_I;
2274
2275 MARK_PTR_I;
2276 MARK_PTR_I;
2277 MARK_PTR_I;
2278 MARK_PTR_I;
2279
2280 MARK_PTR_I;
2281 MARK_PTR_I;
2282 MARK_PTR_I;
2283 MARK_PTR_I;
2284 }
2285 }
2286 }
2287 else
2288 #endif

Callers

nothing calls this directly

Calls 2

MarkObjectAllocFunction · 0.85
takeArrayJobMethod · 0.80

Tested by

no test coverage detected