#pragma once #include "bytecode.h" #include "core/object.h" 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(); }; };