diff --git a/examples/rel_include/bar.lua b/examples/rel_include/bar.lua new file mode 100644 index 0000000..4518298 --- /dev/null +++ b/examples/rel_include/bar.lua @@ -0,0 +1 @@ +print("bar") \ No newline at end of file diff --git a/examples/rel_include/foo.lua b/examples/rel_include/foo.lua new file mode 100644 index 0000000..c71ed6c --- /dev/null +++ b/examples/rel_include/foo.lua @@ -0,0 +1,3 @@ +--#pragma "relative_include" "y" +print("foo") +--#include "bar.lua" \ No newline at end of file diff --git a/examples/rel_include_test.lua b/examples/rel_include_test.lua new file mode 100644 index 0000000..7973b45 --- /dev/null +++ b/examples/rel_include_test.lua @@ -0,0 +1,2 @@ +print("relative include test!") +--#include "rel_include/foo.lua" \ No newline at end of file diff --git a/src/directives/include.lua b/src/directives/include.lua index 1e1a353..e514b7e 100644 --- a/src/directives/include.lua +++ b/src/directives/include.lua @@ -3,7 +3,17 @@ -- file, You can obtain one at https://mozilla.org/MPL/2.0/. function directives.include(env, file, asmod) - local sr, err = stat.stat(file) + 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) @@ -14,7 +24,7 @@ function directives.include(env, file, asmod) if env.pragmas.include_file_name == "y" then env.code = env.code .. "-- BEGIN " .. file .. "\n" end - local code = luacomp.process_file(file, file) .. "\n" + local code = luacomp.process_file(rfile, rfile) .. "\n" if env.pragmas.prefix_local_file_numbers == "y" then local newcode = "" local i = 1 diff --git a/src/directives/pragma.lua b/src/directives/pragma.lua index af3a36c..b225bee 100644 --- a/src/directives/pragma.lua +++ b/src/directives/pragma.lua @@ -11,6 +11,7 @@ local pragma_hooks = { } function directives.pragma(env, key, value) + --luacomp.warning(key.."\t"..value) if not env.pragmas[key] then return nil, "unknown pragma "..key end diff --git a/src/generator2.lua b/src/generator2.lua index 5f29738..c670c9f 100644 --- a/src/generator2.lua +++ b/src/generator2.lua @@ -65,7 +65,8 @@ do pragmas = { include_file_name = "n", prefix_local_file_numbers = "n", - wrap_includes = "n" + wrap_includes = "n", + relative_include = "n" } } local fenv = {} diff --git a/src/luacomp_vars.lua b/src/luacomp_vars.lua index 675e50b..a367d43 100644 --- a/src/luacomp_vars.lua +++ b/src/luacomp_vars.lua @@ -12,4 +12,8 @@ _sv("LUACOMP_V_MAJ", 2) _sv("LUACOMP_V_MIN", 0) _sv("LUACOMP_V_PAT", 4) _sv("LUACOMP_VERSION", LUACOMP_V_MAJ.."."..LUACOMP_V_MIN.."."..LUACOMP_V_PAT) -_sv("LUACOMP_NAME", "LuaComp") \ No newline at end of file +_sv("LUACOMP_NAME", "LuaComp") + +luacomp.experimental = { + relative_include = false +} \ No newline at end of file