LuaComp/src/directives/include.lua

43 lines
1.5 KiB
Lua
Raw Normal View History

2021-06-26 02:06:38 +10:00
-- 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/.
2021-06-29 02:00:15 +10:00
function directives.include(env, file, asmod)
2022-02-15 13:48:54 +11:00
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)
2021-06-26 00:46:38 +10:00
if not sr then return false, err end
2021-06-25 19:31:33 +10:00
--[[local f = io.open(file, "r")
2019-11-06 06:47:42 +11:00
local fast = mkast(f, file)
2020-03-19 05:08:15 +11:00
fast.file = file
2019-11-06 06:47:42 +11:00
local code = generate(fast)
2021-06-25 19:31:33 +10:00
env.code = env.code .. code .. "\n"]]
2021-06-29 02:00:15 +10:00
if asmod then env.code = env.code .. "local "..asmod.." = (function()\n" end
if env.pragmas.include_file_name == "y" then
2022-02-09 05:28:37 +11:00
env.code = env.code .. "-- BEGIN " .. file .. "\n"
2021-06-29 02:00:15 +10:00
end
2022-02-15 13:48:54 +11:00
local code = luacomp.process_file(rfile, rfile) .. "\n"
2021-06-29 02:00:15 +10:00
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
2022-02-09 05:28:37 +11:00
if env.pragmas.include_file_name == "y" then
env.code = env.code .. "-- END " .. file .. "\n"
end
2021-06-29 02:00:15 +10:00
if asmod then env.code = env.code .. "end)()\n" end
2019-11-06 06:47:42 +11:00
return true
end