30 lines
706 B
Lua
30 lines
706 B
Lua
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
|
|
|