tal/build/require_filter.lua

30 lines
706 B
Lua
Raw Permalink Normal View History

2025-02-06 00:30:52 +00:00
local lexer = require "lexer";
---@param tokens fun(): token?, string?
---@param mapper fun(name: string, base: tok_base): token?
---@return fun(): token?, string?
return function (tokens, mapper)
local last_req = false;
return function ()
local tok, err = tokens();
if tok == nil then
return tok, err;
elseif last_req then
if tok.type == lexer.TOK_STR then
last_req = false;
--- @diagnostic disable-next-line: param-type-mismatch
return mapper(tok.val, tok);
elseif tok.type ~= lexer.TOK_KW or tok.val ~= lexer.K_PAREN_OPEN then
last_req = false;
end
elseif tok.type == lexer.TOK_ID and tok.val == "require" then
last_req = true;
end
return tok;
end
end