41 lines
737 B
Plaintext
41 lines
737 B
Plaintext
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
|