small fixes again

This commit is contained in:
TopchetoEU 2025-02-06 18:12:57 +02:00
parent e6eeb41a75
commit 606f2cdd57
Signed by: topchetoeu
GPG Key ID: 6531B8583E5F6ED4
3 changed files with 17 additions and 12 deletions

View File

@ -1,4 +1,4 @@
.PHONY: clean install-mods install
.PHONY: clean install-mods install build-c
install: clean install-mods
luajit build/init.lua --linux
@ -11,3 +11,7 @@ install-mods: clean
clean:
rm -rf ~/.local/bin/tal
rm -rf ~/.local/lib/.tal_mod
make -C native clean
build-c:
make -C native build

View File

@ -1,7 +1,7 @@
local resolver = require "lua-resolver";
local stack = array {};
local active;
local active_th, main_th;
local exports = {};
@ -11,23 +11,24 @@ function exports.push(...)
end
function exports.interrupt()
if coro.running() == active then
if coro.running() == active_th then
-- We are trying to interrupt the currently active event loop thread
-- We will transfer away from it and "abandon" it (leave it for non-event loop use)
return coro.transfer(exports.main);
return coro.transfer(main_th);
else
-- We are currently in an abandoned or a non-loop thread. We can calmly transfer to the active thread
return coro.transfer(active);
return coro.transfer(active_th);
end
end
--- @param main fun(...)
--- @param ... any
function exports.run(main, ...)
if active then
if active_th then
error "Event loop is already running!";
end
exports.main = coro.running();
main_th = coro.running();
local args = box(...);
exports.push(function ()
@ -35,16 +36,16 @@ function exports.run(main, ...)
end)
while #stack > 0 do
active = coro.create(function ()
while #stack > 0 and coro.running() == active do
active_th = coro.create(function ()
while #stack > 0 and coro.running() == active_th do
local msg = stack:shift();
msg();
end
coro.transfer(exports.main);
coro.transfer(main_th);
end);
coro.transfer(active);
coro.transfer(active_th);
print "Abandoned thread...";
end
end

View File

@ -9,7 +9,7 @@ return function (glob)
if sep == "" then
for i = 1, #self do
lines:push(self:sub(1, 1));
lines:push(self:at(i));
end
else
while true do