Created
February 22, 2015 20:26
-
-
Save pfirsich/549fc8cb38949feef665 to your computer and use it in GitHub Desktop.
Package loader for tweakables without "name"-argument, discarded for SudoHack
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
do | |
local compiler = function(filename, codeString) | |
local counter = 0 | |
filename = filename:gsub("\\", "/") | |
codeString = codeString:gsub("func%(", | |
function() | |
counter = counter + 1 | |
return 'func("' .. filename .. "_" .. tostring(counter) .. '"' | |
end) | |
print(codeString) | |
return codeString | |
end | |
local loader = function(modulename) | |
local modulepath = modulename:gsub("%.", "/") | |
errmsg = "" | |
for path in string.gmatch(package.mondpath, "(.-);") do | |
local filename = string.gsub(path, "%?", modulepath) | |
local file = io.open(filename, "rb") | |
if file then -- if this is used for .lua-files (not .mond) the function should throw an error if file is nil | |
return assert(loadstring(compiler(filename, assert(file:read("*a"))), filename)) | |
end | |
errmsg = errmsg .. "\n\t Couldn't find module named " .. modulename | |
end | |
return errmsg == "" and nil or errmsg | |
end | |
-- substitute package.path once and reuse for every require | |
if not package.mondpath then | |
package.mondpath = package.path | |
--package.mondpath = "" | |
--for path in string.gmatch(package.path, "(.-)%.lua;") do | |
-- package.mondpath = package.mondpath .. path .. ".mond;" | |
--end | |
end | |
-- only add loader if not already added | |
for i = 1, #package.loaders do | |
if package.loaders[i] == loader then | |
return false | |
end | |
end | |
-- add just before the default loader | |
table.insert(package.loaders, 2, loader) | |
return true | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment