summaryrefslogtreecommitdiff
path: root/libs/lua
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-11-29 04:22:26 +0100
committerRobin Gareus <robin@gareus.org>2017-11-29 12:06:42 +0100
commit44cf44883927c06fd0b8277c292716ea20be4eb9 (patch)
tree20cf5cb5e8ea56d1f1f4f4185de4b12583a1f68f /libs/lua
parent06ea56a2ce2fb8cf7e6803486292bf7b89d81de7 (diff)
update to lua-5.3.4
Diffstat (limited to 'libs/lua')
-rw-r--r--libs/lua/lua-5.3.4/README (renamed from libs/lua/lua-5.3.3/README)2
-rw-r--r--libs/lua/lua-5.3.4/lapi.c (renamed from libs/lua/lua-5.3.3/lapi.c)0
-rw-r--r--libs/lua/lua-5.3.4/lapi.h (renamed from libs/lua/lua-5.3.3/lapi.h)0
-rw-r--r--libs/lua/lua-5.3.4/lauxlib.c (renamed from libs/lua/lua-5.3.3/lauxlib.c)46
-rw-r--r--libs/lua/lua-5.3.4/lauxlib.h (renamed from libs/lua/lua-5.3.3/lauxlib.h)12
-rw-r--r--libs/lua/lua-5.3.4/lbaselib.c (renamed from libs/lua/lua-5.3.3/lbaselib.c)4
-rw-r--r--libs/lua/lua-5.3.4/lbitlib.c (renamed from libs/lua/lua-5.3.3/lbitlib.c)0
-rw-r--r--libs/lua/lua-5.3.4/lcode.c (renamed from libs/lua/lua-5.3.3/lcode.c)22
-rw-r--r--libs/lua/lua-5.3.4/lcode.h (renamed from libs/lua/lua-5.3.3/lcode.h)0
-rw-r--r--libs/lua/lua-5.3.4/lcorolib.c (renamed from libs/lua/lua-5.3.3/lcorolib.c)0
-rw-r--r--libs/lua/lua-5.3.4/lctype.c (renamed from libs/lua/lua-5.3.3/lctype.c)0
-rw-r--r--libs/lua/lua-5.3.4/lctype.h (renamed from libs/lua/lua-5.3.3/lctype.h)0
-rw-r--r--libs/lua/lua-5.3.4/ldblib.c (renamed from libs/lua/lua-5.3.3/ldblib.c)0
-rw-r--r--libs/lua/lua-5.3.4/ldebug.c (renamed from libs/lua/lua-5.3.3/ldebug.c)45
-rw-r--r--libs/lua/lua-5.3.4/ldebug.h (renamed from libs/lua/lua-5.3.3/ldebug.h)0
-rw-r--r--libs/lua/lua-5.3.4/ldo.c (renamed from libs/lua/lua-5.3.3/ldo.c)204
-rw-r--r--libs/lua/lua-5.3.4/ldo.h (renamed from libs/lua/lua-5.3.3/ldo.h)0
-rw-r--r--libs/lua/lua-5.3.4/ldump.c (renamed from libs/lua/lua-5.3.3/ldump.c)0
-rw-r--r--libs/lua/lua-5.3.4/lfunc.c (renamed from libs/lua/lua-5.3.3/lfunc.c)0
-rw-r--r--libs/lua/lua-5.3.4/lfunc.h (renamed from libs/lua/lua-5.3.3/lfunc.h)0
-rw-r--r--libs/lua/lua-5.3.4/lgc.c (renamed from libs/lua/lua-5.3.3/lgc.c)8
-rw-r--r--libs/lua/lua-5.3.4/lgc.h (renamed from libs/lua/lua-5.3.3/lgc.h)0
-rw-r--r--libs/lua/lua-5.3.4/linit.c (renamed from libs/lua/lua-5.3.3/linit.c)6
-rw-r--r--libs/lua/lua-5.3.4/liolib.c (renamed from libs/lua/lua-5.3.3/liolib.c)17
-rw-r--r--libs/lua/lua-5.3.4/llex.c (renamed from libs/lua/lua-5.3.3/llex.c)0
-rw-r--r--libs/lua/lua-5.3.4/llex.h (renamed from libs/lua/lua-5.3.3/llex.h)0
-rw-r--r--libs/lua/lua-5.3.4/llimits.h (renamed from libs/lua/lua-5.3.3/llimits.h)0
-rw-r--r--libs/lua/lua-5.3.4/lmathlib.c (renamed from libs/lua/lua-5.3.3/lmathlib.c)17
-rw-r--r--libs/lua/lua-5.3.4/lmem.c (renamed from libs/lua/lua-5.3.3/lmem.c)0
-rw-r--r--libs/lua/lua-5.3.4/lmem.h (renamed from libs/lua/lua-5.3.3/lmem.h)0
-rw-r--r--libs/lua/lua-5.3.4/loadlib.c (renamed from libs/lua/lua-5.3.3/loadlib.c)169
-rw-r--r--libs/lua/lua-5.3.4/lobject.c (renamed from libs/lua/lua-5.3.3/lobject.c)4
-rw-r--r--libs/lua/lua-5.3.4/lobject.h (renamed from libs/lua/lua-5.3.3/lobject.h)4
-rw-r--r--libs/lua/lua-5.3.4/lopcodes.c (renamed from libs/lua/lua-5.3.3/lopcodes.c)0
-rw-r--r--libs/lua/lua-5.3.4/lopcodes.h (renamed from libs/lua/lua-5.3.3/lopcodes.h)4
-rw-r--r--libs/lua/lua-5.3.4/loslib.c (renamed from libs/lua/lua-5.3.3/loslib.c)28
-rw-r--r--libs/lua/lua-5.3.4/lparser.c (renamed from libs/lua/lua-5.3.3/lparser.c)14
-rw-r--r--libs/lua/lua-5.3.4/lparser.h (renamed from libs/lua/lua-5.3.3/lparser.h)0
-rw-r--r--libs/lua/lua-5.3.4/lprefix.h (renamed from libs/lua/lua-5.3.3/lprefix.h)0
-rw-r--r--libs/lua/lua-5.3.4/lstate.c (renamed from libs/lua/lua-5.3.3/lstate.c)0
-rw-r--r--libs/lua/lua-5.3.4/lstate.h (renamed from libs/lua/lua-5.3.3/lstate.h)11
-rw-r--r--libs/lua/lua-5.3.4/lstring.c (renamed from libs/lua/lua-5.3.3/lstring.c)0
-rw-r--r--libs/lua/lua-5.3.4/lstring.h (renamed from libs/lua/lua-5.3.3/lstring.h)0
-rw-r--r--libs/lua/lua-5.3.4/lstrlib.c (renamed from libs/lua/lua-5.3.3/lstrlib.c)20
-rw-r--r--libs/lua/lua-5.3.4/ltable.c (renamed from libs/lua/lua-5.3.3/ltable.c)46
-rw-r--r--libs/lua/lua-5.3.4/ltable.h (renamed from libs/lua/lua-5.3.3/ltable.h)14
-rw-r--r--libs/lua/lua-5.3.4/ltablib.c (renamed from libs/lua/lua-5.3.3/ltablib.c)0
-rw-r--r--libs/lua/lua-5.3.4/ltm.c (renamed from libs/lua/lua-5.3.3/ltm.c)4
-rw-r--r--libs/lua/lua-5.3.4/ltm.h (renamed from libs/lua/lua-5.3.3/ltm.h)0
-rw-r--r--libs/lua/lua-5.3.4/lua.c (renamed from libs/lua/lua-5.3.3/lua.c)13
-rw-r--r--libs/lua/lua-5.3.4/lua.h (renamed from libs/lua/lua-5.3.3/lua.h)8
-rw-r--r--libs/lua/lua-5.3.4/lua.hpp (renamed from libs/lua/lua-5.3.3/lua.hpp)0
-rw-r--r--libs/lua/lua-5.3.4/luac.c (renamed from libs/lua/lua-5.3.3/luac.c)0
-rw-r--r--libs/lua/lua-5.3.4/luaconf.h (renamed from libs/lua/lua-5.3.3/luaconf.h)34
-rw-r--r--libs/lua/lua-5.3.4/lualib.h (renamed from libs/lua/lua-5.3.3/lualib.h)5
-rw-r--r--libs/lua/lua-5.3.4/lundump.c (renamed from libs/lua/lua-5.3.3/lundump.c)0
-rw-r--r--libs/lua/lua-5.3.4/lundump.h (renamed from libs/lua/lua-5.3.3/lundump.h)0
-rw-r--r--libs/lua/lua-5.3.4/lutf8lib.c (renamed from libs/lua/lua-5.3.3/lutf8lib.c)4
-rw-r--r--libs/lua/lua-5.3.4/lvm.c (renamed from libs/lua/lua-5.3.3/lvm.c)0
-rw-r--r--libs/lua/lua-5.3.4/lvm.h (renamed from libs/lua/lua-5.3.3/lvm.h)4
-rw-r--r--libs/lua/lua-5.3.4/lzio.c (renamed from libs/lua/lua-5.3.3/lzio.c)0
-rw-r--r--libs/lua/lua-5.3.4/lzio.h (renamed from libs/lua/lua-5.3.3/lzio.h)0
-rw-r--r--libs/lua/lua.cc76
-rw-r--r--libs/lua/lua/lua.h2
-rw-r--r--libs/lua/wscript2
65 files changed, 469 insertions, 380 deletions
diff --git a/libs/lua/lua-5.3.3/README b/libs/lua/lua-5.3.4/README
index dd74fdf4b5..75a9287011 100644
--- a/libs/lua/lua-5.3.3/README
+++ b/libs/lua/lua-5.3.4/README
@@ -1,4 +1,4 @@
-This is Lua 5.3.3, released on 30 May 2016.
+This is Lua 5.3.4, released on 12 Jan 2017.
The Lua source is imported in the repository in order to ensure that it
is compiled with the same C++ compiler as Ardour (setjmp/longjmp, exceptions)
diff --git a/libs/lua/lua-5.3.3/lapi.c b/libs/lua/lua-5.3.4/lapi.c
index c9455a5d8c..c9455a5d8c 100644
--- a/libs/lua/lua-5.3.3/lapi.c
+++ b/libs/lua/lua-5.3.4/lapi.c
diff --git a/libs/lua/lua-5.3.3/lapi.h b/libs/lua/lua-5.3.4/lapi.h
index 6d36dee3fb..6d36dee3fb 100644
--- a/libs/lua/lua-5.3.3/lapi.h
+++ b/libs/lua/lua-5.3.4/lapi.h
diff --git a/libs/lua/lua-5.3.3/lauxlib.c b/libs/lua/lua-5.3.4/lauxlib.c
index bacf43b3e2..f7a383663e 100644
--- a/libs/lua/lua-5.3.3/lauxlib.c
+++ b/libs/lua/lua-5.3.4/lauxlib.c
@@ -1,5 +1,5 @@
/*
-** $Id: lauxlib.c,v 1.286 2016/01/08 15:33:09 roberto Exp $
+** $Id: lauxlib.c,v 1.289 2016/12/20 18:37:00 roberto Exp $
** Auxiliary functions for building Lua libraries
** See Copyright Notice in lua.h
*/
@@ -69,12 +69,11 @@ static int findfield (lua_State *L, int objidx, int level) {
/*
** Search for a name for a function in all loaded modules
-** (registry._LOADED).
*/
static int pushglobalfuncname (lua_State *L, lua_Debug *ar) {
int top = lua_gettop(L);
lua_getinfo(L, "f", ar); /* push function */
- lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED");
+ lua_getfield(L, LUA_REGISTRYINDEX, LUA_LOADED_TABLE);
if (findfield(L, top + 1, 2)) {
const char *name = lua_tostring(L, -1);
if (strncmp(name, "_G.", 3) == 0) { /* name start with '_G.'? */
@@ -809,13 +808,17 @@ LUALIB_API lua_Integer luaL_len (lua_State *L, int idx) {
LUALIB_API const char *luaL_tolstring (lua_State *L, int idx, size_t *len) {
- if (!luaL_callmeta(L, idx, "__tostring")) { /* no metafield? */
+ if (luaL_callmeta(L, idx, "__tostring")) { /* metafield? */
+ if (!lua_isstring(L, -1))
+ luaL_error(L, "'__tostring' must return a string");
+ }
+ else {
switch (lua_type(L, idx)) {
case LUA_TNUMBER: {
if (lua_isinteger(L, idx))
- lua_pushfstring(L, "%I", lua_tointeger(L, idx));
+ lua_pushfstring(L, "%I", (LUAI_UACINT)lua_tointeger(L, idx));
else
- lua_pushfstring(L, "%f", lua_tonumber(L, idx));
+ lua_pushfstring(L, "%f", (LUAI_UACNUMBER)lua_tonumber(L, idx));
break;
}
case LUA_TSTRING:
@@ -827,10 +830,15 @@ LUALIB_API const char *luaL_tolstring (lua_State *L, int idx, size_t *len) {
case LUA_TNIL:
lua_pushliteral(L, "nil");
break;
- default:
- lua_pushfstring(L, "%s: %p", luaL_typename(L, idx),
- lua_topointer(L, idx));
+ default: {
+ int tt = luaL_getmetafield(L, idx, "__name"); /* try name */
+ const char *kind = (tt == LUA_TSTRING) ? lua_tostring(L, -1) :
+ luaL_typename(L, idx);
+ lua_pushfstring(L, "%s: %p", kind, lua_topointer(L, idx));
+ if (tt != LUA_TNIL)
+ lua_remove(L, -2); /* remove '__name' */
break;
+ }
}
}
return lua_tolstring(L, -1, len);
@@ -882,23 +890,23 @@ static int libsize (const luaL_Reg *l) {
/*
** Find or create a module table with a given name. The function
-** first looks at the _LOADED table and, if that fails, try a
+** first looks at the LOADED table and, if that fails, try a
** global variable with that name. In any case, leaves on the stack
** the module table.
*/
LUALIB_API void luaL_pushmodule (lua_State *L, const char *modname,
int sizehint) {
- luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 1); /* get _LOADED table */
- if (lua_getfield(L, -1, modname) != LUA_TTABLE) { /* no _LOADED[modname]? */
+ luaL_findtable(L, LUA_REGISTRYINDEX, LUA_LOADED_TABLE, 1);
+ if (lua_getfield(L, -1, modname) != LUA_TTABLE) { /* no LOADED[modname]? */
lua_pop(L, 1); /* remove previous result */
/* try global variable (and create one if it does not exist) */
lua_pushglobaltable(L);
if (luaL_findtable(L, 0, modname, sizehint) != NULL)
luaL_error(L, "name conflict for module '%s'", modname);
lua_pushvalue(L, -1);
- lua_setfield(L, -3, modname); /* _LOADED[modname] = new table */
+ lua_setfield(L, -3, modname); /* LOADED[modname] = new table */
}
- lua_remove(L, -2); /* remove _LOADED table */
+ lua_remove(L, -2); /* remove LOADED table */
}
@@ -962,17 +970,17 @@ LUALIB_API int luaL_getsubtable (lua_State *L, int idx, const char *fname) {
*/
LUALIB_API void luaL_requiref (lua_State *L, const char *modname,
lua_CFunction openf, int glb) {
- luaL_getsubtable(L, LUA_REGISTRYINDEX, "_LOADED");
- lua_getfield(L, -1, modname); /* _LOADED[modname] */
+ luaL_getsubtable(L, LUA_REGISTRYINDEX, LUA_LOADED_TABLE);
+ lua_getfield(L, -1, modname); /* LOADED[modname] */
if (!lua_toboolean(L, -1)) { /* package not already loaded? */
lua_pop(L, 1); /* remove field */
lua_pushcfunction(L, openf);
lua_pushstring(L, modname); /* argument to open function */
lua_call(L, 1, 1); /* call 'openf' to open module */
lua_pushvalue(L, -1); /* make copy of module (call result) */
- lua_setfield(L, -3, modname); /* _LOADED[modname] = module */
+ lua_setfield(L, -3, modname); /* LOADED[modname] = module */
}
- lua_remove(L, -2); /* remove _LOADED table */
+ lua_remove(L, -2); /* remove LOADED table */
if (glb) {
lua_pushvalue(L, -1); /* copy of module */
lua_setglobal(L, modname); /* _G[modname] = module */
@@ -1030,6 +1038,6 @@ LUALIB_API void luaL_checkversion_ (lua_State *L, lua_Number ver, size_t sz) {
luaL_error(L, "multiple Lua VMs detected");
else if (*v != ver)
luaL_error(L, "version mismatch: app. needs %f, Lua core provides %f",
- ver, *v);
+ (LUAI_UACNUMBER)ver, (LUAI_UACNUMBER)*v);
}
diff --git a/libs/lua/lua-5.3.3/lauxlib.h b/libs/lua/lua-5.3.4/lauxlib.h
index ddb7c22838..9a2e66aa06 100644
--- a/libs/lua/lua-5.3.3/lauxlib.h
+++ b/libs/lua/lua-5.3.4/lauxlib.h
@@ -1,5 +1,5 @@
/*
-** $Id: lauxlib.h,v 1.129 2015/11/23 11:29:43 roberto Exp $
+** $Id: lauxlib.h,v 1.131 2016/12/06 14:54:31 roberto Exp $
** Auxiliary functions for building Lua libraries
** See Copyright Notice in lua.h
*/
@@ -16,10 +16,18 @@
-/* extra error code for 'luaL_load' */
+/* extra error code for 'luaL_loadfilex' */
#define LUA_ERRFILE (LUA_ERRERR+1)
+/* key, in the registry, for table of loaded modules */
+#define LUA_LOADED_TABLE "_LOADED"
+
+
+/* key, in the registry, for table of preloaded loaders */
+#define LUA_PRELOAD_TABLE "_PRELOAD"
+
+
typedef struct luaL_Reg {
const char *name;
lua_CFunction func;
diff --git a/libs/lua/lua-5.3.3/lbaselib.c b/libs/lua/lua-5.3.4/lbaselib.c
index d481c4e1ef..08523e6e75 100644
--- a/libs/lua/lua-5.3.3/lbaselib.c
+++ b/libs/lua/lua-5.3.4/lbaselib.c
@@ -1,5 +1,5 @@
/*
-** $Id: lbaselib.c,v 1.313 2016/04/11 19:18:40 roberto Exp $
+** $Id: lbaselib.c,v 1.314 2016/09/05 19:06:34 roberto Exp $
** Basic library
** See Copyright Notice in lua.h
*/
@@ -208,8 +208,8 @@ static int luaB_type (lua_State *L) {
static int pairsmeta (lua_State *L, const char *method, int iszero,
lua_CFunction iter) {
+ luaL_checkany(L, 1);
if (luaL_getmetafield(L, 1, method) == LUA_TNIL) { /* no metamethod? */
- luaL_checktype(L, 1, LUA_TTABLE); /* argument must be a table */
lua_pushcfunction(L, iter); /* will return generator, */
lua_pushvalue(L, 1); /* state, */
if (iszero) lua_pushinteger(L, 0); /* and initial value */
diff --git a/libs/lua/lua-5.3.3/lbitlib.c b/libs/lua/lua-5.3.4/lbitlib.c
index 1cb1d5b932..1cb1d5b932 100644
--- a/libs/lua/lua-5.3.3/lbitlib.c
+++ b/libs/lua/lua-5.3.4/lbitlib.c
diff --git a/libs/lua/lua-5.3.3/lcode.c b/libs/lua/lua-5.3.4/lcode.c
index 2cd0dd2d5c..0bb414262e 100644
--- a/libs/lua/lua-5.3.3/lcode.c
+++ b/libs/lua/lua-5.3.4/lcode.c
@@ -1,5 +1,5 @@
/*
-** $Id: lcode.c,v 2.109 2016/05/13 19:09:21 roberto Exp $
+** $Id: lcode.c,v 2.112 2016/12/22 13:08:50 roberto Exp $
** Code generator for Lua
** See Copyright Notice in lua.h
*/
@@ -40,7 +40,7 @@
** If expression is a numeric constant, fills 'v' with its value
** and returns 1. Otherwise, returns 0.
*/
-static int tonumeral(expdesc *e, TValue *v) {
+static int tonumeral(const expdesc *e, TValue *v) {
if (hasjumps(e))
return 0; /* not a numeral */
switch (e->k) {
@@ -86,7 +86,7 @@ void luaK_nil (FuncState *fs, int from, int n) {
/*
** Gets the destination address of a jump instruction. Used to traverse
** a list of jumps.
-*/
+*/
static int getjump (FuncState *fs, int pc) {
int offset = GETARG_sBx(fs->f->code[pc]);
if (offset == NO_JUMP) /* point to itself represents end of list */
@@ -754,7 +754,7 @@ void luaK_exp2val (FuncState *fs, expdesc *e) {
** (that is, it is either in a register or in 'k' with an index
** in the range of R/K indices).
** Returns R/K index.
-*/
+*/
int luaK_exp2RK (FuncState *fs, expdesc *e) {
luaK_exp2val(fs, e);
switch (e->k) { /* move constants to 'k' */
@@ -975,7 +975,8 @@ static int validop (int op, TValue *v1, TValue *v2) {
** Try to "constant-fold" an operation; return 1 iff successful.
** (In this case, 'e1' has the final result.)
*/
-static int constfolding (FuncState *fs, int op, expdesc *e1, expdesc *e2) {
+static int constfolding (FuncState *fs, int op, expdesc *e1,
+ const expdesc *e2) {
TValue v1, v2, res;
if (!tonumeral(e1, &v1) || !tonumeral(e2, &v2) || !validop(op, &v1, &v2))
return 0; /* non-numeric operands or not safe to fold */
@@ -1014,11 +1015,14 @@ static void codeunexpval (FuncState *fs, OpCode op, expdesc *e, int line) {
** (everything but logical operators 'and'/'or' and comparison
** operators).
** Expression to produce final result will be encoded in 'e1'.
+** Because 'luaK_exp2RK' can free registers, its calls must be
+** in "stack order" (that is, first on 'e2', which may have more
+** recent registers to be released).
*/
static void codebinexpval (FuncState *fs, OpCode op,
expdesc *e1, expdesc *e2, int line) {
- int rk1 = luaK_exp2RK(fs, e1); /* both operands are "RK" */
- int rk2 = luaK_exp2RK(fs, e2);
+ int rk2 = luaK_exp2RK(fs, e2); /* both operands are "RK" */
+ int rk1 = luaK_exp2RK(fs, e1);
freeexps(fs, e1, e2);
e1->u.info = luaK_codeABC(fs, op, 0, rk1, rk2); /* generate opcode */
e1->k = VRELOCABLE; /* all those operations are relocatable */
@@ -1060,9 +1064,9 @@ static void codecomp (FuncState *fs, BinOpr opr, expdesc *e1, expdesc *e2) {
** Aplly prefix operation 'op' to expression 'e'.
*/
void luaK_prefix (FuncState *fs, UnOpr op, expdesc *e, int line) {
- static expdesc ef = {VKINT, {0}, NO_JUMP, NO_JUMP}; /* fake 2nd operand */
+ static const expdesc ef = {VKINT, {0}, NO_JUMP, NO_JUMP};
switch (op) {
- case OPR_MINUS: case OPR_BNOT:
+ case OPR_MINUS: case OPR_BNOT: /* use 'ef' as fake 2nd operand */
if (constfolding(fs, op + LUA_OPUNM, e, &ef))
break;
/* FALLTHROUGH */
diff --git a/libs/lua/lua-5.3.3/lcode.h b/libs/lua/lua-5.3.4/lcode.h
index cd306d573a..cd306d573a 100644
--- a/libs/lua/lua-5.3.3/lcode.h
+++ b/libs/lua/lua-5.3.4/lcode.h
diff --git a/libs/lua/lua-5.3.3/lcorolib.c b/libs/lua/lua-5.3.4/lcorolib.c
index 2303429e7b..2303429e7b 100644
--- a/libs/lua/lua-5.3.3/lcorolib.c
+++ b/libs/lua/lua-5.3.4/lcorolib.c
diff --git a/libs/lua/lua-5.3.3/lctype.c b/libs/lua/lua-5.3.4/lctype.c
index ae9367e691..ae9367e691 100644
--- a/libs/lua/lua-5.3.3/lctype.c
+++ b/libs/lua/lua-5.3.4/lctype.c
diff --git a/libs/lua/lua-5.3.3/lctype.h b/libs/lua/lua-5.3.4/lctype.h
index 99c7d12237..99c7d12237 100644
--- a/libs/lua/lua-5.3.3/lctype.h
+++ b/libs/lua/lua-5.3.4/lctype.h
diff --git a/libs/lua/lua-5.3.3/ldblib.c b/libs/lua/lua-5.3.4/ldblib.c
index 786f6cd95d..786f6cd95d 100644
--- a/libs/lua/lua-5.3.3/ldblib.c
+++ b/libs/lua/lua-5.3.4/ldblib.c
diff --git a/libs/lua/lua-5.3.3/ldebug.c b/libs/lua/lua-5.3.4/ldebug.c
index e499ee362c..239affb76c 100644
--- a/libs/lua/lua-5.3.3/ldebug.c
+++ b/libs/lua/lua-5.3.4/ldebug.c
@@ -1,5 +1,5 @@
/*
-** $Id: ldebug.c,v 2.120 2016/03/31 19:01:21 roberto Exp $
+** $Id: ldebug.c,v 2.121 2016/10/19 12:32:10 roberto Exp $
** Debug Interface
** See Copyright Notice in lua.h
*/
@@ -38,7 +38,8 @@
#define ci_func(ci) (clLvalue((ci)->func))
-static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name);
+static const char *funcnamefromcode (lua_State *L, CallInfo *ci,
+ const char **name);
static int currentpc (CallInfo *ci) {
@@ -244,6 +245,20 @@ static void collectvalidlines (lua_State *L, Closure *f) {
}
+static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name) {
+ if (ci == NULL) /* no 'ci'? */
+ return NULL; /* no info */
+ else if (ci->callstatus & CIST_FIN) { /* is this a finalizer? */
+ *name = "__gc";
+ return "metamethod"; /* report it as such */
+ }
+ /* calling function is a known Lua function? */
+ else if (!(ci->callstatus & CIST_TAIL) && isLua(ci->previous))
+ return funcnamefromcode(L, ci->previous, name);
+ else return NULL; /* no way to find a name */
+}
+
+
static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar,
Closure *f, CallInfo *ci) {
int status = 1;
@@ -274,11 +289,7 @@ static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar,
break;
}
case 'n': {
- /* calling function is a known Lua function? */
- if (ci && !(ci->callstatus & CIST_TAIL) && isLua(ci->previous))
- ar->namewhat = getfuncname(L, ci->previous, &ar->name);
- else
- ar->namewhat = NULL;
+ ar->namewhat = getfuncname(L, ci, &ar->name);
if (ar->namewhat == NULL) {
ar->namewhat = ""; /* not found */
ar->name = NULL;
@@ -471,8 +482,15 @@ static const char *getobjname (Proto *p, int lastpc, int reg,
}
-static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name) {
- TMS tm = (TMS)0; /* to avoid warnings */
+/*
+** Try to find a name for a function based on the code that called it.
+** (Only works when function was called by a Lua function.)
+** Returns what the name is (e.g., "for iterator", "method",
+** "metamethod") and sets '*name' to point to the name.
+*/
+static const char *funcnamefromcode (lua_State *L, CallInfo *ci,
+ const char **name) {
+ TMS tm = (TMS)0; /* (initial value avoids warnings) */
Proto *p = ci_func(ci)->p; /* calling function */
int pc = currentpc(ci); /* calling instruction index */
Instruction i = p->code[pc]; /* calling instruction */
@@ -482,13 +500,13 @@ static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name) {
}
switch (GET_OPCODE(i)) {
case OP_CALL:
- case OP_TAILCALL: /* get function name */
- return getobjname(p, pc, GETARG_A(i), name);
+ case OP_TAILCALL:
+ return getobjname(p, pc, GETARG_A(i), name); /* get function name */
case OP_TFORCALL: { /* for iterator */
*name = "for iterator";
return "for iterator";
}
- /* all other instructions can call only through metamethods */
+ /* other instructions can do calls through metamethods */
case OP_SELF: case OP_GETTABUP: case OP_GETTABLE:
tm = TM_INDEX;
break;
@@ -509,7 +527,8 @@ static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name) {
case OP_EQ: tm = TM_EQ; break;
case OP_LT: tm = TM_LT; break;
case OP_LE: tm = TM_LE; break;
- default: lua_assert(0); /* other instructions cannot call a function */
+ default:
+ return NULL; /* cannot find a reasonable name */
}
*name = getstr(G(L)->tmname[tm]);
return "metamethod";
diff --git a/libs/lua/lua-5.3.3/ldebug.h b/libs/lua/lua-5.3.4/ldebug.h
index 0e31546b1b..0e31546b1b 100644
--- a/libs/lua/lua-5.3.3/ldebug.h
+++ b/libs/lua/lua-5.3.4/ldebug.h
diff --git a/libs/lua/lua-5.3.3/ldo.c b/libs/lua/lua-5.3.4/ldo.c
index 8804c99777..90b695fb04 100644
--- a/libs/lua/lua-5.3.3/ldo.c
+++ b/libs/lua/lua-5.3.4/ldo.c
@@ -1,5 +1,5 @@
/*
-** $Id: ldo.c,v 2.151 2015/12/16 16:40:07 roberto Exp $
+** $Id: ldo.c,v 2.157 2016/12/13 15:52:21 roberto Exp $
** Stack and Call structure of Lua
** See Copyright Notice in lua.h
*/
@@ -211,9 +211,9 @@ static int stackinuse (lua_State *L) {
CallInfo *ci;
StkId lim = L->top;
for (ci = L->ci; ci != NULL; ci = ci->previous) {
- lua_assert(ci->top <= L->stack_last);
if (lim < ci->top) lim = ci->top;
}
+ lua_assert(lim <= L->stack_last);
return cast_int(lim - L->stack) + 1; /* part of stack in use */
}
@@ -221,16 +221,19 @@ static int stackinuse (lua_State *L) {
void luaD_shrinkstack (lua_State *L) {
int inuse = stackinuse(L);
int goodsize = inuse + (inuse / 8) + 2*EXTRA_STACK;
- if (goodsize > LUAI_MAXSTACK) goodsize = LUAI_MAXSTACK;
- if (L->stacksize > LUAI_MAXSTACK) /* was handling stack overflow? */
+ if (goodsize > LUAI_MAXSTACK)
+ goodsize = LUAI_MAXSTACK; /* respect stack limit */
+ if (L->stacksize > LUAI_MAXSTACK) /* had been handling stack overflow? */
luaE_freeCI(L); /* free all CIs (list grew because of an error) */
else
luaE_shrinkCI(L); /* shrink list */
- if (inuse <= LUAI_MAXSTACK && /* not handling stack overflow? */
- goodsize < L->stacksize) /* trying to shrink? */
- luaD_reallocstack(L, goodsize); /* shrink it */
- else
- condmovestack(L,,); /* don't change stack (change only for debugging) */
+ /* if thread is currently not handling a stack overflow and its
+ good size is smaller than current size, shrink its stack */
+ if (inuse <= (LUAI_MAXSTACK - EXTRA_STACK) &&
+ goodsize < L->stacksize)
+ luaD_reallocstack(L, goodsize);
+ else /* don't change stack */
+ condmovestack(L,{},{}); /* (change only for debugging) */
}
@@ -322,6 +325,72 @@ static void tryfuncTM (lua_State *L, StkId func) {
}
+/*
+** Given 'nres' results at 'firstResult', move 'wanted' of them to 'res'.
+** Handle most typical cases (zero results for commands, one result for
+** expressions, multiple results for tail calls/single parameters)
+** separated.
+*/
+static int moveresults (lua_State *L, const TValue *firstResult, StkId res,
+ int nres, int wanted) {
+ switch (wanted) { /* handle typical cases separately */
+ case 0: break; /* nothing to move */
+ case 1: { /* one result needed */
+ if (nres == 0) /* no results? */
+ firstResult = luaO_nilobject; /* adjust with nil */
+ setobjs2s(L, res, firstResult); /* move it to proper place */
+ break;
+ }
+ case LUA_MULTRET: {
+ int i;
+ for (i = 0; i < nres; i++) /* move all results to correct place */
+ setobjs2s(L, res + i, firstResult + i);
+ L->top = res + nres;
+ return 0; /* wanted == LUA_MULTRET */
+ }
+ default: {
+ int i;
+ if (wanted <= nres) { /* enough results? */
+ for (i = 0; i < wanted; i++) /* move wanted results to correct place */
+ setobjs2s(L, res + i, firstResult + i);
+ }
+ else { /* not enough results; use all of them plus nils */
+ for (i = 0; i < nres; i++) /* move all results to correct place */
+ setobjs2s(L, res + i, firstResult + i);
+ for (; i < wanted; i++) /* complete wanted number of results */
+ setnilvalue(res + i);
+ }
+ break;
+ }
+ }
+ L->top = res + wanted; /* top points after the last result */
+ return 1;
+}
+
+
+/*
+** Finishes a function call: calls hook if necessary, removes CallInfo,
+** moves current number of results to proper place; returns 0 iff call
+** wanted multiple (variable number of) results.
+*/
+int luaD_poscall (lua_State *L, CallInfo *ci, StkId firstResult, int nres) {
+ StkId res;
+ int wanted = ci->nresults;
+ if (L->hookmask & (LUA_MASKRET | LUA_MASKLINE)) {
+ if (L->hookmask & LUA_MASKRET) {
+ ptrdiff_t fr = savestack(L, firstResult); /* hook may change stack */
+ luaD_hook(L, LUA_HOOKRET, -1);
+ firstResult = restorestack(L, fr);
+ }
+ L->oldpc = ci->previous->u.l.savedpc; /* 'oldpc' for caller function */
+ }
+ res = ci->func; /* res == final position of 1st result */
+ L->ci = ci->previous; /* back to caller */
+ /* move results to proper place */
+ return moveresults(L, firstResult, res, nres, wanted);
+}
+
+
#define next_ci(L) (L->ci = (L->ci->next ? L->ci->next : luaE_extendCI(L)))
@@ -374,13 +443,13 @@ int luaD_precall (lua_State *L, StkId func, int nresults) {
int n = cast_int(L->top - func) - 1; /* number of real arguments */
int fsize = p->maxstacksize; /* frame size */
checkstackp(L, fsize, func);
- if (p->is_vararg != 1) { /* do not use vararg? */
+ if (p->is_vararg)
+ base = adjust_varargs(L, p, n);
+ else { /* non vararg function */
for (; n < p->numparams; n++)
setnilvalue(L->top++); /* complete missing arguments */
base = func + 1;
}
- else
- base = adjust_varargs(L, p, n);
ci = next_ci(L); /* now 'enter' new function */
ci->nresults = nresults;
ci->func = func;
@@ -403,72 +472,6 @@ int luaD_precall (lua_State *L, StkId func, int nresults) {
/*
-** Given 'nres' results at 'firstResult', move 'wanted' of them to 'res'.
-** Handle most typical cases (zero results for commands, one result for
-** expressions, multiple results for tail calls/single parameters)
-** separated.
-*/
-static int moveresults (lua_State *L, const TValue *firstResult, StkId res,
- int nres, int wanted) {
- switch (wanted) { /* handle typical cases separately */
- case 0: break; /* nothing to move */
- case 1: { /* one result needed */
- if (nres == 0) /* no results? */
- firstResult = luaO_nilobject; /* adjust with nil */
- setobjs2s(L, res, firstResult); /* move it to proper place */
- break;
- }
- case LUA_MULTRET: {
- int i;
- for (i = 0; i < nres; i++) /* move all results to correct place */
- setobjs2s(L, res + i, firstResult + i);
- L->top = res + nres;
- return 0; /* wanted == LUA_MULTRET */
- }
- default: {
- int i;
- if (wanted <= nres) { /* enough results? */
- for (i = 0; i < wanted; i++) /* move wanted results to correct place */
- setobjs2s(L, res + i, firstResult + i);
- }
- else { /* not enough results; use all of them plus nils */
- for (i = 0; i < nres; i++) /* move all results to correct place */
- setobjs2s(L, res + i, firstResult + i);
- for (; i < wanted; i++) /* complete wanted number of results */
- setnilvalue(res + i);
- }
- break;
- }
- }
- L->top = res + wanted; /* top points after the last result */
- return 1;
-}
-
-
-/*
-** Finishes a function call: calls hook if necessary, removes CallInfo,
-** moves current number of results to proper place; returns 0 iff call
-** wanted multiple (variable number of) results.
-*/
-int luaD_poscall (lua_State *L, CallInfo *ci, StkId firstResult, int nres) {
- StkId res;
- int wanted = ci->nresults;
- if (L->hookmask & (LUA_MASKRET | LUA_MASKLINE)) {
- if (L->hookmask & LUA_MASKRET) {
- ptrdiff_t fr = savestack(L, firstResult); /* hook may change stack */
- luaD_hook(L, LUA_HOOKRET, -1);
- firstResult = restorestack(L, fr);
- }
- L->oldpc = ci->previous->u.l.savedpc; /* 'oldpc' for caller function */
- }
- res = ci->func; /* res == final position of 1st result */
- L->ci = ci->previous; /* back to caller */
- /* move results to proper place */
- return moveresults(L, firstResult, res, nres, wanted);
-}
-
-
-/*
** Check appropriate error for stack overflow ("regular" overflow or
** overflow while handling stack overflow). If 'nCalls' is larger than
** LUAI_MAXCCALLS (which means it is handling a "regular" overflow) but
@@ -520,19 +523,17 @@ static void finishCcall (lua_State *L, int status) {
/* error status can only happen in a protected call */
lua_assert((ci->callstatus & CIST_YPCALL) || status == LUA_YIELD);
if (ci->callstatus & CIST_YPCALL) { /* was inside a pcall? */
- ci->callstatus &= ~CIST_YPCALL; /* finish 'lua_pcall' */
- L->errfunc = ci->u.c.old_errfunc;
+ ci->callstatus &= ~CIST_YPCALL; /* continuation is also inside it */
+ L->errfunc = ci->u.c.old_errfunc; /* with the same error function */
}
/* finish 'lua_callk'/'lua_pcall'; CIST_YPCALL and 'errfunc' already
handled */
adjustresults(L, ci->nresults);
- /* call continuation function */
lua_unlock(L);
- n = (*ci->u.c.k)(L, status, ci->u.c.ctx);
+ n = (*ci->u.c.k)(L, status, ci->u.c.ctx); /* call continuation function */
lua_lock(L);
api_checknelems(L, n);
- /* finish 'luaD_precall' */
- luaD_poscall(L, ci, L->top - n, n);
+ luaD_poscall(L, ci, L->top - n, n); /* finish 'luaD_precall' */
}
@@ -595,15 +596,16 @@ static int recover (lua_State *L, int status) {
/*
-** signal an error in the call to 'resume', not in the execution of the
-** coroutine itself. (Such errors should not be handled by any coroutine
-** error handler and should not kill the coroutine.)
+** Signal an error in the call to 'lua_resume', not in the execution
+** of the coroutine itself. (Such errors should not be handled by any
+** coroutine error handler and should not kill the coroutine.)
*/
-static l_noret resume_error (lua_State *L, const char *msg, StkId firstArg) {
- L->top = firstArg; /* remove args from the stack */
+static int resume_error (lua_State *L, const char *msg, int narg) {
+ L->top -= narg; /* remove args from the stack */
setsvalue2s(L, L->top, luaS_new(L, msg)); /* push error message */
api_incr_top(L);
- luaD_throw(L, -1); /* jump back to 'lua_resume' */
+ lua_unlock(L);
+ return LUA_ERRRUN;
}
@@ -615,22 +617,15 @@ static l_noret resume_error (lua_State *L, const char *msg, StkId firstArg) {
** coroutine.
*/
static void resume (lua_State *L, void *ud) {
- int nCcalls = L->nCcalls;
int n = *(cast(int*, ud)); /* number of arguments */
StkId firstArg = L->top - n; /* first argument */
CallInfo *ci = L->ci;
- if (nCcalls >= LUAI_MAXCCALLS)
- resume_error(L, "C stack overflow", firstArg);
- if (L->status == LUA_OK) { /* may be starting a coroutine */
- if (ci != &L->base_ci) /* not in base level? */
- resume_error(L, "cannot resume non-suspended coroutine", firstArg);
- /* coroutine is in base level; start running it */
+ if (L->status == LUA_OK) { /* starting a coroutine? */
if (!luaD_precall(L, firstArg - 1, LUA_MULTRET)) /* Lua function? */
luaV_execute(L); /* call it */
}
- else if (L->status != LUA_YIELD)
- resume_error(L, "cannot resume dead coroutine", firstArg);
else { /* resuming from previous yield */
+ lua_assert(L->status == LUA_YIELD);
L->status = LUA_OK; /* mark that it is running (again) */
ci->func = restorestack(L, ci->extra);
if (isLua(ci)) /* yielded inside a hook? */
@@ -647,7 +642,6 @@ static void resume (lua_State *L, void *ud) {
}
unroll(L, NULL); /* run continuation */
}
- lua_assert(nCcalls == L->nCcalls);
}
@@ -655,8 +649,16 @@ LUA_API int lua_resume (lua_State *L, lua_State *from, int nargs) {
int status;
unsigned short oldnny = L->nny; /* save "number of non-yieldable" calls */
lua_lock(L);
- luai_userstateresume(L, nargs);
+ if (L->status == LUA_OK) { /* may be starting a coroutine */
+ if (L->ci != &L->base_ci) /* not in base level? */
+ return resume_error(L, "cannot resume non-suspended coroutine", nargs);
+ }
+ else if (L->status != LUA_YIELD)
+ return resume_error(L, "cannot resume dead coroutine", nargs);
L->nCcalls = (from) ? from->nCcalls + 1 : 1;
+ if (L->nCcalls >= LUAI_MAXCCALLS)
+ return resume_error(L, "C stack overflow", nargs);
+ luai_userstateresume(L, nargs);
L->nny = 0; /* allow yields */
api_checknelems(L, (L->status == LUA_OK) ? nargs + 1 : nargs);
status = luaD_rawrunprotected(L, resume, &nargs);
diff --git a/libs/lua/lua-5.3.3/ldo.h b/libs/lua/lua-5.3.4/ldo.h
index 4f5d51c3c7..4f5d51c3c7 100644
--- a/libs/lua/lua-5.3.3/ldo.h
+++ b/libs/lua/lua-5.3.4/ldo.h
diff --git a/libs/lua/lua-5.3.3/ldump.c b/libs/lua/lua-5.3.4/ldump.c
index 016e300822..016e300822 100644
--- a/libs/lua/lua-5.3.3/ldump.c
+++ b/libs/lua/lua-5.3.4/ldump.c
diff --git a/libs/lua/lua-5.3.3/lfunc.c b/libs/lua/lua-5.3.4/lfunc.c
index 67967dab3f..67967dab3f 100644
--- a/libs/lua/lua-5.3.3/lfunc.c
+++ b/libs/lua/lua-5.3.4/lfunc.c
diff --git a/libs/lua/lua-5.3.3/lfunc.h b/libs/lua/lua-5.3.4/lfunc.h
index 2eeb0d5a48..2eeb0d5a48 100644
--- a/libs/lua/lua-5.3.3/lfunc.h
+++ b/libs/lua/lua-5.3.4/lfunc.h
diff --git a/libs/lua/lua-5.3.3/lgc.c b/libs/lua/lua-5.3.4/lgc.c
index 7c29fb030a..ba2c19e14e 100644
--- a/libs/lua/lua-5.3.3/lgc.c
+++ b/libs/lua/lua-5.3.4/lgc.c
@@ -1,5 +1,5 @@
/*
-** $Id: lgc.c,v 2.212 2016/03/31 19:02:03 roberto Exp $
+** $Id: lgc.c,v 2.215 2016/12/22 13:08:50 roberto Exp $
** Garbage Collector
** See Copyright Notice in lua.h
*/
@@ -467,7 +467,7 @@ static lu_mem traversetable (global_State *g, Table *h) {
else /* not weak */
traversestrongtable(g, h);
return sizeof(Table) + sizeof(TValue) * h->sizearray +
- sizeof(Node) * cast(size_t, sizenode(h));
+ sizeof(Node) * cast(size_t, allocsizenode(h));
}
@@ -539,7 +539,7 @@ static lu_mem traversethread (global_State *g, lua_State *th) {
StkId lim = th->stack + th->stacksize; /* real end of stack */
for (; o < lim; o++) /* clear not-marked stack slice */
setnilvalue(o);
- /* 'remarkupvals' may have removed thread from 'twups' list */
+ /* 'remarkupvals' may have removed thread from 'twups' list */
if (!isintwups(th) && th->openupval != NULL) {
th->twups = g->twups; /* link it back to the list */
g->twups = th;
@@ -818,7 +818,9 @@ static void GCTM (lua_State *L, int propagateerrors) {
setobj2s(L, L->top, tm); /* push finalizer... */
setobj2s(L, L->top + 1, &v); /* ... and its argument */
L->top += 2; /* and (next line) call the finalizer */
+ L->ci->callstatus |= CIST_FIN; /* will run a finalizer */
status = luaD_pcall(L, dothecall, NULL, savestack(L, L->top - 2), 0);
+ L->ci->callstatus &= ~CIST_FIN; /* not running a finalizer anymore */
L->allowhook = oldah; /* restore hooks */
g->gcrunning = running; /* restore state */
if (status != LUA_OK && propagateerrors) { /* error while running __gc? */
diff --git a/libs/lua/lua-5.3.3/lgc.h b/libs/lua/lua-5.3.4/lgc.h
index aed3e18a5f..aed3e18a5f 100644
--- a/libs/lua/lua-5.3.3/lgc.h
+++ b/libs/lua/lua-5.3.4/lgc.h
diff --git a/libs/lua/lua-5.3.3/linit.c b/libs/lua/lua-5.3.4/linit.c
index 8ce94ccb35..afcaf98b24 100644
--- a/libs/lua/lua-5.3.3/linit.c
+++ b/libs/lua/lua-5.3.4/linit.c
@@ -1,5 +1,5 @@
/*
-** $Id: linit.c,v 1.38 2015/01/05 13:48:33 roberto Exp $
+** $Id: linit.c,v 1.39 2016/12/04 20:17:24 roberto Exp $
** Initialization of libraries for lua.c and other clients
** See Copyright Notice in lua.h
*/
@@ -18,10 +18,10 @@
** open the library, which is already linked to the application.
** For that, do the following code:
**
-** luaL_getsubtable(L, LUA_REGISTRYINDEX, "_PRELOAD");
+** luaL_getsubtable(L, LUA_REGISTRYINDEX, LUA_PRELOAD_TABLE);
** lua_pushcfunction(L, luaopen_modname);
** lua_setfield(L, -2, modname);
-** lua_pop(L, 1); // remove _PRELOAD table
+** lua_pop(L, 1); // remove PRELOAD table
*/
#include "lprefix.h"
diff --git a/libs/lua/lua-5.3.3/liolib.c b/libs/lua/lua-5.3.4/liolib.c
index aa78e593fa..156840358d 100644
--- a/libs/lua/lua-5.3.3/liolib.c
+++ b/libs/lua/lua-5.3.4/liolib.c
@@ -1,5 +1,5 @@
/*
-** $Id: liolib.c,v 2.149 2016/05/02 14:03:19 roberto Exp $
+** $Id: liolib.c,v 2.151 2016/12/20 18:37:00 roberto Exp $
** Standard I/O (and system) library
** See Copyright Notice in lua.h
*/
@@ -37,10 +37,11 @@
#endif
/* Check whether 'mode' matches '[rwa]%+?[L_MODEEXT]*' */
-#define l_checkmode(mode) \
- (*mode != '\0' && strchr("rwa", *(mode++)) != NULL && \
- (*mode != '+' || (++mode, 1)) && /* skip if char is '+' */ \
- (strspn(mode, L_MODEEXT) == strlen(mode)))
+static int l_checkmode (const char *mode) {
+ return (*mode != '\0' && strchr("rwa", *(mode++)) != NULL &&
+ (*mode != '+' || (++mode, 1)) && /* skip if char is '+' */
+ (strspn(mode, L_MODEEXT) == strlen(mode))); /* check extensions */
+}
#endif
@@ -618,8 +619,10 @@ static int g_write (lua_State *L, FILE *f, int arg) {
if (lua_type(L, arg) == LUA_TNUMBER) {
/* optimization: could be done exactly as for strings */
int len = lua_isinteger(L, arg)
- ? fprintf(f, LUA_INTEGER_FMT, lua_tointeger(L, arg))
- : fprintf(f, LUA_NUMBER_FMT, lua_tonumber(L, arg));
+ ? fprintf(f, LUA_INTEGER_FMT,
+ (LUAI_UACINT)lua_tointeger(L, arg))
+ : fprintf(f, LUA_NUMBER_FMT,
+ (LUAI_UACNUMBER)lua_tonumber(L, arg));
status = status && (len > 0);
}
else {
diff --git a/libs/lua/lua-5.3.3/llex.c b/libs/lua/lua-5.3.4/llex.c
index 70328273f7..70328273f7 100644
--- a/libs/lua/lua-5.3.3/llex.c
+++ b/libs/lua/lua-5.3.4/llex.c
diff --git a/libs/lua/lua-5.3.3/llex.h b/libs/lua/lua-5.3.4/llex.h
index 2363d87e40..2363d87e40 100644
--- a/libs/lua/lua-5.3.3/llex.h
+++ b/libs/lua/lua-5.3.4/llex.h
diff --git a/libs/lua/lua-5.3.3/llimits.h b/libs/lua/lua-5.3.4/llimits.h
index f21377fef9..f21377fef9 100644
--- a/libs/lua/lua-5.3.3/llimits.h
+++ b/libs/lua/lua-5.3.4/llimits.h
diff --git a/libs/lua/lua-5.3.3/lmathlib.c b/libs/lua/lua-5.3.4/lmathlib.c
index 94815f129f..b7f8baee07 100644
--- a/libs/lua/lua-5.3.3/lmathlib.c
+++ b/libs/lua/lua-5.3.4/lmathlib.c
@@ -1,5 +1,5 @@
/*
-** $Id: lmathlib.c,v 1.117 2015/10/02 15:39:23 roberto Exp $
+** $Id: lmathlib.c,v 1.119 2016/12/22 13:08:50 roberto Exp $
** Standard mathematical library
** See Copyright Notice in lua.h
*/
@@ -184,10 +184,13 @@ static int math_log (lua_State *L) {
else {
lua_Number base = luaL_checknumber(L, 2);
#if !defined(LUA_USE_C89)
- if (base == 2.0) res = l_mathop(log2)(x); else
+ if (base == l_mathop(2.0))
+ res = l_mathop(log2)(x); else
#endif
- if (base == 10.0) res = l_mathop(log10)(x);
- else res = l_mathop(log)(x)/l_mathop(log)(base);
+ if (base == l_mathop(10.0))
+ res = l_mathop(log10)(x);
+ else
+ res = l_mathop(log)(x)/l_mathop(log)(base);
}
lua_pushnumber(L, res);
return 1;
@@ -262,7 +265,7 @@ static int math_random (lua_State *L) {
default: return luaL_error(L, "wrong number of arguments");
}
/* random integer in the interval [low, up] */
- luaL_argcheck(L, low <= up, 1, "interval is empty");
+ luaL_argcheck(L, low <= up, 1, "interval is empty");
luaL_argcheck(L, low >= 0 || up <= LUA_MAXINTEGER + low, 1,
"interval too large");
r *= (double)(up - low) + 1.0;
@@ -281,9 +284,9 @@ static int math_randomseed (lua_State *L) {
static int math_type (lua_State *L) {
if (lua_type(L, 1) == LUA_TNUMBER) {
if (lua_isinteger(L, 1))
- lua_pushliteral(L, "integer");
+ lua_pushliteral(L, "integer");
else
- lua_pushliteral(L, "float");
+ lua_pushliteral(L, "float");
}
else {
luaL_checkany(L, 1);
diff --git a/libs/lua/lua-5.3.3/lmem.c b/libs/lua/lua-5.3.4/lmem.c
index 0a0476cc77..0a0476cc77 100644
--- a/libs/lua/lua-5.3.3/lmem.c
+++ b/libs/lua/lua-5.3.4/lmem.c
diff --git a/libs/lua/lua-5.3.3/lmem.h b/libs/lua/lua-5.3.4/lmem.h
index 30f484895e..30f484895e 100644
--- a/libs/lua/lua-5.3.3/lmem.h
+++ b/libs/lua/lua-5.3.4/lmem.h
diff --git a/libs/lua/lua-5.3.3/loadlib.c b/libs/lua/lua-5.3.4/loadlib.c
index 79119287ae..4791e748b1 100644
--- a/libs/lua/lua-5.3.3/loadlib.c
+++ b/libs/lua/lua-5.3.4/loadlib.c
@@ -1,5 +1,5 @@
/*
-** $Id: loadlib.c,v 1.127 2015/11/23 11:30:45 roberto Exp $
+** $Id: loadlib.c,v 1.130 2017/01/12 17:14:26 roberto Exp $
** Dynamic library loader for Lua
** See Copyright Notice in lua.h
**
@@ -25,40 +25,9 @@
/*
-** LUA_PATH_VAR and LUA_CPATH_VAR are the names of the environment
-** variables that Lua check to set its paths.
-*/
-#if !defined(LUA_PATH_VAR)
-#define LUA_PATH_VAR "LUA_PATH"
-#endif
-
-#if !defined(LUA_CPATH_VAR)
-#define LUA_CPATH_VAR "LUA_CPATH"
-#endif
-
-#define LUA_PATHSUFFIX "_" LUA_VERSION_MAJOR "_" LUA_VERSION_MINOR
-
-#define LUA_PATHVARVERSION LUA_PATH_VAR LUA_PATHSUFFIX
-#define LUA_CPATHVARVERSION LUA_CPATH_VAR LUA_PATHSUFFIX
-
-/*
-** LUA_PATH_SEP is the character that separates templates in a path.
-** LUA_PATH_MARK is the string that marks the substitution points in a
-** template.
-** LUA_EXEC_DIR in a Windows path is replaced by the executable's
-** directory.
** LUA_IGMARK is a mark to ignore all before it when building the
** luaopen_ function name.
*/
-#if !defined (LUA_PATH_SEP)
-#define LUA_PATH_SEP ";"
-#endif
-#if !defined (LUA_PATH_MARK)
-#define LUA_PATH_MARK "?"
-#endif
-#if !defined (LUA_EXEC_DIR)
-#define LUA_EXEC_DIR "!"
-#endif
#if !defined (LUA_IGMARK)
#define LUA_IGMARK "-"
#endif
@@ -94,7 +63,8 @@ static const int CLIBS = 0;
#define LIB_FAIL "open"
-#define setprogdir(L) ((void)0)
+
+#define setprogdir(L) ((void)0)
/*
@@ -179,7 +149,6 @@ static lua_CFunction lsys_sym (lua_State *L, void *lib, const char *sym) {
#include <windows.h>
-#undef setprogdir
/*
** optional flags for LoadLibraryEx
@@ -189,21 +158,30 @@ static lua_CFunction lsys_sym (lua_State *L, void *lib, const char *sym) {
#endif
+#undef setprogdir
+
+
+/*
+** Replace in the path (on the top of the stack) any occurrence
+** of LUA_EXEC_DIR with the executable's path.
+*/
static void setprogdir (lua_State *L) {
char buff[MAX_PATH + 1];
char *lb;
DWORD nsize = sizeof(buff)/sizeof(char);
- DWORD n = GetModuleFileNameA(NULL, buff, nsize);
+ DWORD n = GetModuleFileNameA(NULL, buff, nsize); /* get exec. name */
if (n == 0 || n == nsize || (lb = strrchr(buff, '\\')) == NULL)
luaL_error(L, "unable to get ModuleFileName");
else {
- *lb = '\0';
+ *lb = '\0'; /* cut name on the last '\\' to get the path */
luaL_gsub(L, lua_tostring(L, -1), LUA_EXEC_DIR, buff);
lua_remove(L, -2); /* remove original string */
}
}
+
+
static void pusherror (lua_State *L) {
int error = GetLastError();
char buffer[128];
@@ -273,6 +251,67 @@ static lua_CFunction lsys_sym (lua_State *L, void *lib, const char *sym) {
/*
+** {==================================================================
+** Set Paths
+** ===================================================================
+*/
+
+/*
+** LUA_PATH_VAR and LUA_CPATH_VAR are the names of the environment
+** variables that Lua check to set its paths.
+*/
+#if !defined(LUA_PATH_VAR)
+#define LUA_PATH_VAR "LUA_PATH"
+#endif
+
+#if !defined(LUA_CPATH_VAR)
+#define LUA_CPATH_VAR "LUA_CPATH"
+#endif
+
+
+#define AUXMARK "\1" /* auxiliary mark */
+
+
+/*
+** return registry.LUA_NOENV as a boolean
+*/
+static int noenv (lua_State *L) {
+ int b;
+ lua_getfield(L, LUA_REGISTRYINDEX, "LUA_NOENV");
+ b = lua_toboolean(L, -1);
+ lua_pop(L, 1); /* remove value */
+ return b;
+}
+
+
+/*
+** Set a path
+*/
+static void setpath (lua_State *L, const char *fieldname,
+ const char *envname,
+ const char *dft) {
+ const char *nver = lua_pushfstring(L, "%s%s", envname, LUA_VERSUFFIX);
+ const char *path = getenv(nver); /* use versioned name */
+ if (path == NULL) /* no environment variable? */
+ path = getenv(envname); /* try unversioned name */
+ if (path == NULL || noenv(L)) /* no environment variable? */
+ lua_pushstring(L, dft); /* use default */
+ else {
+ /* replace ";;" by ";AUXMARK;" and then AUXMARK by default path */
+ path = luaL_gsub(L, path, LUA_PATH_SEP LUA_PATH_SEP,
+ LUA_PATH_SEP AUXMARK LUA_PATH_SEP);
+ luaL_gsub(L, path, AUXMARK, dft);
+ lua_remove(L, -2); /* remove result from 1st 'gsub' */
+ }
+ setprogdir(L);
+ lua_setfield(L, -3, fieldname); /* package[fieldname] = path value */
+ lua_pop(L, 1); /* pop versioned variable name */
+}
+
+/* }================================================================== */
+
+
+/*
** return registry.CLIBS[path]
*/
static void *checkclib (lua_State *L, const char *path) {
@@ -520,7 +559,7 @@ static int searcher_Croot (lua_State *L) {
static int searcher_preload (lua_State *L) {
const char *name = luaL_checkstring(L, 1);
- lua_getfield(L, LUA_REGISTRYINDEX, "_PRELOAD");
+ lua_getfield(L, LUA_REGISTRYINDEX, LUA_PRELOAD_TABLE);
if (lua_getfield(L, -1, name) == LUA_TNIL) /* not found? */
lua_pushfstring(L, "\n\tno field package.preload['%s']", name);
return 1;
@@ -557,9 +596,9 @@ static void findloader (lua_State *L, const char *name) {
static int ll_require (lua_State *L) {
const char *name = luaL_checkstring(L, 1);
- lua_settop(L, 1); /* _LOADED table will be at index 2 */
- lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED");
- lua_getfield(L, 2, name); /* _LOADED[name] */
+ lua_settop(L, 1); /* LOADED table will be at index 2 */
+ lua_getfield(L, LUA_REGISTRYINDEX, LUA_LOADED_TABLE);
+ lua_getfield(L, 2, name); /* LOADED[name] */
if (lua_toboolean(L, -1)) /* is it there? */
return 1; /* package is already loaded */
/* else must load package */
@@ -569,11 +608,11 @@ static int ll_require (lua_State *L) {
lua_insert(L, -2); /* name is 1st argument (before search data) */
lua_call(L, 2, 1); /* run loader to load module */
if (!lua_isnil(L, -1)) /* non-nil return? */
- lua_setfield(L, 2, name); /* _LOADED[name] = returned value */
+ lua_setfield(L, 2, name); /* LOADED[name] = returned value */
if (lua_getfield(L, 2, name) == LUA_TNIL) { /* module set no value? */
lua_pushboolean(L, 1); /* use true as result */
lua_pushvalue(L, -1); /* extra copy to be returned */
- lua_setfield(L, 2, name); /* _LOADED[name] = true */
+ lua_setfield(L, 2, name); /* LOADED[name] = true */
}
return 1;
}
@@ -666,41 +705,6 @@ static int ll_seeall (lua_State *L) {
-/* auxiliary mark (for internal use) */
-#define AUXMARK "\1"
-
-
-/*
-** return registry.LUA_NOENV as a boolean
-*/
-static int noenv (lua_State *L) {
- int b;
- lua_getfield(L, LUA_REGISTRYINDEX, "LUA_NOENV");
- b = lua_toboolean(L, -1);
- lua_pop(L, 1); /* remove value */
- return b;
-}
-
-
-static void setpath (lua_State *L, const char *fieldname, const char *envname1,
- const char *envname2, const char *def) {
- const char *path = getenv(envname1);
- if (path == NULL) /* no environment variable? */
- path = getenv(envname2); /* try alternative name */
- if (path == NULL || noenv(L)) /* no environment variable? */
- lua_pushstring(L, def); /* use default */
- else {
- /* replace ";;" by ";AUXMARK;" and then AUXMARK by default path */
- path = luaL_gsub(L, path, LUA_PATH_SEP LUA_PATH_SEP,
- LUA_PATH_SEP AUXMARK LUA_PATH_SEP);
- luaL_gsub(L, path, AUXMARK, def);
- lua_remove(L, -2);
- }
- setprogdir(L);
- lua_setfield(L, -2, fieldname);
-}
-
-
static const luaL_Reg pk_funcs[] = {
{"loadlib", ll_loadlib},
{"searchpath", ll_searchpath},
@@ -764,19 +768,18 @@ LUAMOD_API int luaopen_package (lua_State *L) {
createclibstable(L);
luaL_newlib(L, pk_funcs); /* create 'package' table */
createsearcherstable(L);
- /* set field 'path' */
- setpath(L, "path", LUA_PATHVARVERSION, LUA_PATH_VAR, LUA_PATH_DEFAULT);
- /* set field 'cpath' */
- setpath(L, "cpath", LUA_CPATHVARVERSION, LUA_CPATH_VAR, LUA_CPATH_DEFAULT);
+ /* set paths */
+ setpath(L, "path", LUA_PATH_VAR, LUA_PATH_DEFAULT);
+ setpath(L, "cpath", LUA_CPATH_VAR, LUA_CPATH_DEFAULT);
/* store config information */
lua_pushliteral(L, LUA_DIRSEP "\n" LUA_PATH_SEP "\n" LUA_PATH_MARK "\n"
LUA_EXEC_DIR "\n" LUA_IGMARK "\n");
lua_setfield(L, -2, "config");
/* set field 'loaded' */
- luaL_getsubtable(L, LUA_REGISTRYINDEX, "_LOADED");
+ luaL_getsubtable(L, LUA_REGISTRYINDEX, LUA_LOADED_TABLE);
lua_setfield(L, -2, "loaded");
/* set field 'preload' */
- luaL_getsubtable(L, LUA_REGISTRYINDEX, "_PRELOAD");
+ luaL_getsubtable(L, LUA_REGISTRYINDEX, LUA_PRELOAD_TABLE);
lua_setfield(L, -2, "preload");
lua_pushglobaltable(L);
lua_pushvalue(L, -2); /* set 'package' as upvalue for next lib */
diff --git a/libs/lua/lua-5.3.3/lobject.c b/libs/lua/lua-5.3.4/lobject.c
index 9fe441f157..2da76899a2 100644
--- a/libs/lua/lua-5.3.3/lobject.c
+++ b/libs/lua/lua-5.3.4/lobject.c
@@ -1,5 +1,5 @@
/*
-** $Id: lobject.c,v 2.111 2016/05/20 14:07:48 roberto Exp $
+** $Id: lobject.c,v 2.113 2016/12/22 13:08:50 roberto Exp $
** Some generic functions over Lua objects
** See Copyright Notice in lua.h
*/
@@ -394,7 +394,7 @@ static void pushstr (lua_State *L, const char *str, size_t l) {
/*
-** this function handles only '%d', '%c', '%f', '%p', and '%s'
+** this function handles only '%d', '%c', '%f', '%p', and '%s'
conventional formats, plus Lua-specific '%I' and '%U'
*/
const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) {
diff --git a/libs/lua/lua-5.3.3/lobject.h b/libs/lua/lua-5.3.4/lobject.h
index 2d52b41592..3c04228949 100644
--- a/libs/lua/lua-5.3.3/lobject.h
+++ b/libs/lua/lua-5.3.4/lobject.h
@@ -1,5 +1,5 @@
/*
-** $Id: lobject.h,v 2.116 2015/11/03 18:33:10 roberto Exp $
+** $Id: lobject.h,v 2.117 2016/08/01 19:51:24 roberto Exp $
** Type definitions for Lua objects
** See Copyright Notice in lua.h
*/
@@ -407,7 +407,7 @@ typedef struct LocVar {
typedef struct Proto {
CommonHeader;
lu_byte numparams; /* number of fixed parameters */
- lu_byte is_vararg; /* 2: declared vararg; 1: uses vararg */
+ lu_byte is_vararg;
lu_byte maxstacksize; /* number of registers needed by this function */
int sizeupvalues; /* size of 'upvalues' */
int sizek; /* size of 'k' */
diff --git a/libs/lua/lua-5.3.3/lopcodes.c b/libs/lua/lua-5.3.4/lopcodes.c
index a1cbef8573..a1cbef8573 100644
--- a/libs/lua/lua-5.3.3/lopcodes.c
+++ b/libs/lua/lua-5.3.4/lopcodes.c
diff --git a/libs/lua/lua-5.3.3/lopcodes.h b/libs/lua/lua-5.3.4/lopcodes.h
index 864b8e4bb5..bbc4b61968 100644
--- a/libs/lua/lua-5.3.3/lopcodes.h
+++ b/libs/lua/lua-5.3.4/lopcodes.h
@@ -1,5 +1,5 @@
/*
-** $Id: lopcodes.h,v 1.148 2014/10/25 11:50:46 roberto Exp $
+** $Id: lopcodes.h,v 1.149 2016/07/19 17:12:21 roberto Exp $
** Opcodes for Lua virtual machine
** See Copyright Notice in lua.h
*/
@@ -139,7 +139,9 @@ enum OpMode {iABC, iABx, iAsBx, iAx}; /* basic instruction format */
/* gets the index of the constant */
#define INDEXK(r) ((int)(r) & ~BITRK)
+#if !defined(MAXINDEXRK) /* (for debugging only) */
#define MAXINDEXRK (BITRK - 1)
+#endif
/* code a constant index as a RK value */
#define RKASK(x) ((x) | BITRK)
diff --git a/libs/lua/lua-5.3.3/loslib.c b/libs/lua/lua-5.3.4/loslib.c
index 4810655504..5a94eb9068 100644
--- a/libs/lua/lua-5.3.3/loslib.c
+++ b/libs/lua/lua-5.3.4/loslib.c
@@ -1,5 +1,5 @@
/*
-** $Id: loslib.c,v 1.64 2016/04/18 13:06:55 roberto Exp $
+** $Id: loslib.c,v 1.65 2016/07/18 17:58:58 roberto Exp $
** Standard Operating System library
** See Copyright Notice in lua.h
*/
@@ -30,16 +30,16 @@
*/
#if !defined(LUA_STRFTIMEOPTIONS) /* { */
-/* options for ANSI C 89 */
+/* options for ANSI C 89 (only 1-char options) */
#define L_STRFTIMEC89 "aAbBcdHIjmMpSUwWxXyYZ%"
/* options for ISO C 99 and POSIX */
#define L_STRFTIMEC99 "aAbBcCdDeFgGhHIjmMnprRStTuUVwWxXyYzZ%" \
- "||" "EcECExEXEyEY" "OdOeOHOIOmOMOSOuOUOVOwOWOy"
+ "||" "EcECExEXEyEY" "OdOeOHOIOmOMOSOuOUOVOwOWOy" /* two-char options */
/* options for Windows */
#define L_STRFTIMEWIN "aAbBcdHIjmMpSUwWxXyYzZ%" \
- "||" "#c#x#d#H#I#j#m#M#S#U#w#W#y#Y"
+ "||" "#c#x#d#H#I#j#m#M#S#U#w#W#y#Y" /* two-char options */
#if defined(LUA_USE_WINDOWS)
#define LUA_STRFTIMEOPTIONS L_STRFTIMEWIN
@@ -257,12 +257,13 @@ static int getfield (lua_State *L, const char *key, int d, int delta) {
}
-static const char *checkoption (lua_State *L, const char *conv, char *buff) {
- const char *option;
- int oplen = 1;
- for (option = LUA_STRFTIMEOPTIONS; *option != '\0'; option += oplen) {
+static const char *checkoption (lua_State *L, const char *conv,
+ ptrdiff_t convlen, char *buff) {
+ const char *option = LUA_STRFTIMEOPTIONS;
+ int oplen = 1; /* length of options being checked */
+ for (; *option != '\0' && oplen <= convlen; option += oplen) {
if (*option == '|') /* next block? */
- oplen++; /* next length */
+ oplen++; /* will check options with next length (+1) */
else if (memcmp(conv, option, oplen) == 0) { /* match? */
memcpy(buff, conv, oplen); /* copy valid option to buffer */
buff[oplen] = '\0';
@@ -280,8 +281,10 @@ static const char *checkoption (lua_State *L, const char *conv, char *buff) {
static int os_date (lua_State *L) {
- const char *s = luaL_optstring(L, 1, "%c");
+ size_t slen;
+ const char *s = luaL_optlstring(L, 1, "%c", &slen);
time_t t = luaL_opt(L, l_checktime, 2, time(NULL));
+ const char *se = s + slen; /* 's' end */
struct tm tmr, *stm;
if (*s == '!') { /* UTC? */
stm = l_gmtime(&t, &tmr);
@@ -300,13 +303,14 @@ static int os_date (lua_State *L) {
luaL_Buffer b;
cc[0] = '%';
luaL_buffinit(L, &b);
- while (*s) {
+ while (s < se) {
if (*s != '%') /* not a conversion specifier? */
luaL_addchar(&b, *s++);
else {
size_t reslen;
char *buff = luaL_prepbuffsize(&b, SIZETIMEFMT);
- s = checkoption(L, s + 1, cc + 1); /* copy specifier to 'cc' */
+ s++; /* skip '%' */
+ s = checkoption(L, s, se - s, cc + 1); /* copy specifier to 'cc' */
reslen = strftime(buff, SIZETIMEFMT, cc, stm);
luaL_addsize(&b, reslen);
}
diff --git a/libs/lua/lua-5.3.3/lparser.c b/libs/lua/lua-5.3.4/lparser.c
index 22530a57b2..cd4512d4d4 100644
--- a/libs/lua/lua-5.3.3/lparser.c
+++ b/libs/lua/lua-5.3.4/lparser.c
@@ -1,5 +1,5 @@
/*
-** $Id: lparser.c,v 2.153 2016/05/13 19:10:16 roberto Exp $
+** $Id: lparser.c,v 2.155 2016/08/01 19:51:24 roberto Exp $
** Lua Parser
** See Copyright Notice in lua.h
*/
@@ -323,6 +323,8 @@ static void adjust_assign (LexState *ls, int nvars, int nexps, expdesc *e) {
luaK_nil(fs, reg, extra);
}
}
+ if (nexps > nvars)
+ ls->fs->freereg -= nexps - nvars; /* remove extra values */
}
@@ -764,7 +766,7 @@ static void parlist (LexState *ls) {
}
case TK_DOTS: { /* param -> '...' */
luaX_next(ls);
- f->is_vararg = 2; /* declared vararg */
+ f->is_vararg = 1; /* declared vararg */
break;
}
default: luaX_syntaxerror(ls, "<name> or '...' expected");
@@ -960,7 +962,6 @@ static void simpleexp (LexState *ls, expdesc *v) {
FuncState *fs = ls->fs;
check_condition(ls, fs->f->is_vararg,
"cannot use '...' outside a vararg function");
- fs->f->is_vararg = 1; /* function actually uses vararg */
init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0));
break;
}
@@ -1160,11 +1161,8 @@ static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) {
int nexps;
checknext(ls, '=');
nexps = explist(ls, &e);
- if (nexps != nvars) {
+ if (nexps != nvars)
adjust_assign(ls, nvars, nexps, &e);
- if (nexps > nvars)
- ls->fs->freereg -= nexps - nvars; /* remove extra values */
- }
else {
luaK_setoneret(ls->fs, &e); /* close last expression */
luaK_storevar(ls->fs, &lh->v, &e);
@@ -1615,7 +1613,7 @@ static void mainfunc (LexState *ls, FuncState *fs) {
BlockCnt bl;
expdesc v;
open_func(ls, fs, &bl);
- fs->f->is_vararg = 2; /* main function is always declared vararg */
+ fs->f->is_vararg = 1; /* main function is always declared vararg */
init_exp(&v, VLOCAL, 0); /* create and... */
newupvalue(fs, ls->envn, &v); /* ...set environment upvalue */
luaX_next(ls); /* read first token */
diff --git a/libs/lua/lua-5.3.3/lparser.h b/libs/lua/lua-5.3.4/lparser.h
index 02e9b03aeb..02e9b03aeb 100644
--- a/libs/lua/lua-5.3.3/lparser.h
+++ b/libs/lua/lua-5.3.4/lparser.h
diff --git a/libs/lua/lua-5.3.3/lprefix.h b/libs/lua/lua-5.3.4/lprefix.h
index 02daa837f5..02daa837f5 100644
--- a/libs/lua/lua-5.3.3/lprefix.h
+++ b/libs/lua/lua-5.3.4/lprefix.h
diff --git a/libs/lua/lua-5.3.3/lstate.c b/libs/lua/lua-5.3.4/lstate.c
index 9194ac3419..9194ac3419 100644
--- a/libs/lua/lua-5.3.3/lstate.c
+++ b/libs/lua/lua-5.3.4/lstate.c
diff --git a/libs/lua/lua-5.3.3/lstate.h b/libs/lua/lua-5.3.4/lstate.h
index b3033bee55..a469466c44 100644
--- a/libs/lua/lua-5.3.3/lstate.h
+++ b/libs/lua/lua-5.3.4/lstate.h
@@ -1,5 +1,5 @@
/*
-** $Id: lstate.h,v 2.130 2015/12/16 16:39:38 roberto Exp $
+** $Id: lstate.h,v 2.133 2016/12/22 13:08:50 roberto Exp $
** Global State
** See Copyright Notice in lua.h
*/
@@ -23,7 +23,7 @@
**
** 'allgc': all objects not marked for finalization;
** 'finobj': all objects marked for finalization;
-** 'tobefnz': all objects ready to be finalized;
+** 'tobefnz': all objects ready to be finalized;
** 'fixedgc': all objects that are not to be collected (currently
** only small strings, such as reserved words).
@@ -34,7 +34,7 @@ struct lua_longjmp; /* defined in ldo.c */
/*
-** Atomic type (relative to signals) to better ensure that 'lua_sethook'
+** Atomic type (relative to signals) to better ensure that 'lua_sethook'
** is thread safe
*/
#if !defined(l_signalT)
@@ -66,7 +66,7 @@ typedef struct stringtable {
** Information about a call.
** When a thread yields, 'func' is adjusted to pretend that the
** top function has only the yielded values in its stack; in that
-** case, the actual 'func' value is saved in field 'extra'.
+** case, the actual 'func' value is saved in field 'extra'.
** When a function calls another with a continuation, 'extra' keeps
** the function index so that, in case of errors, the continuation
** function can be called with the correct top.
@@ -88,7 +88,7 @@ typedef struct CallInfo {
} u;
ptrdiff_t extra;
short nresults; /* expected number of results from this function */
- lu_byte callstatus;
+ unsigned short callstatus;
} CallInfo;
@@ -104,6 +104,7 @@ typedef struct CallInfo {
#define CIST_TAIL (1<<5) /* call was tail called */
#define CIST_HOOKYIELD (1<<6) /* last hook called yielded */
#define CIST_LEQ (1<<7) /* using __lt for __le */
+#define CIST_FIN (1<<8) /* call is running a finalizer */
#define isLua(ci) ((ci)->callstatus & CIST_LUA)
diff --git a/libs/lua/lua-5.3.3/lstring.c b/libs/lua/lua-5.3.4/lstring.c
index 9351766fd6..9351766fd6 100644
--- a/libs/lua/lua-5.3.3/lstring.c
+++ b/libs/lua/lua-5.3.4/lstring.c
diff --git a/libs/lua/lua-5.3.3/lstring.h b/libs/lua/lua-5.3.4/lstring.h
index 27efd20772..27efd20772 100644
--- a/libs/lua/lua-5.3.3/lstring.h
+++ b/libs/lua/lua-5.3.4/lstring.h
diff --git a/libs/lua/lua-5.3.3/lstrlib.c b/libs/lua/lua-5.3.4/lstrlib.c
index cd1ced5046..c7aa755fab 100644
--- a/libs/lua/lua-5.3.3/lstrlib.c
+++ b/libs/lua/lua-5.3.4/lstrlib.c
@@ -1,5 +1,5 @@
/*
-** $Id: lstrlib.c,v 1.251 2016/05/20 14:13:21 roberto Exp $
+** $Id: lstrlib.c,v 1.254 2016/12/22 13:08:50 roberto Exp $
** Standard library for string operations and pattern-matching
** See Copyright Notice in lua.h
*/
@@ -839,11 +839,12 @@ static lua_Number adddigit (char *buff, int n, lua_Number x) {
static int num2straux (char *buff, int sz, lua_Number x) {
- if (x != x || x == HUGE_VAL || x == -HUGE_VAL) /* inf or NaN? */
- return l_sprintf(buff, sz, LUA_NUMBER_FMT, x); /* equal to '%g' */
+ /* if 'inf' or 'NaN', format it like '%g' */
+ if (x != x || x == (lua_Number)HUGE_VAL || x == -(lua_Number)HUGE_VAL)
+ return l_sprintf(buff, sz, LUA_NUMBER_FMT, (LUAI_UACNUMBER)x);
else if (x == 0) { /* can be -0... */
/* create "0" or "-0" followed by exponent */
- return l_sprintf(buff, sz, LUA_NUMBER_FMT "x0p+0", x);
+ return l_sprintf(buff, sz, LUA_NUMBER_FMT "x0p+0", (LUAI_UACNUMBER)x);
}
else {
int e;
@@ -933,7 +934,7 @@ static void addquoted (luaL_Buffer *b, const char *s, size_t len) {
static void checkdp (char *buff, int nb) {
if (memchr(buff, '.', nb) == NULL) { /* no dot? */
char point = lua_getlocaledecpoint(); /* try locale point */
- char *ppoint = (char*) memchr(buff, point, nb);
+ char *ppoint = (char *)memchr(buff, point, nb);
if (ppoint) *ppoint = '.'; /* change it to a dot */
}
}
@@ -960,7 +961,7 @@ static void addliteral (lua_State *L, luaL_Buffer *b, int arg) {
const char *format = (n == LUA_MININTEGER) /* corner case? */
? "0x%" LUA_INTEGER_FRMLEN "x" /* use hexa */
: LUA_INTEGER_FMT; /* else use default format */
- nb = l_sprintf(buff, MAX_ITEM, format, n);
+ nb = l_sprintf(buff, MAX_ITEM, format, (LUAI_UACINT)n);
}
luaL_addsize(b, nb);
break;
@@ -1041,7 +1042,7 @@ static int str_format (lua_State *L) {
case 'o': case 'u': case 'x': case 'X': {
lua_Integer n = luaL_checkinteger(L, arg);
addlenmod(form, LUA_INTEGER_FRMLEN);
- nb = l_sprintf(buff, MAX_ITEM, form, n);
+ nb = l_sprintf(buff, MAX_ITEM, form, (LUAI_UACINT)n);
break;
}
case 'a': case 'A':
@@ -1051,8 +1052,9 @@ static int str_format (lua_State *L) {
break;
case 'e': case 'E': case 'f':
case 'g': case 'G': {
+ lua_Number n = luaL_checknumber(L, arg);
addlenmod(form, LUA_NUMBER_FRMLEN);
- nb = l_sprintf(buff, MAX_ITEM, form, luaL_checknumber(L, arg));
+ nb = l_sprintf(buff, MAX_ITEM, form, (LUAI_UACNUMBER)n);
break;
}
case 'q': {
@@ -1259,7 +1261,7 @@ static KOption getoption (Header *h, const char **fmt, int *size) {
** 'psize' is filled with option's size, 'notoalign' with its
** alignment requirements.
** Local variable 'size' gets the size to be aligned. (Kpadal option
-** always gets its full alignment, other options are limited by
+** always gets its full alignment, other options are limited by
** the maximum alignment ('maxalign'). Kchar option needs no alignment
** despite its size.
*/
diff --git a/libs/lua/lua-5.3.3/ltable.c b/libs/lua/lua-5.3.4/ltable.c
index 7e15b71bad..d080189f28 100644
--- a/libs/lua/lua-5.3.3/ltable.c
+++ b/libs/lua/lua-5.3.4/ltable.c
@@ -1,5 +1,5 @@
/*
-** $Id: ltable.c,v 2.117 2015/11/19 19:16:22 roberto Exp $
+** $Id: ltable.c,v 2.118 2016/11/07 12:38:35 roberto Exp $
** Lua tables (hash)
** See Copyright Notice in lua.h
*/
@@ -74,8 +74,6 @@
#define dummynode (&dummynode_)
-#define isdummy(n) ((n) == dummynode)
-
static const Node dummynode_ = {
{NILCONSTANT}, /* value */
{{NILCONSTANT, 0}} /* key */
@@ -308,14 +306,14 @@ static void setarrayvector (lua_State *L, Table *t, unsigned int size) {
static void setnodevector (lua_State *L, Table *t, unsigned int size) {
- int lsize;
if (size == 0) { /* no elements to hash part? */
t->node = cast(Node *, dummynode); /* use common 'dummynode' */
- lsize = 0;
+ t->lsizenode = 0;
+ t->lastfree = NULL; /* signal that it is using dummy node */
}
else {
int i;
- lsize = luaO_ceillog2(size);
+ int lsize = luaO_ceillog2(size);
if (lsize > MAXHBITS)
luaG_runerror(L, "table overflow");
size = twoto(lsize);
@@ -326,9 +324,9 @@ static void setnodevector (lua_State *L, Table *t, unsigned int size) {
setnilvalue(wgkey(n));
setnilvalue(gval(n));
}
+ t->lsizenode = cast_byte(lsize);
+ t->lastfree = gnode(t, size); /* all positions are free */
}
- t->lsizenode = cast_byte(lsize);
- t->lastfree = gnode(t, size); /* all positions are free */
}
@@ -337,7 +335,7 @@ void luaH_resize (lua_State *L, Table *t, unsigned int nasize,
unsigned int i;
int j;
unsigned int oldasize = t->sizearray;
- int oldhsize = t->lsizenode;
+ int oldhsize = allocsizenode(t);
Node *nold = t->node; /* save old hash ... */
if (nasize > oldasize) /* array part must grow? */
setarrayvector(L, t, nasize);
@@ -354,7 +352,7 @@ void luaH_resize (lua_State *L, Table *t, unsigned int nasize,
luaM_reallocvector(L, t->array, oldasize, nasize, TValue);
}
/* re-insert elements from hash part */
- for (j = twoto(oldhsize) - 1; j >= 0; j--) {
+ for (j = oldhsize - 1; j >= 0; j--) {
Node *old = nold + j;
if (!ttisnil(gval(old))) {
/* doesn't need barrier/invalidate cache, as entry was
@@ -362,13 +360,13 @@ void luaH_resize (lua_State *L, Table *t, unsigned int nasize,
setobjt2t(L, luaH_set(L, t, gkey(old)), gval(old));
}
}
- if (!isdummy(nold))
- luaM_freearray(L, nold, cast(size_t, twoto(oldhsize))); /* free old hash */
+ if (oldhsize > 0) /* not the dummy node? */
+ luaM_freearray(L, nold, cast(size_t, oldhsize)); /* free old hash */
}
void luaH_resizearray (lua_State *L, Table *t, unsigned int nasize) {
- int nsize = isdummy(t->node) ? 0 : sizenode(t);
+ int nsize = allocsizenode(t);
luaH_resize(L, t, nasize, nsize);
}
@@ -414,7 +412,7 @@ Table *luaH_new (lua_State *L) {
void luaH_free (lua_State *L, Table *t) {
- if (!isdummy(t->node))
+ if (!isdummy(t))
luaM_freearray(L, t->node, cast(size_t, sizenode(t)));
luaM_freearray(L, t->array, t->sizearray);
luaM_free(L, t);
@@ -422,10 +420,12 @@ void luaH_free (lua_State *L, Table *t) {
static Node *getfreepos (Table *t) {
- while (t->lastfree > t->node) {
- t->lastfree--;
- if (ttisnil(gkey(t->lastfree)))
- return t->lastfree;
+ if (!isdummy(t)) {
+ while (t->lastfree > t->node) {
+ t->lastfree--;
+ if (ttisnil(gkey(t->lastfree)))
+ return t->lastfree;
+ }
}
return NULL; /* could not find a free place */
}
@@ -445,7 +445,7 @@ TValue *luaH_newkey (lua_State *L, Table *t, const TValue *key) {
if (ttisnil(key)) luaG_runerror(L, "table index is nil");
else if (ttisfloat(key)) {
lua_Integer k;
- if (luaV_tointeger(key, &k, 0)) { /* index is int? */
+ if (luaV_tointeger(key, &k, 0)) { /* does index fit in an integer? */
setivalue(&aux, k);
key = &aux; /* insert it as an integer */
}
@@ -453,7 +453,7 @@ TValue *luaH_newkey (lua_State *L, Table *t, const TValue *key) {
luaG_runerror(L, "table index is NaN");
}
mp = mainposition(t, key);
- if (!ttisnil(gval(mp)) || isdummy(mp)) { /* main position is taken? */
+ if (!ttisnil(gval(mp)) || isdummy(t)) { /* main position is taken? */
Node *othern;
Node *f = getfreepos(t); /* get a free place */
if (f == NULL) { /* cannot find a free place? */
@@ -461,7 +461,7 @@ TValue *luaH_newkey (lua_State *L, Table *t, const TValue *key) {
/* whatever called 'newkey' takes care of TM cache */
return luaH_set(L, t, key); /* insert key into grown table */
}
- lua_assert(!isdummy(f));
+ lua_assert(!isdummy(t));
othern = mainposition(t, gkey(mp));
if (othern != mp) { /* is colliding node out of its main position? */
/* yes; move colliding node into free position */
@@ -651,7 +651,7 @@ int luaH_getn (Table *t) {
return i;
}
/* else must find a boundary in hash part */
- else if (isdummy(t->node)) /* hash part is empty? */
+ else if (isdummy(t)) /* hash part is empty? */
return j; /* that is easy... */
else return unbound_search(t, j);
}
@@ -664,6 +664,6 @@ Node *luaH_mainposition (const Table *t, const TValue *key) {
return mainposition(t, key);
}
-int luaH_isdummy (Node *n) { return isdummy(n); }
+int luaH_isdummy (const Table *t) { return isdummy(t); }
#endif
diff --git a/libs/lua/lua-5.3.3/ltable.h b/libs/lua/lua-5.3.4/ltable.h
index 213cc13987..6da9024fe1 100644
--- a/libs/lua/lua-5.3.3/ltable.h
+++ b/libs/lua/lua-5.3.4/ltable.h
@@ -1,5 +1,5 @@
/*
-** $Id: ltable.h,v 2.21 2015/11/03 15:47:30 roberto Exp $
+** $Id: ltable.h,v 2.23 2016/12/22 13:08:50 roberto Exp $
** Lua tables (hash)
** See Copyright Notice in lua.h
*/
@@ -15,7 +15,7 @@
#define gnext(n) ((n)->i_key.nk.next)
-/* 'const' to avoid wrong writings that can mess up field 'next' */
+/* 'const' to avoid wrong writings that can mess up field 'next' */
#define gkey(n) cast(const TValue*, (&(n)->i_key.tvk))
/*
@@ -27,6 +27,14 @@
#define invalidateTMcache(t) ((t)->flags = 0)
+/* true when 't' is using 'dummynode' as its hash part */
+#define isdummy(t) ((t)->lastfree == NULL)
+
+
+/* allocated size for hash nodes */
+#define allocsizenode(t) (isdummy(t) ? 0 : sizenode(t))
+
+
/* returns the key, given the value of a table entry */
#define keyfromval(v) \
(gkey(cast(Node *, cast(char *, (v)) - offsetof(Node, i_val))))
@@ -51,7 +59,7 @@ LUAI_FUNC int luaH_getn (Table *t);
#if defined(LUA_DEBUG)
LUAI_FUNC Node *luaH_mainposition (const Table *t, const TValue *key);
-LUAI_FUNC int luaH_isdummy (Node *n);
+LUAI_FUNC int luaH_isdummy (const Table *t);
#endif
diff --git a/libs/lua/lua-5.3.3/ltablib.c b/libs/lua/lua-5.3.4/ltablib.c
index 98b2f87137..98b2f87137 100644
--- a/libs/lua/lua-5.3.3/ltablib.c
+++ b/libs/lua/lua-5.3.4/ltablib.c
diff --git a/libs/lua/lua-5.3.3/ltm.c b/libs/lua/lua-5.3.4/ltm.c
index 4650cc2931..14e5257888 100644
--- a/libs/lua/lua-5.3.3/ltm.c
+++ b/libs/lua/lua-5.3.4/ltm.c
@@ -1,5 +1,5 @@
/*
-** $Id: ltm.c,v 2.37 2016/02/26 19:20:15 roberto Exp $
+** $Id: ltm.c,v 2.38 2016/12/22 13:08:50 roberto Exp $
** Tag methods
** See Copyright Notice in lua.h
*/
@@ -15,7 +15,7 @@
#include "lua.h"
#include "ldebug.h"
-#include "ldo.h"
+#include "ldo.h"
#include "lobject.h"
#include "lstate.h"
#include "lstring.h"
diff --git a/libs/lua/lua-5.3.3/ltm.h b/libs/lua/lua-5.3.4/ltm.h
index 63db7269bb..63db7269bb 100644
--- a/libs/lua/lua-5.3.3/ltm.h
+++ b/libs/lua/lua-5.3.4/ltm.h
diff --git a/libs/lua/lua-5.3.3/lua.c b/libs/lua/lua-5.3.4/lua.c
index 545d23d49b..3f082da6be 100644
--- a/libs/lua/lua-5.3.3/lua.c
+++ b/libs/lua/lua-5.3.4/lua.c
@@ -1,5 +1,5 @@
/*
-** $Id: lua.c,v 1.226 2015/08/14 19:11:20 roberto Exp $
+** $Id: lua.c,v 1.230 2017/01/12 17:14:26 roberto Exp $
** Lua stand-alone interpreter
** See Copyright Notice in lua.h
*/
@@ -20,6 +20,7 @@
#include "lualib.h"
+
#if !defined(LUA_PROMPT)
#define LUA_PROMPT "> "
#define LUA_PROMPT2 ">> "
@@ -37,8 +38,7 @@
#define LUA_INIT_VAR "LUA_INIT"
#endif
-#define LUA_INITVARVERSION \
- LUA_INIT_VAR "_" LUA_VERSION_MAJOR "_" LUA_VERSION_MINOR
+#define LUA_INITVARVERSION LUA_INIT_VAR LUA_VERSUFFIX
/*
@@ -55,6 +55,8 @@
#elif defined(LUA_USE_WINDOWS) /* }{ */
#include <io.h>
+#include <windows.h>
+
#define lua_stdin_is_tty() _isatty(_fileno(stdin))
#else /* }{ */
@@ -457,7 +459,7 @@ static int handle_script (lua_State *L, char **argv) {
/*
** Traverses all arguments from 'argv', returning a mask with those
** needed before running any Lua code (or an error code if it finds
-** any invalid argument). 'first' returns the first not-handled argument
+** any invalid argument). 'first' returns the first not-handled argument
** (either the script name or a bad argument in case of error).
*/
static int collectargs (char **argv, int *first) {
@@ -481,7 +483,7 @@ static int collectargs (char **argv, int *first) {
args |= has_E;
break;
case 'i':
- args |= has_i; /* (-i implies -v) *//* FALLTHROUGH */
+ args |= has_i; /* (-i implies -v) *//* FALLTHROUGH */
case 'v':
if (argv[i][2] != '\0') /* extra characters after 1st? */
return has_error; /* invalid option */
@@ -529,6 +531,7 @@ static int runargs (lua_State *L, char **argv, int n) {
}
+
static int handle_luainit (lua_State *L) {
const char *name = "=" LUA_INITVARVERSION;
const char *init = getenv(name + 1);
diff --git a/libs/lua/lua-5.3.3/lua.h b/libs/lua/lua-5.3.4/lua.h
index f78899fc55..26c0e2d698 100644
--- a/libs/lua/lua-5.3.3/lua.h
+++ b/libs/lua/lua-5.3.4/lua.h
@@ -1,5 +1,5 @@
/*
-** $Id: lua.h,v 1.331 2016/05/30 15:53:28 roberto Exp $
+** $Id: lua.h,v 1.332 2016/12/22 15:51:20 roberto Exp $
** Lua - A Scripting Language
** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
** See Copyright Notice at the end of this file
@@ -19,11 +19,11 @@
#define LUA_VERSION_MAJOR "5"
#define LUA_VERSION_MINOR "3"
#define LUA_VERSION_NUM 503
-#define LUA_VERSION_RELEASE "3"
+#define LUA_VERSION_RELEASE "4"
#define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
#define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE
-#define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2016 Lua.org, PUC-Rio"
+#define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2017 Lua.org, PUC-Rio"
#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes"
@@ -460,7 +460,7 @@ struct lua_Debug {
/******************************************************************************
-* Copyright (C) 1994-2016 Lua.org, PUC-Rio.
+* Copyright (C) 1994-2017 Lua.org, PUC-Rio.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
diff --git a/libs/lua/lua-5.3.3/lua.hpp b/libs/lua/lua-5.3.4/lua.hpp
index ec417f5946..ec417f5946 100644
--- a/libs/lua/lua-5.3.3/lua.hpp
+++ b/libs/lua/lua-5.3.4/lua.hpp
diff --git a/libs/lua/lua-5.3.3/luac.c b/libs/lua/lua-5.3.4/luac.c
index c0c91d017a..c0c91d017a 100644
--- a/libs/lua/lua-5.3.3/luac.c
+++ b/libs/lua/lua-5.3.4/luac.c
diff --git a/libs/lua/lua-5.3.3/luaconf.h b/libs/lua/lua-5.3.4/luaconf.h
index fd447ccb93..f37bea0964 100644
--- a/libs/lua/lua-5.3.3/luaconf.h
+++ b/libs/lua/lua-5.3.4/luaconf.h
@@ -1,5 +1,5 @@
/*
-** $Id: luaconf.h,v 1.255 2016/05/01 20:06:09 roberto Exp $
+** $Id: luaconf.h,v 1.259 2016/12/22 13:08:50 roberto Exp $
** Configuration file for Lua
** See Copyright Notice in lua.h
*/
@@ -159,6 +159,18 @@
*/
/*
+** LUA_PATH_SEP is the character that separates templates in a path.
+** LUA_PATH_MARK is the string that marks the substitution points in a
+** template.
+** LUA_EXEC_DIR in a Windows path is replaced by the executable's
+** directory.
+*/
+#define LUA_PATH_SEP ";"
+#define LUA_PATH_MARK "?"
+#define LUA_EXEC_DIR "!"
+
+
+/*
@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for
** Lua libraries.
@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for
@@ -404,7 +416,7 @@
/*
@@ LUA_NUMBER is the floating-point type used by Lua.
-@@ LUAI_UACNUMBER is the result of an 'usual argument conversion'
+@@ LUAI_UACNUMBER is the result of a 'default argument promotion'
@@ over a floating number.
@@ l_mathlim(x) corrects limit name 'x' to the proper float type
** by prefixing it with one of FLT/DBL/LDBL.
@@ -421,7 +433,8 @@
#define l_floor(x) (l_mathop(floor)(x))
-#define lua_number2str(s,sz,n) l_sprintf((s), sz, LUA_NUMBER_FMT, (n))
+#define lua_number2str(s,sz,n) \
+ l_sprintf((s), sz, LUA_NUMBER_FMT, (LUAI_UACNUMBER)(n))
/*
@@ lua_numbertointeger converts a float number to an integer, or
@@ -498,7 +511,7 @@
**
@@ LUA_UNSIGNED is the unsigned version of LUA_INTEGER.
**
-@@ LUAI_UACINT is the result of an 'usual argument conversion'
+@@ LUAI_UACINT is the result of a 'default argument promotion'
@@ over a lUA_INTEGER.
@@ LUA_INTEGER_FRMLEN is the length modifier for reading/writing integers.
@@ LUA_INTEGER_FMT is the format for writing integers.
@@ -511,10 +524,12 @@
/* The following definitions are good for most cases here */
#define LUA_INTEGER_FMT "%" LUA_INTEGER_FRMLEN "d"
-#define lua_integer2str(s,sz,n) l_sprintf((s), sz, LUA_INTEGER_FMT, (n))
#define LUAI_UACINT LUA_INTEGER
+#define lua_integer2str(s,sz,n) \
+ l_sprintf((s), sz, LUA_INTEGER_FMT, (LUAI_UACINT)(n))
+
/*
** use LUAI_UACINT here to avoid problems with promotions (which
** can turn a comparison between unsigneds into a signed comparison)
@@ -606,13 +621,14 @@
/*
-@@ lua_number2strx converts a float to an hexadecimal numeric string.
+@@ lua_number2strx converts a float to an hexadecimal numeric string.
** In C99, 'sprintf' (with format specifiers '%a'/'%A') does that.
** Otherwise, you can leave 'lua_number2strx' undefined and Lua will
** provide its own implementation.
*/
#if !defined(LUA_USE_C89)
-#define lua_number2strx(L,b,sz,f,n) ((void)L, l_sprintf(b,sz,f,n))
+#define lua_number2strx(L,b,sz,f,n) \
+ ((void)L, l_sprintf(b,sz,f,(LUAI_UACNUMBER)(n)))
#endif
@@ -728,11 +744,11 @@
/*
@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system.
** CHANGE it if it uses too much C-stack space. (For long double,
-** 'string.format("%.99f", 1e4932)' needs ~5030 bytes, so a
+** 'string.format("%.99f", -1e4932)' needs 5034 bytes, so a
** smaller buffer would force a memory allocation for each call to
** 'string.format'.)
*/
-#if defined(LUA_FLOAT_LONGDOUBLE)
+#if LUA_FLOAT_TYPE == LUA_FLOAT_LONGDOUBLE
#define LUAL_BUFFERSIZE 8192
#else
#define LUAL_BUFFERSIZE ((int)(0x80 * sizeof(void*) * sizeof(lua_Integer)))
diff --git a/libs/lua/lua-5.3.3/lualib.h b/libs/lua/lua-5.3.4/lualib.h
index 5165c0fb3f..6c0bc4cb08 100644
--- a/libs/lua/lua-5.3.3/lualib.h
+++ b/libs/lua/lua-5.3.4/lualib.h
@@ -1,5 +1,5 @@
/*
-** $Id: lualib.h,v 1.44 2014/02/06 17:32:33 roberto Exp $
+** $Id: lualib.h,v 1.45 2017/01/12 17:14:26 roberto Exp $
** Lua standard libraries
** See Copyright Notice in lua.h
*/
@@ -11,6 +11,9 @@
#include "lua.h"
+/* version suffix for environment variable names */
+#define LUA_VERSUFFIX "_" LUA_VERSION_MAJOR "_" LUA_VERSION_MINOR
+
LUAMOD_API int (luaopen_base) (lua_State *L);
diff --git a/libs/lua/lua-5.3.3/lundump.c b/libs/lua/lua-5.3.4/lundump.c
index 4080af9c0d..4080af9c0d 100644
--- a/libs/lua/lua-5.3.3/lundump.c
+++ b/libs/lua/lua-5.3.4/lundump.c
diff --git a/libs/lua/lua-5.3.3/lundump.h b/libs/lua/lua-5.3.4/lundump.h
index aa5cc82f1b..aa5cc82f1b 100644
--- a/libs/lua/lua-5.3.3/lundump.h
+++ b/libs/lua/lua-5.3.4/lundump.h
diff --git a/libs/lua/lua-5.3.3/lutf8lib.c b/libs/lua/lua-5.3.4/lutf8lib.c
index 9042582d1e..de9e3dcdd6 100644
--- a/libs/lua/lua-5.3.3/lutf8lib.c
+++ b/libs/lua/lua-5.3.4/lutf8lib.c
@@ -1,5 +1,5 @@
/*
-** $Id: lutf8lib.c,v 1.15 2015/03/28 19:16:55 roberto Exp $
+** $Id: lutf8lib.c,v 1.16 2016/12/22 13:08:50 roberto Exp $
** Standard library for UTF-8 manipulation
** See Copyright Notice in lua.h
*/
@@ -194,7 +194,7 @@ static int byteoffset (lua_State *L) {
lua_pushinteger(L, posi + 1);
else /* no such character */
lua_pushnil(L);
- return 1;
+ return 1;
}
diff --git a/libs/lua/lua-5.3.3/lvm.c b/libs/lua/lua-5.3.4/lvm.c
index 84ade6b2fa..84ade6b2fa 100644
--- a/libs/lua/lua-5.3.3/lvm.c
+++ b/libs/lua/lua-5.3.4/lvm.c
diff --git a/libs/lua/lua-5.3.3/lvm.h b/libs/lua/lua-5.3.4/lvm.h
index bcf52d20a1..422f871949 100644
--- a/libs/lua/lua-5.3.3/lvm.h
+++ b/libs/lua/lua-5.3.4/lvm.h
@@ -1,5 +1,5 @@
/*
-** $Id: lvm.h,v 2.40 2016/01/05 16:07:21 roberto Exp $
+** $Id: lvm.h,v 2.41 2016/12/22 13:08:50 roberto Exp $
** Lua virtual machine
** See Copyright Notice in lua.h
*/
@@ -90,7 +90,7 @@
#define luaV_settable(L,t,k,v) { const TValue *slot; \
if (!luaV_fastset(L,t,k,slot,luaH_get,v)) \
luaV_finishset(L,t,k,v,slot); }
-
+
LUAI_FUNC int luaV_equalobj (lua_State *L, const TValue *t1, const TValue *t2);
diff --git a/libs/lua/lua-5.3.3/lzio.c b/libs/lua/lua-5.3.4/lzio.c
index c9e1f491f3..c9e1f491f3 100644
--- a/libs/lua/lua-5.3.3/lzio.c
+++ b/libs/lua/lua-5.3.4/lzio.c
diff --git a/libs/lua/lua-5.3.3/lzio.h b/libs/lua/lua-5.3.4/lzio.h
index e7b6f34b1e..e7b6f34b1e 100644
--- a/libs/lua/lua-5.3.3/lzio.h
+++ b/libs/lua/lua-5.3.4/lzio.h
diff --git a/libs/lua/lua.cc b/libs/lua/lua.cc
index 7eed622f9b..947086a6b4 100644
--- a/libs/lua/lua.cc
+++ b/libs/lua/lua.cc
@@ -39,7 +39,7 @@ extern "C"
#define lvm_c
#define LUA_CORE
#define LUA_LIB
-#include "lua-5.3.3/luaconf.h"
+#include "lua-5.3.4/luaconf.h"
#undef lobject_c
#undef lvm_c
#undef LUA_CORE
@@ -68,43 +68,43 @@ extern "C"
#pragma warning (disable: 4702) /* Unreachable code */
#endif
-#include "lua-5.3.3/ltable.c"
-
-#include "lua-5.3.3/lauxlib.c"
-#include "lua-5.3.3/lbaselib.c"
-
-#include "lua-5.3.3/lbitlib.c"
-#include "lua-5.3.3/lcorolib.c"
-#include "lua-5.3.3/ldblib.c"
-#include "lua-5.3.3/linit.c"
-#include "lua-5.3.3/liolib.c"
-#include "lua-5.3.3/lmathlib.c"
-#include "lua-5.3.3/loslib.c"
-#include "lua-5.3.3/lstrlib.c"
-#include "lua-5.3.3/ltablib.c"
-
-#include "lua-5.3.3/lapi.c"
-#include "lua-5.3.3/lcode.c"
-#include "lua-5.3.3/lctype.c"
-#include "lua-5.3.3/ldebug.c"
-#include "lua-5.3.3/ldo.c"
-#include "lua-5.3.3/ldump.c"
-#include "lua-5.3.3/lfunc.c"
-#include "lua-5.3.3/lgc.c"
-#include "lua-5.3.3/llex.c"
-#include "lua-5.3.3/lmem.c"
-#include "lua-5.3.3/lobject.c"
-#include "lua-5.3.3/lopcodes.c"
-#include "lua-5.3.3/lparser.c"
-#include "lua-5.3.3/lstate.c"
-#include "lua-5.3.3/lstring.c"
-#include "lua-5.3.3/ltm.c"
-#include "lua-5.3.3/lundump.c"
-#include "lua-5.3.3/lutf8lib.c"
-#include "lua-5.3.3/lvm.c"
-#include "lua-5.3.3/lzio.c"
-
-#include "lua-5.3.3/loadlib.c"
+#include "lua-5.3.4/ltable.c"
+
+#include "lua-5.3.4/lauxlib.c"
+#include "lua-5.3.4/lbaselib.c"
+
+#include "lua-5.3.4/lbitlib.c"
+#include "lua-5.3.4/lcorolib.c"
+#include "lua-5.3.4/ldblib.c"
+#include "lua-5.3.4/linit.c"
+#include "lua-5.3.4/liolib.c"
+#include "lua-5.3.4/lmathlib.c"
+#include "lua-5.3.4/loslib.c"
+#include "lua-5.3.4/lstrlib.c"
+#include "lua-5.3.4/ltablib.c"
+
+#include "lua-5.3.4/lapi.c"
+#include "lua-5.3.4/lcode.c"
+#include "lua-5.3.4/lctype.c"
+#include "lua-5.3.4/ldebug.c"
+#include "lua-5.3.4/ldo.c"
+#include "lua-5.3.4/ldump.c"
+#include "lua-5.3.4/lfunc.c"
+#include "lua-5.3.4/lgc.c"
+#include "lua-5.3.4/llex.c"
+#include "lua-5.3.4/lmem.c"
+#include "lua-5.3.4/lobject.c"
+#include "lua-5.3.4/lopcodes.c"
+#include "lua-5.3.4/lparser.c"
+#include "lua-5.3.4/lstate.c"
+#include "lua-5.3.4/lstring.c"
+#include "lua-5.3.4/ltm.c"
+#include "lua-5.3.4/lundump.c"
+#include "lua-5.3.4/lutf8lib.c"
+#include "lua-5.3.4/lvm.c"
+#include "lua-5.3.4/lzio.c"
+
+#include "lua-5.3.4/loadlib.c"
#if _MSC_VER
#pragma warning (pop)
diff --git a/libs/lua/lua/lua.h b/libs/lua/lua/lua.h
index 3e9a88551e..95af32019d 100644
--- a/libs/lua/lua/lua.h
+++ b/libs/lua/lua/lua.h
@@ -1,6 +1,6 @@
#ifndef LUA_LIBRARY_H
#define LUA_LIBRARY_H
-#include "lua-5.3.3/lua.hpp"
+#include "lua-5.3.4/lua.hpp"
#endif
diff --git a/libs/lua/wscript b/libs/lua/wscript
index 6598e5a230..b67820f3cc 100644
--- a/libs/lua/wscript
+++ b/libs/lua/wscript
@@ -6,7 +6,7 @@ import sys
# Variables for 'waf dist'
APPNAME = 'liblua'
-VERSION = "3.5.1"
+VERSION = "5.3.4"
I18N_PACKAGE = 'liblua'
# Mandatory variables