Install the unicode-compatible Lua module loader before loading moonscript
Closes #1760.
This commit is contained in:
parent
6c0752035c
commit
365c04333c
2 changed files with 8 additions and 67 deletions
|
@ -46,29 +46,6 @@ package.preload['moonscript.base'] = function()
|
|||
end
|
||||
return code, ltable
|
||||
end
|
||||
moon_loader = function(name)
|
||||
local name_path = name:gsub("%.", dirsep)
|
||||
local file, file_path
|
||||
local _list_0 = split(package.moonpath, ";")
|
||||
for _index_0 = 1, #_list_0 do
|
||||
local path = _list_0[_index_0]
|
||||
file_path = path:gsub("?", name_path)
|
||||
file = io.open(file_path)
|
||||
if file then
|
||||
break
|
||||
end
|
||||
end
|
||||
if file then
|
||||
local text = file:read("*a")
|
||||
file:close()
|
||||
local res, err = loadstring(text, file_path)
|
||||
if not res then
|
||||
error(file_path .. ": " .. err)
|
||||
end
|
||||
return res
|
||||
end
|
||||
return nil, "Could not find moon file"
|
||||
end
|
||||
loadstring = function(...)
|
||||
local options, str, chunk_name, mode, env = get_options(...)
|
||||
chunk_name = chunk_name or "=(moonscript.loadstring)"
|
||||
|
@ -97,40 +74,10 @@ package.preload['moonscript.base'] = function()
|
|||
local f = assert(loadfile(...))
|
||||
return f()
|
||||
end
|
||||
insert_loader = function(pos)
|
||||
if pos == nil then
|
||||
pos = 2
|
||||
end
|
||||
if not package.moonpath then
|
||||
package.moonpath = create_moonpath(package.path)
|
||||
end
|
||||
local loaders = package.loaders or package.searchers
|
||||
for _index_0 = 1, #loaders do
|
||||
local loader = loaders[_index_0]
|
||||
if loader == moon_loader then
|
||||
return false
|
||||
end
|
||||
end
|
||||
insert(loaders, pos, moon_loader)
|
||||
return true
|
||||
end
|
||||
remove_loader = function()
|
||||
local loaders = package.loaders or package.searchers
|
||||
for i, loader in ipairs(loaders) do
|
||||
if loader == moon_loader then
|
||||
remove(loaders, i)
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
return {
|
||||
_NAME = "moonscript",
|
||||
insert_loader = insert_loader,
|
||||
remove_loader = remove_loader,
|
||||
to_lua = to_lua,
|
||||
moon_chunk = moon_chunk,
|
||||
moon_loader = moon_loader,
|
||||
dirsep = dirsep,
|
||||
dofile = dofile,
|
||||
loadfile = loadfile,
|
||||
|
@ -2056,12 +2003,7 @@ package.preload['moonscript.errors'] = function()
|
|||
|
||||
end
|
||||
package.preload['moonscript'] = function()
|
||||
do
|
||||
local _with_0 = require("moonscript.base")
|
||||
_with_0.insert_loader()
|
||||
return _with_0
|
||||
end
|
||||
|
||||
return require("moonscript.base")
|
||||
end
|
||||
package.preload['moonscript.line_tables'] = function()
|
||||
return { }
|
||||
|
|
|
@ -139,18 +139,17 @@ namespace agi { namespace lua {
|
|||
|
||||
lua_settable(L, -3);
|
||||
|
||||
luaL_loadstring(L, "return require('moonscript').loadstring");
|
||||
if (lua_pcall(L, 0, 1, 0)) {
|
||||
lua_remove(L, -2); // remove package.path table
|
||||
return false; // leave error message
|
||||
}
|
||||
lua_setfield(L, LUA_REGISTRYINDEX, "moonscript");
|
||||
|
||||
// Replace the default lua module loader with our unicode compatible one
|
||||
lua_getfield(L, -1, "loaders");
|
||||
push_value(L, exception_wrapper<module_loader>);
|
||||
lua_rawseti(L, -2, 2);
|
||||
lua_pop(L, 2);
|
||||
lua_pop(L, 2); // loaders, package
|
||||
|
||||
luaL_loadstring(L, "return require('moonscript').loadstring");
|
||||
if (lua_pcall(L, 0, 1, 0)) {
|
||||
return false; // leave error message
|
||||
}
|
||||
lua_setfield(L, LUA_REGISTRYINDEX, "moonscript");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue