diff options
author | daurnimator <quae@daurnimator.com> | 2017-12-28 17:38:12 +1100 |
---|---|---|
committer | daurnimator <quae@daurnimator.com> | 2017-12-28 17:44:24 +1100 |
commit | 2fb328badf87294a412c0430772461644a080b8c (patch) | |
tree | 2d955dbc16a802f9daa986cbc98f8f3c53c9f98a /src/loadlib.js | |
parent | e0e5d05626fcd6cb4622abcaae9fc951d9ae91b1 (diff) | |
download | fengari-2fb328badf87294a412c0430772461644a080b8c.tar.gz fengari-2fb328badf87294a412c0430772461644a080b8c.tar.bz2 fengari-2fb328badf87294a412c0430772461644a080b8c.zip |
src/loadlib.js: Use non-strict mode to find global env in unknown environments
Diffstat (limited to 'src/loadlib.js')
-rw-r--r-- | src/loadlib.js | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/src/loadlib.js b/src/loadlib.js index 9748732..eb382c1 100644 --- a/src/loadlib.js +++ b/src/loadlib.js @@ -4,6 +4,19 @@ const fengari = require('./fengari.js'); const lua = require('./lua.js'); const lauxlib = require('./lauxlib.js'); +const global_env = (function() { + if (typeof process !== "undefined") { + /* node */ + return global; + } else if (typeof window !== "undefined") { + /* browser window */ + return window; + } else { + /* unknown global env */ + return eval('this'); /* use non-strict mode to get global env */ + } +})(); + const CLIBS = lua.to_luastring("__CLIBS__", true); const LUA_PATH_VAR = "LUA_PATH"; const LUA_CPATH_VAR = "LUA_CPATH"; @@ -63,7 +76,7 @@ if (typeof process === "undefined") { if (typeof res === "function" || (typeof res === "object" && res !== null)) { return res; } else if (res === void 0) { /* assume library added symbols to global environment */ - return window; + return global_env; } else { lua.lua_pushstring(L, lua.to_luastring(`library returned unexpected type (${typeof res})`)); return null; @@ -186,12 +199,14 @@ const ll_loadlib = function(L) { } }; -let env; -if (typeof process === "undefined") { - env = window; -} else { - env = process.env; -} +const env = (function() { + if (typeof process !== "undefined") { + /* node */ + return process.env; + } else { + return global_env; + } +})(); /* ** Set a path |