VarCell* Context::_newVarCell(VarData* vd) { ASMJIT_ASSERT(vd->_memCell == nullptr); VarCell* cell; uint32_t size = vd->getSize(); if (vd->isStack()) { cell = _newStackCell(size, vd->getAlignment()); if (cell == nullptr) return nullptr; } else { cell = static_cast<VarCell*>(_zoneAllocator.alloc(sizeof(VarCell))); if (cell == nullptr) goto _NoMemory; cell->_next = _memVarCells; _memVarCells = cell; cell->_offset = 0; cell->_size = size; cell->_alignment = size; _memMaxAlign = Utils::iMax<uint32_t>(_memMaxAlign, size); _memVarTotal += size; switch (size) { case 1: _mem1ByteVarsUsed++ ; break; case 2: _mem2ByteVarsUsed++ ; break; case 4: _mem4ByteVarsUsed++ ; break; case 8: _mem8ByteVarsUsed++ ; break; case 16: _mem16ByteVarsUsed++; break; case 32: _mem32ByteVarsUsed++; break; case 64: _mem64ByteVarsUsed++; break; default: ASMJIT_NOT_REACHED(); } } vd->_memCell = cell; return cell; _NoMemory: _compiler->setLastError(kErrorNoHeapMemory); return nullptr; }
MemCell* Context::_newVarCell(VarData* vd) { ASMJIT_ASSERT(vd->_memCell == NULL); MemCell* cell; uint32_t size = vd->getSize(); if (vd->isStack()) { cell = _newStackCell(size, vd->getAlignment()); if (cell == NULL) return NULL; } else { cell = static_cast<MemCell*>(_baseZone.alloc(sizeof(MemCell))); if (cell == NULL) goto _NoMemory; cell->_next = _memVarCells; _memVarCells = cell; cell->_offset = 0; cell->_size = size; cell->_alignment = size; _memMaxAlign = IntUtil::iMax<uint32_t>(_memMaxAlign, size); _memVarTotal += size; switch (size) { case 1: _mem1ByteVarsUsed++ ; break; case 2: _mem2ByteVarsUsed++ ; break; case 4: _mem4ByteVarsUsed++ ; break; case 8: _mem8ByteVarsUsed++ ; break; case 16: _mem16ByteVarsUsed++; break; case 32: _mem32ByteVarsUsed++; break; case 64: _mem64ByteVarsUsed++; break; default: ASMJIT_ASSERT(!"Reached"); } } vd->_memCell = cell; return cell; _NoMemory: _compiler->setError(kErrorNoHeapMemory); return NULL; }