bootstrap.lua
Branches > main > latest > files / org / faddle / lang / bootstrap.lua
local loaders = package.loaders or package.searchers
local read = require("org.faddle.lang.read").read
local eval = require("org.faddle.lang.eval").eval
local modules = require("org.faddle.lang.eval").modules
local create_env = require("org.faddle.lang.eval").create_env
local faddle_path = ";?.fdl;?/init.fdl"
local function faddle_loader(mod)
local rel = mod:gsub("%.", "/")
for template in faddle_path:gmatch("[^;]+") do
local path = template:gsub("%?", rel)
local f = io.open(path, "rb")
if f then
local source = f:read("*a")
f:close()
return function()
local env = create_env(mod)
local forms = read(source)
for i = 1, #forms do
local form = forms[i]
eval(form, env)
end
-- Return the module table
return modules[env.current_module]
end
end
end
end
local function bootstrap()
table.insert(loaders, 2, faddle_loader)
return require("org.faddle")
end
return {bootstrap = bootstrap}