#pragma once #include "ByteCode.hpp" #include "core/Object.hpp" namespace obj { // can be other aligned value as well typedef obj::Object* Operand; class OperandStack { enum : tp::alni { MAX_STACK_SIZE = 512 }; public: Operand* mBuff; tp::ualni mIdx; OperandStack(); void push(Operand operand); void pop(); Operand getOperand(); template ObjectType* getOperand() { auto operand = getOperand(); auto ret = NDO_CAST(ObjectType, operand); ASSERT(ret && "Operand Has Invalid Object Type"); return ret; } ~OperandStack(); }; };