From 78a0d95e74eb3c4c2a4f383fe7aebe6ec8b1652a Mon Sep 17 00:00:00 2001 From: daurnimator Date: Mon, 22 Jan 2018 16:44:00 +1100 Subject: Workaround linit/lualib cyclic reference --- src/linit.js | 50 +++++++++++++++++++++++++------------------------- src/lualib.js | 11 +++++------ 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/src/linit.js b/src/linit.js index f717767..a265045 100644 --- a/src/linit.js +++ b/src/linit.js @@ -2,39 +2,39 @@ const { lua_pop } = require('./lua.js'); const { luaL_requiref } = require('./lauxlib.js'); -const lualib = require('./lualib.js'); const { to_luastring } = require("./fengaricore.js"); -const lbaselib = require('./lbaselib.js'); -const lcorolib = require('./lcorolib.js'); -const lmathlib = require('./lmathlib.js'); -const lstrlib = require('./lstrlib.js'); -const ltablib = require('./ltablib.js'); -const lutf8lib = require('./lutf8lib.js'); -const ldblib = require('./ldblib.js'); -const loslib = require('./loslib.js'); -const loadlib = require('./loadlib.js'); +const loadedlibs = {}; +/* export before requiring lualib.js */ const luaL_openlibs = function(L) { - const loadedlibs = { - [lualib.LUA_LOADLIBNAME]: loadlib.luaopen_package, - [lualib.LUA_COLIBNAME]: lcorolib.luaopen_coroutine, - [lualib.LUA_DBLIBNAME]: ldblib.luaopen_debug, - [lualib.LUA_MATHLIBNAME]: lmathlib.luaopen_math, - [lualib.LUA_OSLIBNAME]: loslib.luaopen_os, - [lualib.LUA_STRLIBNAME]: lstrlib.luaopen_string, - [lualib.LUA_TABLIBNAME]: ltablib.luaopen_table, - [lualib.LUA_UTF8LIBNAME]: lutf8lib.luaopen_utf8, - "_G": lbaselib.luaopen_base - }; - - if (typeof process !== "undefined") loadedlibs[lualib.LUA_IOLIBNAME] = require('./liolib.js').luaopen_io; - /* "require" functions from 'loadedlibs' and set results to global table */ for (let lib in loadedlibs) { luaL_requiref(L, to_luastring(lib), loadedlibs[lib], 1); lua_pop(L, 1); /* remove lib */ } }; - module.exports.luaL_openlibs = luaL_openlibs; + +const lualib = require('./lualib.js'); +const { luaopen_base } = require('./lbaselib.js'); +const { luaopen_coroutine } = require('./lcorolib.js'); +const { luaopen_debug } = require('./ldblib.js'); +const { luaopen_math } = require('./lmathlib.js'); +const { luaopen_package } = require('./loadlib.js'); +const { luaopen_os } = require('./loslib.js'); +const { luaopen_string } = require('./lstrlib.js'); +const { luaopen_table } = require('./ltablib.js'); +const { luaopen_utf8 } = require('./lutf8lib.js'); + +loadedlibs["_G"] = luaopen_base, +loadedlibs[lualib.LUA_LOADLIBNAME] = luaopen_package; +loadedlibs[lualib.LUA_COLIBNAME] = luaopen_coroutine; +loadedlibs[lualib.LUA_TABLIBNAME] = luaopen_table; +loadedlibs[lualib.LUA_OSLIBNAME] = luaopen_os; +loadedlibs[lualib.LUA_STRLIBNAME] = luaopen_string; +loadedlibs[lualib.LUA_MATHLIBNAME] = luaopen_math; +loadedlibs[lualib.LUA_UTF8LIBNAME] = luaopen_utf8; +loadedlibs[lualib.LUA_DBLIBNAME] = luaopen_debug; +if (typeof process !== "undefined") + loadedlibs[lualib.LUA_IOLIBNAME] = require('./liolib.js').luaopen_io; diff --git a/src/lualib.js b/src/lualib.js index 4e98432..78f441f 100644 --- a/src/lualib.js +++ b/src/lualib.js @@ -1,14 +1,15 @@ "use strict"; const { - LUA_VERSION_MAJOR, - LUA_VERSION_MINOR + LUA_VERSION_MAJOR, + LUA_VERSION_MINOR } = require("./lua.js"); -const linit = require('./linit.js'); const LUA_VERSUFFIX = "_" + LUA_VERSION_MAJOR + "_" + LUA_VERSION_MINOR; module.exports.LUA_VERSUFFIX = LUA_VERSUFFIX; +module.exports.lua_assert = function(c) {}; + const LUA_COLIBNAME = "coroutine"; module.exports.LUA_COLIBNAME = LUA_COLIBNAME; module.exports.luaopen_coroutine = require("./lcorolib.js").luaopen_coroutine; @@ -51,7 +52,5 @@ const LUA_LOADLIBNAME = "package"; module.exports.LUA_LOADLIBNAME = LUA_LOADLIBNAME; module.exports.luaopen_package = require("./loadlib.js").luaopen_package; +const linit = require('./linit.js'); module.exports.luaL_openlibs = linit.luaL_openlibs; - -/* customary export */ -module.exports.lua_assert = function(c) {}; -- cgit v1.2.3-70-g09d2