From 365c04333c0ac022e649ce82cac1cfe3a5840d93 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Mon, 7 Jul 2014 08:39:10 -0700 Subject: [PATCH] Install the unicode-compatible Lua module loader before loading moonscript Closes #1760. --- automation/include/moonscript.lua | 60 +------------------------------ libaegisub/lua/script_reader.cpp | 15 ++++---- 2 files changed, 8 insertions(+), 67 deletions(-) diff --git a/automation/include/moonscript.lua b/automation/include/moonscript.lua index 9b3192101..88257f5ca 100644 --- a/automation/include/moonscript.lua +++ b/automation/include/moonscript.lua @@ -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 { } diff --git a/libaegisub/lua/script_reader.cpp b/libaegisub/lua/script_reader.cpp index df82b23d1..430f5042d 100644 --- a/libaegisub/lua/script_reader.cpp +++ b/libaegisub/lua/script_reader.cpp @@ -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); 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; }