Graphical Remote Lua Debugger, a debugger for the lua programming language.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.3 KiB

-- see copyright notice in wxLdb.lua
local wx = require( "wx" )
local coroutine = coroutine
local assert = assert
local debug = debug
module( "mainthread" )
local mainObj = nil
local eventsData = {}
local id = 194283
function init( obj )
assert( coroutine.running() == nil )
assert( obj ~= nil )
assert( mainObj == nil )
mainObj = obj
mainObj:Connect( wx.wxEVT_NULL, function( event )
if event:GetId() == id then
local data = assert( eventsData[event:GetInt()] )
eventsData[event:GetInt()] = nil
local ok, msg = coroutine.resume( data.coroutine, data.func() )
assert( ok, debug.traceback( data.coroutine, msg ) )
end
end )
end
function execute( f )
assert( mainObj ~= nil )
if coroutine.running() == nil then
return f()
else
local e = wx.wxCommandEvent() -- event ID is wxEVT_NULL ; if someone else post this event for another purpose, it will conflict with this system...
local data = {}
data.coroutine = coroutine.running()
data.func = f
local dataId = #eventsData + 1 -- we don't care if dataId does not increment each time a new event is created ; in any case, we are sure that, by definition of the length operator, eventsData[#eventsData+1] is nil
eventsData[dataId] = data
e:SetInt( dataId )
e:SetId( id )
wx.wxPostEvent( mainObj, e )
return coroutine.yield()
end
end