Added separate debugger file and fixed shell to new form
This commit is contained in:
73
debugger.lua
Normal file
73
debugger.lua
Normal file
@ -0,0 +1,73 @@
|
||||
local core = require "core"
|
||||
|
||||
---@class runner
|
||||
local runner = {
|
||||
new = function(self, o) end, ---@meta
|
||||
run = function(self, target, name) end, ---@meta
|
||||
wait = function(sefl, time) end, ---@meta
|
||||
kill = function(self) end, ---@meta
|
||||
terminate = function(self) end, ---@meta
|
||||
}
|
||||
|
||||
local debugger = {}
|
||||
local debugwindow = nil ---@type JPDebugView
|
||||
local debugrunner = nil ---@type runner|nil
|
||||
|
||||
function debugger.log(msg)
|
||||
core.log("[jpdebug][debugger] %s", msg)
|
||||
if debugwindow then debugwindow:push("meta", "debugger] "..msg) end
|
||||
end
|
||||
|
||||
function debugger.error(msg)
|
||||
core.error("[jpdebug][debugger]"..msg)
|
||||
if debugwindow then debugwindow:push("meta", "debugger] ERROR: "..msg) end
|
||||
end
|
||||
|
||||
function debugger.stdout(msg)
|
||||
if debugwindow then debugwindow:push("stdout", msg) end
|
||||
end
|
||||
|
||||
function debugger.stderr(msg)
|
||||
if debugwindow then debugwindow:push("stderr", msg) end
|
||||
end
|
||||
|
||||
function debugger.is_running()
|
||||
return debugrunner~=nil
|
||||
end
|
||||
|
||||
function debugger.run(target, name, r, view)
|
||||
debugwindow = view
|
||||
debugwindow:clear()
|
||||
debugger.log(string.format("Running %s", name))
|
||||
|
||||
-- Create new runner object
|
||||
debugrunner = r:new({
|
||||
log = debugger.log,
|
||||
error = debugger.error,
|
||||
stdout = debugger.stdout,
|
||||
stderr = debugger.stderr,
|
||||
exited = debugger.exited,
|
||||
})
|
||||
-- And run
|
||||
debugrunner:run(target, name)
|
||||
end
|
||||
|
||||
function debugger.stop()
|
||||
if debugrunner then
|
||||
debugrunner:kill()
|
||||
local exitcode = debugrunner:wait(1000)
|
||||
-- TODO terminate if needed
|
||||
debugger.log(string.format("... Stoped: %d", exitcode))
|
||||
end
|
||||
debugrunner = nil
|
||||
end
|
||||
|
||||
function debugger.exited()
|
||||
if debugrunner then
|
||||
local exitcode = debugrunner:wait(process.WAIT_INFINITE)
|
||||
debugger.log(string.format("exit: %d", exitcode))
|
||||
end
|
||||
debugrunner = nil
|
||||
end
|
||||
|
||||
return debugger
|
||||
Reference in New Issue
Block a user