ArrayObject<T>* allocateArray(ArrayType type, size_t arraySize) { ExecutionEngine * eng = new ExecutionEngine(); eng->heap = new Heap(); eng->objectTable = new ObjectTable(); Method m = getMethod(); m.byteCode = new Instruction[2]; m.byteCode[0] = (Instruction)InstructionSet::NEWARRAY; m.byteCode[1] = (Instruction)type; m.byteCodeLength = 2; MethodFrame frm(2, 2); frm.operandStack->push(arraySize); frm.pc = 0; frm.method = &m; eng->execute(&frm); int result = frm.operandStack->pop(); Assert::AreNotEqual(0, result); Assert::AreEqual(1, result); ArrayObject<T> * objectPtr = (ArrayObject<T> *) eng->objectTable->get(result); return objectPtr; }