| 193 | } |
| 194 | |
| 195 | void task_serializeState(Stream* stream, Task* task, void* userData, LocalMemorySerCallback localMemCallback, bool resetIP) |
| 196 | { |
| 197 | SERIALIZE(SaveVersionInit, task->context.ip[0], 0); |
| 198 | SERIALIZE(SaveVersionInit, task->context.stackSize[0], 0); |
| 199 | SERIALIZE(SaveVersionInit, task->nextTick, 0); |
| 200 | if (serialization_getMode() == SMODE_READ && !task->context.stackMem) |
| 201 | { |
| 202 | task->context.stackMem = (u8*)allocFromChunkedArray(s_stackBlocks); |
| 203 | memset(task->context.stackMem, 0, sizeof(u32) * TASK_MAX_LEVELS); |
| 204 | task->context.stackOffset = 0; |
| 205 | task->context.stackPtr[0] = task->context.stackMem; |
| 206 | } |
| 207 | SERIALIZE(SaveVersionInit, task->context.stackOffset, 0); |
| 208 | if (localMemCallback) |
| 209 | { |
| 210 | localMemCallback(stream, userData, task->context.stackPtr[0]); |
| 211 | } |
| 212 | else |
| 213 | { |
| 214 | // This only works with relocatable state. |
| 215 | SERIALIZE_BUF(SaveVersionInit, task->context.stackPtr[0], task->context.stackSize[0]); |
| 216 | } |
| 217 | |
| 218 | if (resetIP) |
| 219 | { |
| 220 | task->context.ip[0] = 0; |
| 221 | } |
| 222 | } |
| 223 | |
| 224 | Task* task_getCurrent() |
| 225 | { |
no test coverage detected