LuaComp/src/directives/include.lua

43 lines
1.5 KiB
Lua

-- This Source Code Form is subject to the terms of the Mozilla Public
-- License, v. 2.0. If a copy of the MPL was not distributed with this
-- file, You can obtain one at https://mozilla.org/MPL/2.0/.
function directives.include(env, file, asmod)
local rfile = file
--luacomp.warning("relative_include\t"..env.pragmas.relative_include)
if env.pragmas.relative_include == "y" or luacomp.experimental.relative_include then
--luacomp.warning("Experimental relative include enabled!")
if not env.fname:find("/") then
rfile = file
else
rfile = env.fname:gsub("/[^/]+$", "/")..file
end
end
local sr, err = stat.stat(rfile)
if not sr then return false, err end
--[[local f = io.open(file, "r")
local fast = mkast(f, file)
fast.file = file
local code = generate(fast)
env.code = env.code .. code .. "\n"]]
if asmod then env.code = env.code .. "local "..asmod.." = (function()\n" end
if env.pragmas.include_file_name == "y" then
env.code = env.code .. "-- BEGIN " .. file .. "\n"
end
local code = luacomp.process_file(rfile, rfile) .. "\n"
if env.pragmas.prefix_local_file_numbers == "y" then
local newcode = ""
local i = 1
for match in code:gmatch("[^\n]*") do
newcode = newcode .. "--[["..i.."]] "..match.."\n"
i = i + 1
end
code = newcode
end
env.code = env.code .. code
if env.pragmas.include_file_name == "y" then
env.code = env.code .. "-- END " .. file .. "\n"
end
if asmod then env.code = env.code .. "end)()\n" end
return true
end