71 lines
1.5 KiB
Lua
71 lines
1.5 KiB
Lua
local Stack = require("dms.stack")
|
|
local Queue = require("dms.queue")
|
|
local Chunk = {}
|
|
Chunk.__index = Chunk
|
|
function Chunk:__tostring()
|
|
local str = self.chunkname..":"..self.chunktype.."\n"
|
|
local s = ""
|
|
for i,v in pairs(self.cmds) do
|
|
str = str .. tostring(v).."\n"
|
|
end
|
|
return str
|
|
end
|
|
function Chunk:new(cname,ctype,filename)
|
|
local c = {}
|
|
setmetatable(c,self)
|
|
c.chunkname = cname
|
|
c.chunktype = ctype
|
|
c.filename = filename
|
|
c.variables = {}
|
|
c.pos = 0
|
|
c.cmds = {}
|
|
c.control = Stack:new()
|
|
c.lastCMD = nil
|
|
c.alerts = {}
|
|
return c
|
|
end
|
|
function Chunk:addVariable(value)
|
|
self.varaiables[value.name] = value.value
|
|
end
|
|
function Chunk:addCmd(cmd)
|
|
--print(">",cmd)
|
|
if self.control:count()==0 then
|
|
cmd.chunk = self
|
|
table.insert(self.cmds,cmd)
|
|
else
|
|
if cmd.line[2] < self.lastCMD.line[2] then
|
|
self:doPop()
|
|
self:addCmd(cmd)
|
|
return
|
|
end
|
|
cmd.chunk = self
|
|
table.insert(self.cmds,cmd)
|
|
end
|
|
self.lastCMD = cmd
|
|
end
|
|
function Chunk:count()
|
|
return #self.cmds
|
|
end
|
|
function Chunk:finished()
|
|
self:doPop()
|
|
end
|
|
function Chunk:doPop(amt)
|
|
if amt then
|
|
for i=1,amt do
|
|
self.control:pop()()
|
|
end
|
|
else
|
|
local scope = self.control:pop()
|
|
--while scope do
|
|
if scope then
|
|
scope()
|
|
scope = self.control:pop()
|
|
end
|
|
--end
|
|
end
|
|
end
|
|
function Chunk:setScope(func)
|
|
self.first = true
|
|
self.control:push(func)
|
|
end
|
|
return Chunk |