Compare commits

...

2 Commits

Author SHA1 Message Date
606f2cdd57
small fixes again 2025-02-06 18:12:57 +02:00
e6eeb41a75
improve modules 2025-02-06 18:09:35 +02:00
9 changed files with 42 additions and 16 deletions

View File

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

View File

@ -31,8 +31,8 @@ function arrays.append(self, ...) end
--- Adds all the given elements to the end of this array --- Adds all the given elements to the end of this array
--- @generic T --- @generic T
--- @param self T[] --- @param self array<T>
--- @param ... T[] --- @param ... T
--- @return self --- @return self
function arrays.push(self, ...) end function arrays.push(self, ...) end

View File

@ -0,0 +1,18 @@
--- @meta promise
local exports = {};
--- Adds a message on the event loop to be executed later
--- @param ... fun()
function exports.push(...) end
--- Adds the "main" function as a message and starts execution of the event loop (unless it's already running)
--- The "main" function is called with the given arguments
--- @param main fun(...)
function exports.run(main, ...) end
--- Will suspend the execution of the current message and will continue to the next
--- Tip: saving the current thread with "coro.running()" and then transferring back to it works
function exports.interrupt() end
return exports;

View File

@ -0,0 +1,3 @@
--- @meta global
return _G;

View File

@ -3,7 +3,7 @@
--- @alias promise<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> promiselib | { when: fun(ful: fun(p1: T1, p2: T2, p3: T3, p4: T4, p5: T5, p6: T6, p7: T7, p8: T8, p9: T9, p10: T10), rej: fun(err)) } --- @alias promise<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> promiselib | { when: fun(ful: fun(p1: T1, p2: T2, p3: T3, p4: T4, p5: T5, p6: T6, p7: T7, p8: T8, p9: T9, p10: T10), rej: fun(err)) }
--- @class promiselib --- @class promiselib
promise = {}; local promise = {};
promise.__index = promise; promise.__index = promise;
--- @generic T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 --- @generic T1, T2, T3, T4, T5, T6, T7, T8, T9, T10

View File

@ -1,6 +1,5 @@
--- @meta --- @meta
--- Splits the given string with the given delimiter --- Splits the given string with the given delimiter
--- @param self string --- @param self string
--- @param sep string The delimiter to split by. Defaults to an empty string --- @param sep string The delimiter to split by. Defaults to an empty string

View File

@ -3,6 +3,7 @@
box = table.pack; box = table.pack;
unbox = table.unpack; unbox = table.unpack;
exit = os.exit; exit = os.exit;
promise = require "promise";
--- @param box table --- @param box table
--- @param s? number --- @param s? number

View File

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

View File

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