local Stack = require("Stack") local type State = record dataStacks: {Stack} compilerStack: Stack activeDataStack: Stack interrupts: {function(State)} -- dictionaries: {string:any} end local state_mt = {__index = State} function State:new(): State return setmetatable( { dataStacks = {}, compilerStack = Stack:new() } as State, state_mt) end function State:addDataStack(data: Stack) table.insert(self.dataStacks, data) end function State:changeCompilerStack(compilerStack: Stack) self.compilerStack = compilerStack end function State:changeActiveDataStack(stackIndex: number) assert(stackIndex <= #self.dataStacks and stackIndex > 0) self.activeDataStack = self.dataStacks[stackIndex] end return State