From 78a0d95e74eb3c4c2a4f383fe7aebe6ec8b1652a Mon Sep 17 00:00:00 2001
From: daurnimator <quae@daurnimator.com>
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(-)

(limited to 'src')

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