diff options
Diffstat (limited to 'src/lbaselib.js')
| -rw-r--r-- | src/lbaselib.js | 187 | 
1 files changed, 93 insertions, 94 deletions
diff --git a/src/lbaselib.js b/src/lbaselib.js index aa02908..a1a8925 100644 --- a/src/lbaselib.js +++ b/src/lbaselib.js @@ -3,25 +3,24 @@  const assert  = require('assert');  const lua     = require('./lua.js'); -const lapi    = require('./lapi.js');  const lauxlib = require('./lauxlib.js');  const lobject = require('./lobject.js');  const luaB_print = function(L) { -    let n = lapi.lua_gettop(L); /* number of arguments */ +    let n = lua.lua_gettop(L); /* number of arguments */      let str = []; -    lapi.lua_getglobal(L, lua.to_luastring("tostring", true)); +    lua.lua_getglobal(L, lua.to_luastring("tostring", true));      for (let i = 1; i <= n; i++) { -        lapi.lua_pushvalue(L, -1);  /* function to be called */ -        lapi.lua_pushvalue(L, i);  /* value to print */ -        lapi.lua_call(L, 1, 1); -        let s = lapi.lua_tolstring(L, -1); +        lua.lua_pushvalue(L, -1);  /* function to be called */ +        lua.lua_pushvalue(L, i);  /* value to print */ +        lua.lua_call(L, 1, 1); +        let s = lua.lua_tolstring(L, -1);          if (s === null)              return lauxlib.luaL_error(L, lua.to_luastring("'tostring' must return a string to 'print'", true));          if (i > 1) s = ["\t".charCodeAt(0)].concat(s);          str = str.concat(s); -        lapi.lua_pop(L, 1); +        lua.lua_pop(L, 1);      }      // Don't use console.log if Node @@ -39,8 +38,8 @@ const luaB_tostring = function(L) {  const luaB_getmetatable = function(L) {      lauxlib.luaL_checkany(L, 1); -    if (!lapi.lua_getmetatable(L, 1)) { -        lapi.lua_pushnil(L); +    if (!lua.lua_getmetatable(L, 1)) { +        lua.lua_pushnil(L);          return 1;  /* no metatable */      }      lauxlib.luaL_getmetafield(L, 1, lua.to_luastring("__metatable", true)); @@ -48,35 +47,35 @@ const luaB_getmetatable = function(L) {  };  const luaB_setmetatable = function(L) { -    let t = lapi.lua_type(L, 2); +    let t = lua.lua_type(L, 2);      lauxlib.luaL_checktype(L, 1, lua.LUA_TTABLE);      lauxlib.luaL_argcheck(L, t === lua.LUA_TNIL || t === lua.LUA_TTABLE, 2, lua.to_luastring("nil or table expected", true));      if (lauxlib.luaL_getmetafield(L, 1, lua.to_luastring("__metatable", true)) !== lua.LUA_TNIL)          return lauxlib.luaL_error(L, lua.to_luastring("cannot change a protected metatable", true)); -    lapi.lua_settop(L, 2); -    lapi.lua_setmetatable(L, 1); +    lua.lua_settop(L, 2); +    lua.lua_setmetatable(L, 1);      return 1;  };  const luaB_rawequal = function(L) {      lauxlib.luaL_checkany(L, 1);      lauxlib.luaL_checkany(L, 2); -    lapi.lua_pushboolean(L, lapi.lua_rawequal(L, 1, 2)); +    lua.lua_pushboolean(L, lua.lua_rawequal(L, 1, 2));      return 1;  };  const luaB_rawlen = function(L) { -    let t = lapi.lua_type(L, 1); +    let t = lua.lua_type(L, 1);      lauxlib.luaL_argcheck(L, t === lua.LUA_TTABLE || t === lua.LUA_TSTRING, 1, lua.to_luastring("table or string expected", true)); -    lapi.lua_pushinteger(L, lapi.lua_rawlen(L, 1)); +    lua.lua_pushinteger(L, lua.lua_rawlen(L, 1));      return 1;  };  const luaB_rawget = function(L) {      lauxlib.luaL_checktype(L, 1, lua.LUA_TTABLE);      lauxlib.luaL_checkany(L, 2); -    lapi.lua_settop(L, 2); -    lapi.lua_rawget(L, 1); +    lua.lua_settop(L, 2); +    lua.lua_rawget(L, 1);      return 1;  }; @@ -84,39 +83,39 @@ const luaB_rawset = function(L) {      lauxlib.luaL_checktype(L, 1, lua.LUA_TTABLE);      lauxlib.luaL_checkany(L, 2);      lauxlib.luaL_checkany(L, 3); -    lapi.lua_settop(L, 3); -    lapi.lua_rawset(L, 1); +    lua.lua_settop(L, 3); +    lua.lua_rawset(L, 1);      return 1;  };  const luaB_type = function(L) { -    let t = lapi.lua_type(L, 1); +    let t = lua.lua_type(L, 1);      lauxlib.luaL_argcheck(L, t !== lua.LUA_TNONE, 1, lua.to_luastring("value expected", true)); -    lapi.lua_pushstring(L, lapi.lua_typename(L, t)); +    lua.lua_pushstring(L, lua.lua_typename(L, t));      return 1;  };  const pairsmeta = function(L, method, iszero, iter) {      lauxlib.luaL_checkany(L, 1);      if (lauxlib.luaL_getmetafield(L, 1, method) === lua.LUA_TNIL) {  /* no metamethod? */ -        lapi.lua_pushcfunction(L, iter);  /* will return generator, */ -        lapi.lua_pushvalue(L, 1);  /* state, */ -        if (iszero) lapi.lua_pushinteger(L, 0);  /* and initial value */ -        else lapi.lua_pushnil(L); +        lua.lua_pushcfunction(L, iter);  /* will return generator, */ +        lua.lua_pushvalue(L, 1);  /* state, */ +        if (iszero) lua.lua_pushinteger(L, 0);  /* and initial value */ +        else lua.lua_pushnil(L);      } else { -        lapi.lua_pushvalue(L, 1);  /* argument 'self' to metamethod */ -        lapi.lua_call(L, 1, 3);  /* get 3 values from metamethod */ +        lua.lua_pushvalue(L, 1);  /* argument 'self' to metamethod */ +        lua.lua_call(L, 1, 3);  /* get 3 values from metamethod */      }      return 3;  };  const luaB_next = function(L) {      lauxlib.luaL_checktype(L, 1, lua.LUA_TTABLE); -    lapi.lua_settop(L, 2);  /* create a 2nd argument if there isn't one */ -    if (lapi.lua_next(L, 1)) +    lua.lua_settop(L, 2);  /* create a 2nd argument if there isn't one */ +    if (lua.lua_next(L, 1))          return 2;      else { -        lapi.lua_pushnil(L); +        lua.lua_pushnil(L);          return 1;      }  }; @@ -130,8 +129,8 @@ const luaB_pairs = function(L) {  */  const ipairsaux = function(L) {      let i = lauxlib.luaL_checkinteger(L, 2) + 1; -    lapi.lua_pushinteger(L, i); -    return lapi.lua_geti(L, 1, i) === lua.LUA_TNIL ? 1 : 2; +    lua.lua_pushinteger(L, i); +    return lua.lua_geti(L, 1, i) === lua.LUA_TNIL ? 1 : 2;  };  /* @@ -143,66 +142,66 @@ const luaB_ipairs = function(L) {      // return pairsmeta(L, "__ipairs", 1, ipairsaux);      lauxlib.luaL_checkany(L, 1); -    lapi.lua_pushcfunction(L, ipairsaux);  /* iteration function */ -    lapi.lua_pushvalue(L, 1);  /* state */ -    lapi.lua_pushinteger(L, 0);  /* initial value */ +    lua.lua_pushcfunction(L, ipairsaux);  /* iteration function */ +    lua.lua_pushvalue(L, 1);  /* state */ +    lua.lua_pushinteger(L, 0);  /* initial value */      return 3;  };  const luaB_tonumber = function(L) { -    if (lapi.lua_type(L, 2) <= 0) {  /* standard conversion? */ +    if (lua.lua_type(L, 2) <= 0) {  /* standard conversion? */          lauxlib.luaL_checkany(L, 1); -        if (lapi.lua_type(L, 1) === lua.LUA_TNUMBER) {  /* already a number? */ -            lapi.lua_settop(L, 1); +        if (lua.lua_type(L, 1) === lua.LUA_TNUMBER) {  /* already a number? */ +            lua.lua_settop(L, 1);              return 1;          } else { -            let s = lapi.lua_tostring(L, 1); -            if (s !== null && lapi.lua_stringtonumber(L, s) === s.length) +            let s = lua.lua_tostring(L, 1); +            if (s !== null && lua.lua_stringtonumber(L, s) === s.length)                  return 1;  /* successful conversion to number */          }      } else {          let base = lauxlib.luaL_checkinteger(L, 2);          lauxlib.luaL_checktype(L, 1, lua.LUA_TSTRING);  /* no numbers as strings */ -        let s = lapi.lua_tostring(L, 1); +        let s = lua.lua_tostring(L, 1);          lauxlib.luaL_argcheck(L, 2 <= base && base <= 36, 2, lua.to_luastring("base out of range", true));          let n = parseInt(lobject.jsstring(s), base);          if (!isNaN(n)) { -            lapi.lua_pushinteger(L, n); +            lua.lua_pushinteger(L, n);              return 1;          }      } -    lapi.lua_pushnil(L); +    lua.lua_pushnil(L);      return 1;  };  const luaB_error = function(L) {      let level = lauxlib.luaL_optinteger(L, 2, 1); -    lapi.lua_settop(L, 1); -    if (lapi.lua_type(L, 1) === lua.LUA_TSTRING && level > 0) { +    lua.lua_settop(L, 1); +    if (lua.lua_type(L, 1) === lua.LUA_TSTRING && level > 0) {          lauxlib.luaL_where(L, level);  /* add extra information */ -        lapi.lua_pushvalue(L, 1); -        lapi.lua_concat(L, 2); +        lua.lua_pushvalue(L, 1); +        lua.lua_concat(L, 2);      } -    return lapi.lua_error(L); +    return lua.lua_error(L);  };  const luaB_assert = function(L) { -    if (lapi.lua_toboolean(L, 1))  /* condition is true? */ -        return lapi.lua_gettop(L);  /* return all arguments */ +    if (lua.lua_toboolean(L, 1))  /* condition is true? */ +        return lua.lua_gettop(L);  /* return all arguments */      else {          lauxlib.luaL_checkany(L, 1);  /* there must be a condition */ -        lapi.lua_remove(L, 1);  /* remove it */ -        lapi.lua_pushliteral(L, "assertion failed!");  /* default message */ -        lapi.lua_settop(L, 1);  /* leave only message (default if no other one) */ +        lua.lua_remove(L, 1);  /* remove it */ +        lua.lua_pushliteral(L, "assertion failed!");  /* default message */ +        lua.lua_settop(L, 1);  /* leave only message (default if no other one) */          return luaB_error(L);  /* call 'error' */      }  };  const luaB_select = function(L) { -    let n = lapi.lua_gettop(L); -    if (lapi.lua_type(L, 1) === lua.LUA_TSTRING && lapi.lua_tostring(L, 1)[0] === "#".charCodeAt(0)) { -        lapi.lua_pushinteger(L, n - 1); +    let n = lua.lua_gettop(L); +    if (lua.lua_type(L, 1) === lua.LUA_TSTRING && lua.lua_tostring(L, 1)[0] === "#".charCodeAt(0)) { +        lua.lua_pushinteger(L, n - 1);          return 1;      } else {          let i = lauxlib.luaL_checkinteger(L, 1); @@ -222,18 +221,18 @@ const luaB_select = function(L) {  */  const finishpcall = function(L, status, extra) {      if (status !== lua.LUA_OK && status !== lua.LUA_YIELD) {  /* error? */ -        lapi.lua_pushboolean(L, 0);  /* first result (false) */ -        lapi.lua_pushvalue(L, -2);  /* error message */ +        lua.lua_pushboolean(L, 0);  /* first result (false) */ +        lua.lua_pushvalue(L, -2);  /* error message */          return 2;  /* return false, msg */      } else -        return lapi.lua_gettop(L) - extra; +        return lua.lua_gettop(L) - extra;  };  const luaB_pcall = function(L) {      lauxlib.luaL_checkany(L, 1); -    lapi.lua_pushboolean(L, 1);  /* first result if no errors */ -    lapi.lua_insert(L, 1);  /* put it in place */ -    let status = lapi.lua_pcallk(L, lapi.lua_gettop(L) - 2, lua.LUA_MULTRET, 0, 0, finishpcall); +    lua.lua_pushboolean(L, 1);  /* first result if no errors */ +    lua.lua_insert(L, 1);  /* put it in place */ +    let status = lua.lua_pcallk(L, lua.lua_gettop(L) - 2, lua.LUA_MULTRET, 0, 0, finishpcall);      return finishpcall(L, status, 0);  }; @@ -243,12 +242,12 @@ const luaB_pcall = function(L) {  ** 2 to 'finishpcall' to skip the 2 first values when returning results.  */  const luaB_xpcall = function(L) { -    let n = lapi.lua_gettop(L); +    let n = lua.lua_gettop(L);      lauxlib.luaL_checktype(L, 2, lua.LUA_TFUNCTION);  /* check error function */ -    lapi.lua_pushboolean(L, 1);  /* first result */ -    lapi.lua_pushvalue(L, 1);  /* function */ -    lapi.lua_rotate(L, 3, 2);  /* move them below function's arguments */ -    let status = lapi.lua_pcallk(L, n - 2, lua.LUA_MULTRET, 2, 2, finishpcall); +    lua.lua_pushboolean(L, 1);  /* first result */ +    lua.lua_pushvalue(L, 1);  /* function */ +    lua.lua_rotate(L, 3, 2);  /* move them below function's arguments */ +    let status = lua.lua_pcallk(L, n - 2, lua.LUA_MULTRET, 2, 2, finishpcall);      return finishpcall(L, status, 2);  }; @@ -256,14 +255,14 @@ const luaB_xpcall = function(L) {  const load_aux = function(L, status, envidx) {      if (status === lua.LUA_OK) {          if (envidx !== 0) {  /* 'env' parameter? */ -            lapi.lua_pushvalue(L, envidx);  /* environment for loaded function */ -            if (!lapi.lua_setupvalue(L, -2, 1))  /* set it as 1st upvalue */ -                lapi.lua_pop(L, 1);  /* remove 'env' if not used by previous call */ +            lua.lua_pushvalue(L, envidx);  /* environment for loaded function */ +            if (!lua.lua_setupvalue(L, -2, 1))  /* set it as 1st upvalue */ +                lua.lua_pop(L, 1);  /* remove 'env' if not used by previous call */          }          return 1;      } else {  /* error (message is on top of the stack) */ -        lapi.lua_pushnil(L); -        lapi.lua_insert(L, -2);  /* put before error message */ +        lua.lua_pushnil(L); +        lua.lua_insert(L, -2);  /* put before error message */          return 2;  /* return nil plus error message */      }  }; @@ -283,21 +282,21 @@ const RESERVEDSLOT = 5;  */  const generic_reader = function(L, ud) {      lauxlib.luaL_checkstack(L, 2, lua.to_luastring("too many nested functions", true)); -    lapi.lua_pushvalue(L, 1);  /* get function */ -    lapi.lua_call(L, 0, 1);  /* call it */ -    if (lapi.lua_isnil(L, -1)) { -        lapi.lua_pop(L, 1);  /* pop result */ +    lua.lua_pushvalue(L, 1);  /* get function */ +    lua.lua_call(L, 0, 1);  /* call it */ +    if (lua.lua_isnil(L, -1)) { +        lua.lua_pop(L, 1);  /* pop result */          return null; -    } else if (!lapi.lua_isstring(L, -1)) +    } else if (!lua.lua_isstring(L, -1))          lauxlib.luaL_error(L, lua.to_luastring("reader function must return a string", true)); -    lapi.lua_replace(L, RESERVEDSLOT);  /* save string in reserved slot */ -    return lapi.lua_tostring(L, RESERVEDSLOT); +    lua.lua_replace(L, RESERVEDSLOT);  /* save string in reserved slot */ +    return lua.lua_tostring(L, RESERVEDSLOT);  };  const luaB_load = function(L) { -    let s = lapi.lua_tostring(L, 1); +    let s = lua.lua_tostring(L, 1);      let mode = lauxlib.luaL_optstring(L, 3, lua.to_luastring("bt", true)); -    let env = !lapi.lua_isnone(L, 4) ? 4 : 0;  /* 'env' index or 0 if no 'env' */ +    let env = !lua.lua_isnone(L, 4) ? 4 : 0;  /* 'env' index or 0 if no 'env' */      let status;      if (s !== null) {  /* loading a string? */          let chunkname = lauxlib.luaL_optstring(L, 2, s); @@ -305,8 +304,8 @@ const luaB_load = function(L) {      } else {  /* loading from a reader function */          let chunkname = lauxlib.luaL_optstring(L, 2, lua.to_luastring("=(load)", true));          lauxlib.luaL_checktype(L, 1, lua.LUA_TFUNCTION); -        lapi.lua_settop(L, RESERVEDSLOT);  /* create reserved slot */ -        status = lapi.lua_load(L, generic_reader, null, chunkname, mode); +        lua.lua_settop(L, RESERVEDSLOT);  /* create reserved slot */ +        status = lua.lua_load(L, generic_reader, null, chunkname, mode);      }      return load_aux(L, status, env);  }; @@ -346,21 +345,21 @@ if (typeof require === "function") {          const luaB_loadfile = function(L) {              let fname = lauxlib.luaL_optstring(L, 1, null);              let mode = lauxlib.luaL_optstring(L, 2, null); -            let env = !lapi.lua_isnone(L, 3) ? 3 : 0;  /* 'env' index or 0 if no 'env' */ +            let env = !lua.lua_isnone(L, 3) ? 3 : 0;  /* 'env' index or 0 if no 'env' */              let status = lauxlib.luaL_loadfilex(L, fname, mode);              return load_aux(L, status, env);          };          const dofilecont = function(L, d1, d2) { -            return lapi.lua_gettop(L) - 1; +            return lua.lua_gettop(L) - 1;          };          const luaB_dofile = function(L) {              let fname = lauxlib.luaL_optstring(L, 1, null); -            lapi.lua_settop(L, 1); +            lua.lua_settop(L, 1);              if (lauxlib.luaL_loadfile(L, fname) !== lua.LUA_OK) -                return lapi.lua_error(L); -            lapi.lua_callk(L, 0, lua.LUA_MULTRET, 0, dofilecont); +                return lua.lua_error(L); +            lua.lua_callk(L, 0, lua.LUA_MULTRET, 0, dofilecont);              return dofilecont(L, 0, 0);          }; @@ -372,14 +371,14 @@ if (typeof require === "function") {  const luaopen_base = function(L) {      /* open lib into global table */ -    lapi.lua_pushglobaltable(L); +    lua.lua_pushglobaltable(L);      lauxlib.luaL_setfuncs(L, base_funcs, 0);      /* set global _G */ -    lapi.lua_pushvalue(L, -1); -    lapi.lua_setfield(L, -2, lua.to_luastring("_G", true)); +    lua.lua_pushvalue(L, -1); +    lua.lua_setfield(L, -2, lua.to_luastring("_G", true));      /* set global _VERSION */ -    lapi.lua_pushliteral(L, lua.LUA_VERSION); -    lapi.lua_setfield(L, -2, lua.to_luastring("_VERSION", true)); +    lua.lua_pushliteral(L, lua.LUA_VERSION); +    lua.lua_setfield(L, -2, lua.to_luastring("_VERSION", true));      return 1;  };  | 
