Imported Upstream version 5.2.3 58/94758/1
authorDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 1 Nov 2016 05:26:53 +0000 (14:26 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 1 Nov 2016 05:26:54 +0000 (14:26 +0900)
Change-Id: I429a8c91e4847cbfedb9a4bc9c6eff134f4119f4
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
64 files changed:
Makefile
README
doc/lua.css
doc/manual.css
doc/readme.html
src/Makefile
src/lapi.c
src/lapi.h
src/lauxlib.c
src/lauxlib.h
src/lbaselib.c
src/lbitlib.c
src/lcode.c
src/lcode.h
src/lcorolib.c
src/lctype.c
src/lctype.h
src/ldblib.c
src/ldebug.c
src/ldebug.h
src/ldo.c
src/ldo.h
src/ldump.c
src/lfunc.c
src/lfunc.h
src/lgc.c
src/lgc.h
src/linit.c
src/liolib.c
src/llex.c
src/llex.h
src/llimits.h
src/lmathlib.c
src/lmem.c
src/lmem.h
src/loadlib.c
src/lobject.c
src/lobject.h
src/lopcodes.c
src/lopcodes.h
src/loslib.c
src/lparser.c
src/lparser.h
src/lstate.c
src/lstate.h
src/lstring.c
src/lstring.h
src/lstrlib.c
src/ltable.c
src/ltable.h
src/ltablib.c
src/ltm.c
src/ltm.h
src/lua.c
src/lua.h
src/luac.c
src/luaconf.h
src/lualib.h
src/lundump.c
src/lundump.h
src/lvm.c
src/lvm.h
src/lzio.c
src/lzio.h

index bd9515f..d2c7db4 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -46,7 +46,7 @@ TO_MAN= lua.1 luac.1
 
 # Lua version and release.
 V= 5.2
-R= $V.1
+R= $V.3
 
 # Targets start here.
 all:   $(PLAT)
diff --git a/README b/README
index 6e2aee6..49033ad 100644 (file)
--- a/README
+++ b/README
@@ -1,5 +1,5 @@
 
-This is Lua 5.2.2, released on 21 Mar 2013.
+This is Lua 5.2.3, released on 11 Nov 2013.
 
 For installation instructions, license details, and
 further information about Lua, see doc/readme.html.
index 240e85e..3d2443a 100644 (file)
@@ -1,30 +1,37 @@
+html {
+       background-color: #F8F8F8 ;
+}
+
 body {
+       border: solid #a0a0a0 1px ;
+       border-radius: 20px ;
+       padding: 26px ;
+       margin: 16px ;
        color: #000000 ;
        background-color: #FFFFFF ;
        font-family: Helvetica, Arial, sans-serif ;
        text-align: justify ;
-       margin-right: 30px ;
-       margin-left: 30px ;
 }
 
 h1, h2, h3, h4 {
        font-family: Verdana, Geneva, sans-serif ;
        font-weight: normal ;
-       font-style: italic ;
+       font-style: normal ;
 }
 
 h2 {
        padding-top: 0.4em ;
        padding-bottom: 0.4em ;
-       padding-left: 1em ;
-       padding-right: 1em ;
-       background-color: #E0E0FF ;
+       padding-left: 0.8em ;
+       padding-right: 0.8em ;
+       background-color: #D0D0FF ;
        border-radius: 8px ;
+       border: solid #a0a0a0 1px ;
 }
 
 h3 {
        padding-left: 0.5em ;
-       border-left: solid #E0E0FF 1em ;
+       border-left: solid #D0D0FF 1em ;
 }
 
 table h3 {
@@ -45,7 +52,7 @@ a:visited {
 
 a:link:hover, a:visited:hover {
        color: #000080 ;
-       background-color: #E0E0FF ;
+       background-color: #D0D0FF ;
 }
 
 a:link:active, a:visited:active {
@@ -57,17 +64,23 @@ hr {
        height: 1px ;
        color: #a0a0a0 ;
        background-color: #a0a0a0 ;
+       display: none ;
+}
+
+table hr {
+       display: block ;
 }
 
 :target {
        background-color: #F8F8F8 ;
        padding: 8px ;
        border: solid #a0a0a0 2px ;
+       border-radius: 8px ;
 }
 
 .footer {
        color: gray ;
-       font-size: small ;
+       font-size: x-small ;
 }
 
 input[type=text] {
index 269bd43..ca613cd 100644 (file)
@@ -16,11 +16,12 @@ span.apii {
 }
 
 p+h1, ul+h1 {
+       font-style: normal ;
        padding-top: 0.4em ;
        padding-bottom: 0.4em ;
-       padding-left: 24px ;
-       margin-left: -24px ;
-       background-color: #E0E0FF ;
+       padding-left: 16px ;
+       margin-left: -16px ;
+       background-color: #D0D0FF ;
        border-radius: 8px ;
+       border: solid #000080 1px ;
 }
-
index 5b9e47e..8acec87 100644 (file)
@@ -7,6 +7,7 @@
 <STYLE TYPE="text/css">
 blockquote, .display {
        border: solid #a0a0a0 2px ;
+       border-radius: 8px ;
        padding: 1em ;
        margin: 0px ;
 }
@@ -109,7 +110,7 @@ Here are the details.
 <OL>
 <LI>
 Open a terminal window and move to
-the top-level directory, which is named <TT>lua-5.2.2</TT>.
+the top-level directory, which is named <TT>lua-5.2.3</TT>.
 The Makefile there controls both the build process and the installation process.
 <P>
 <LI>
@@ -402,10 +403,10 @@ THE SOFTWARE.
 <HR>
 <SMALL CLASS="footer">
 Last update:
-Fri Feb 22 09:24:20 BRT 2013
+Sat Nov  9 22:39:16 BRST 2013
 </SMALL>
 <!--
-Last change: revised for Lua 5.2.2
+Last change: revised for Lua 5.2.3
 -->
 
 </BODY>
index fea895b..7b4b2b7 100644 (file)
@@ -106,7 +106,7 @@ linux:
        $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline"
 
 macosx:
-       $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_MACOSX" SYSLIBS="-lreadline"
+       $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_MACOSX" SYSLIBS="-lreadline" CC=cc
 
 mingw:
        $(MAKE) "LUA_A=lua52.dll" "LUA_T=lua.exe" \
index 791d854..d011431 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lapi.c,v 2.171 2013/03/16 21:10:18 roberto Exp $
+** $Id: lapi.c,v 2.171.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Lua API
 ** See Copyright Notice in lua.h
 */
index 0909a39..c7d34ad 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lapi.h,v 2.7 2009/11/27 15:37:59 roberto Exp $
+** $Id: lapi.h,v 2.7.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Auxiliary functions from Lua API
 ** See Copyright Notice in lua.h
 */
index 2e989d6..b00f8c7 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lauxlib.c,v 1.248 2013/03/21 13:54:57 roberto Exp $
+** $Id: lauxlib.c,v 1.248.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Auxiliary functions for building Lua libraries
 ** See Copyright Notice in lua.h
 */
index ac4d15f..0fb023b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lauxlib.h,v 1.120 2011/11/29 15:55:08 roberto Exp $
+** $Id: lauxlib.h,v 1.120.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Auxiliary functions for building Lua libraries
 ** See Copyright Notice in lua.h
 */
index 540e9a5..5255b3c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lbaselib.c,v 1.276 2013/02/21 13:44:53 roberto Exp $
+** $Id: lbaselib.c,v 1.276.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Basic library
 ** See Copyright Notice in lua.h
 */
index 9637532..31c7b66 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lbitlib.c,v 1.18 2013/03/19 13:19:12 roberto Exp $
+** $Id: lbitlib.c,v 1.18.1.2 2013/07/09 18:01:41 roberto Exp $
 ** Standard library for bitwise operations
 ** See Copyright Notice in lua.h
 */
@@ -129,7 +129,8 @@ static int b_rot (lua_State *L, int i) {
   b_uint r = luaL_checkunsigned(L, 1);
   i &= (LUA_NBITS - 1);  /* i = i % NBITS */
   r = trim(r);
-  r = (r << i) | (r >> (LUA_NBITS - i));
+  if (i != 0)  /* avoid undefined shift of LUA_NBITS when i == 0 */
+    r = (r << i) | (r >> (LUA_NBITS - i));
   lua_pushunsigned(L, trim(r));
   return 1;
 }
index 56c26ac..820b95c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lcode.c,v 2.62 2012/08/16 17:34:28 roberto Exp $
+** $Id: lcode.c,v 2.62.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Code generator for Lua
 ** See Copyright Notice in lua.h
 */
index 5a1fa9f..6a1424c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lcode.h,v 1.58 2011/08/30 16:26:41 roberto Exp $
+** $Id: lcode.h,v 1.58.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Code generator for Lua
 ** See Copyright Notice in lua.h
 */
index 1326c81..ce4f6ad 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lcorolib.c,v 1.5 2013/02/21 13:44:53 roberto Exp $
+** $Id: lcorolib.c,v 1.5.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Coroutine Library
 ** See Copyright Notice in lua.h
 */
index 55e433a..93f8cad 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lctype.c,v 1.11 2011/10/03 16:19:23 roberto Exp $
+** $Id: lctype.c,v 1.11.1.1 2013/04/12 18:48:47 roberto Exp $
 ** 'ctype' functions for Lua
 ** See Copyright Notice in lua.h
 */
index 99c7d12..b09b21a 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lctype.h,v 1.12 2011/07/15 12:50:29 roberto Exp $
+** $Id: lctype.h,v 1.12.1.1 2013/04/12 18:48:47 roberto Exp $
 ** 'ctype' functions for Lua
 ** See Copyright Notice in lua.h
 */
index c022694..84fe3c7 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: ldblib.c,v 1.132 2012/01/19 20:14:44 roberto Exp $
+** $Id: ldblib.c,v 1.132.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Interface from Lua to its debug API
 ** See Copyright Notice in lua.h
 */
index 7e04f9d..20d663e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: ldebug.c,v 2.90 2012/08/16 17:34:28 roberto Exp $
+** $Id: ldebug.c,v 2.90.1.3 2013/05/16 16:04:15 roberto Exp $
 ** Debug Interface
 ** See Copyright Notice in lua.h
 */
@@ -327,12 +327,20 @@ static void kname (Proto *p, int pc, int c, const char **name) {
 }
 
 
+static int filterpc (int pc, int jmptarget) {
+  if (pc < jmptarget)  /* is code conditional (inside a jump)? */
+    return -1;  /* cannot know who sets that register */
+  else return pc;  /* current position sets that register */
+}
+
+
 /*
 ** try to find last instruction before 'lastpc' that modified register 'reg'
 */
 static int findsetreg (Proto *p, int lastpc, int reg) {
   int pc;
   int setreg = -1;  /* keep last instruction that changed 'reg' */
+  int jmptarget = 0;  /* any code before this address is conditional */
   for (pc = 0; pc < lastpc; pc++) {
     Instruction i = p->code[pc];
     OpCode op = GET_OPCODE(i);
@@ -341,33 +349,38 @@ static int findsetreg (Proto *p, int lastpc, int reg) {
       case OP_LOADNIL: {
         int b = GETARG_B(i);
         if (a <= reg && reg <= a + b)  /* set registers from 'a' to 'a+b' */
-          setreg = pc;
+          setreg = filterpc(pc, jmptarget);
         break;
       }
       case OP_TFORCALL: {
-        if (reg >= a + 2) setreg = pc;  /* affect all regs above its base */
+        if (reg >= a + 2)  /* affect all regs above its base */
+          setreg = filterpc(pc, jmptarget);
         break;
       }
       case OP_CALL:
       case OP_TAILCALL: {
-        if (reg >= a) setreg = pc;  /* affect all registers above base */
+        if (reg >= a)  /* affect all registers above base */
+          setreg = filterpc(pc, jmptarget);
         break;
       }
       case OP_JMP: {
         int b = GETARG_sBx(i);
         int dest = pc + 1 + b;
         /* jump is forward and do not skip `lastpc'? */
-        if (pc < dest && dest <= lastpc)
-          pc += b;  /* do the jump */
+        if (pc < dest && dest <= lastpc) {
+          if (dest > jmptarget)
+            jmptarget = dest;  /* update 'jmptarget' */
+        }
         break;
       }
       case OP_TEST: {
-        if (reg == a) setreg = pc;  /* jumped code can change 'a' */
+        if (reg == a)  /* jumped code can change 'a' */
+          setreg = filterpc(pc, jmptarget);
         break;
       }
       default:
         if (testAMode(op) && reg == a)  /* any instruction that set A */
-          setreg = pc;
+          setreg = filterpc(pc, jmptarget);
         break;
     }
   }
@@ -518,7 +531,7 @@ l_noret luaG_typeerror (lua_State *L, const TValue *o, const char *op) {
 
 l_noret luaG_concaterror (lua_State *L, StkId p1, StkId p2) {
   if (ttisstring(p1) || ttisnumber(p1)) p1 = p2;
-  lua_assert(!ttisstring(p1) && !ttisnumber(p2));
+  lua_assert(!ttisstring(p1) && !ttisnumber(p1));
   luaG_typeerror(L, p1, "concatenate");
 }
 
index fe39556..6445c76 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: ldebug.h,v 2.7 2011/10/07 20:45:19 roberto Exp $
+** $Id: ldebug.h,v 2.7.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Auxiliary functions from Debug Interface module
 ** See Copyright Notice in lua.h
 */
index aafa3dc..e9dd5fa 100644 (file)
--- a/src/ldo.c
+++ b/src/ldo.c
@@ -1,5 +1,5 @@
 /*
-** $Id: ldo.c,v 2.108 2012/10/01 14:05:04 roberto Exp $
+** $Id: ldo.c,v 2.108.1.3 2013/11/08 18:22:50 roberto Exp $
 ** Stack and Call structure of Lua
 ** See Copyright Notice in lua.h
 */
@@ -260,6 +260,7 @@ static StkId adjust_varargs (lua_State *L, Proto *p, int actual) {
   StkId base, fixed;
   lua_assert(actual >= nfixargs);
   /* move fixed parameters to final position */
+  luaD_checkstack(L, p->maxstacksize);  /* check again for new 'base' */
   fixed = L->top - actual;  /* first fixed argument */
   base = L->top;  /* final position of first argument */
   for (i=0; i<nfixargs; i++) {
@@ -324,12 +325,18 @@ int luaD_precall (lua_State *L, StkId func, int nresults) {
     case LUA_TLCL: {  /* Lua function: prepare its call */
       StkId base;
       Proto *p = clLvalue(func)->p;
-      luaD_checkstack(L, p->maxstacksize);
-      func = restorestack(L, funcr);
       n = cast_int(L->top - func) - 1;  /* number of real arguments */
+      luaD_checkstack(L, p->maxstacksize);
       for (; n < p->numparams; n++)
         setnilvalue(L->top++);  /* complete missing arguments */
-      base = (!p->is_vararg) ? func + 1 : adjust_varargs(L, p, n);
+      if (!p->is_vararg) {
+        func = restorestack(L, funcr);
+        base = func + 1;
+      }
+      else {
+        base = adjust_varargs(L, p, n);
+        func = restorestack(L, funcr);  /* previous call can change stack */
+      }
       ci = next_ci(L);  /* now 'enter' new function */
       ci->nresults = nresults;
       ci->func = func;
@@ -527,6 +534,7 @@ static void resume (lua_State *L, void *ud) {
 
 LUA_API int lua_resume (lua_State *L, lua_State *from, int nargs) {
   int status;
+  int oldnny = L->nny;  /* save 'nny' */
   lua_lock(L);
   luai_userstateresume(L, nargs);
   L->nCcalls = (from) ? from->nCcalls + 1 : 1;
@@ -548,7 +556,7 @@ LUA_API int lua_resume (lua_State *L, lua_State *from, int nargs) {
     }
     lua_assert(status == L->status);
   }
-  L->nny = 1;  /* do not allow yields */
+  L->nny = oldnny;  /* restore 'nny' */
   L->nCcalls--;
   lua_assert(L->nCcalls == ((from) ? from->nCcalls : 0));
   lua_unlock(L);
index 27b837d..d3d3082 100644 (file)
--- a/src/ldo.h
+++ b/src/ldo.h
@@ -1,5 +1,5 @@
 /*
-** $Id: ldo.h,v 2.20 2011/11/29 15:55:08 roberto Exp $
+** $Id: ldo.h,v 2.20.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Stack and Call structure of Lua
 ** See Copyright Notice in lua.h
 */
index d5e6a47..61fa2cd 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: ldump.c,v 2.17 2012/01/23 23:02:10 roberto Exp $
+** $Id: ldump.c,v 2.17.1.1 2013/04/12 18:48:47 roberto Exp $
 ** save precompiled Lua chunks
 ** See Copyright Notice in lua.h
 */
index c212840..e90e152 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lfunc.c,v 2.30 2012/10/03 12:36:46 roberto Exp $
+** $Id: lfunc.c,v 2.30.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Auxiliary functions to manipulate prototypes and closures
 ** See Copyright Notice in lua.h
 */
index e236a71..ca0d3a3 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lfunc.h,v 2.8 2012/05/08 13:53:33 roberto Exp $
+** $Id: lfunc.h,v 2.8.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Auxiliary functions to manipulate prototypes and closures
 ** See Copyright Notice in lua.h
 */
index 535e988..52460dc 100644 (file)
--- a/src/lgc.c
+++ b/src/lgc.c
@@ -1,5 +1,5 @@
 /*
-** $Id: lgc.c,v 2.140 2013/03/16 21:10:18 roberto Exp $
+** $Id: lgc.c,v 2.140.1.2 2013/04/26 18:22:05 roberto Exp $
 ** Garbage Collector
 ** See Copyright Notice in lua.h
 */
@@ -493,17 +493,24 @@ static lu_mem traverseLclosure (global_State *g, LClosure *cl) {
 
 
 static lu_mem traversestack (global_State *g, lua_State *th) {
+  int n = 0;
   StkId o = th->stack;
   if (o == NULL)
     return 1;  /* stack not completely built yet */
-  for (; o < th->top; o++)
+  for (; o < th->top; o++)  /* mark live elements in the stack */
     markvalue(g, o);
   if (g->gcstate == GCSatomic) {  /* final traversal? */
     StkId lim = th->stack + th->stacksize;  /* real end of stack */
     for (; o < lim; o++)  /* clear not-marked stack slice */
       setnilvalue(o);
   }
-  return sizeof(lua_State) + sizeof(TValue) * th->stacksize;
+  else {  /* count call infos to compute size */
+    CallInfo *ci;
+    for (ci = &th->base_ci; ci != th->ci; ci = ci->next)
+      n++;
+  }
+  return sizeof(lua_State) + sizeof(TValue) * th->stacksize +
+         sizeof(CallInfo) * n;
 }
 
 
index dee270b..84bb1cd 100644 (file)
--- a/src/lgc.h
+++ b/src/lgc.h
@@ -1,5 +1,5 @@
 /*
-** $Id: lgc.h,v 2.58 2012/09/11 12:53:08 roberto Exp $
+** $Id: lgc.h,v 2.58.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Garbage Collector
 ** See Copyright Notice in lua.h
 */
index 8d3aa65..c1a3830 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: linit.c,v 1.32 2011/04/08 19:17:36 roberto Exp $
+** $Id: linit.c,v 1.32.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Initialization of libraries for lua.c and other clients
 ** See Copyright Notice in lua.h
 */
index 3f80db1..2a4ec4a 100644 (file)
@@ -1,17 +1,17 @@
 /*
-** $Id: liolib.c,v 2.111 2013/03/21 13:57:27 roberto Exp $
+** $Id: liolib.c,v 2.112.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Standard I/O (and system) library
 ** See Copyright Notice in lua.h
 */
 
 
 /*
-** POSIX idiosyncrasy!
 ** This definition must come before the inclusion of 'stdio.h'; it
 ** should not affect non-POSIX systems
 */
 #if !defined(_FILE_OFFSET_BITS)
-#define _FILE_OFFSET_BITS 64
+#define        _LARGEFILE_SOURCE       1
+#define _FILE_OFFSET_BITS      64
 #endif
 
 
 
 /*
 ** {======================================================
-** lua_fseek/lua_ftell: configuration for longer offsets
+** lua_fseek: configuration for longer offsets
 ** =======================================================
 */
 
-#if !defined(lua_fseek)        /* { */
+#if !defined(lua_fseek)        && !defined(LUA_ANSI)   /* { */
 
-#if defined(LUA_USE_POSIX)
+#if defined(LUA_USE_POSIX)     /* { */
 
 #define l_fseek(f,o,w)         fseeko(f,o,w)
 #define l_ftell(f)             ftello(f)
 #define l_seeknum              off_t
 
 #elif defined(LUA_WIN) && !defined(_CRTIMP_TYPEINFO) \
-   && defined(_MSC_VER) && (_MSC_VER >= 1400)
+   && defined(_MSC_VER) && (_MSC_VER >= 1400)  /* }{ */
 /* Windows (but not DDK) and Visual C++ 2005 or higher */
 
 #define l_fseek(f,o,w)         _fseeki64(f,o,w)
 #define l_ftell(f)             _ftelli64(f)
 #define l_seeknum              __int64
 
-#else
+#endif /* } */
 
+#endif                 /* } */
+
+
+#if !defined(l_fseek)          /* default definitions */
 #define l_fseek(f,o,w)         fseek(f,o,w)
 #define l_ftell(f)             ftell(f)
 #define l_seeknum              long
-
 #endif
 
-#endif                 /* } */
-
 /* }====================================================== */
 
 
index 1a32e34..c4b820e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: llex.c,v 2.63 2013/03/16 21:10:18 roberto Exp $
+** $Id: llex.c,v 2.63.1.2 2013/08/30 15:49:41 roberto Exp $
 ** Lexical Analyzer
 ** See Copyright Notice in lua.h
 */
@@ -133,6 +133,9 @@ TString *luaX_newstring (LexState *ls, const char *str, size_t l) {
     setbvalue(o, 1);  /* t[string] = true */
     luaC_checkGC(L);
   }
+  else {  /* string already present */
+    ts = rawtsvalue(keyfromval(o));  /* re-use value previously stored */
+  }
   L->top--;  /* remove string from stack */
   return ts;
 }
index 9ca8a29..a4acdd3 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: llex.h,v 1.72 2011/11/30 12:43:51 roberto Exp $
+** $Id: llex.h,v 1.72.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Lexical Analyzer
 ** See Copyright Notice in lua.h
 */
index 1b8c79b..152dd05 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: llimits.h,v 1.103 2013/02/20 14:08:56 roberto Exp $
+** $Id: llimits.h,v 1.103.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Limits, basic types, and some other `installation-dependent' definitions
 ** See Copyright Notice in lua.h
 */
index a49f1fd..fe9fc54 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lmathlib.c,v 1.83 2013/03/07 18:21:32 roberto Exp $
+** $Id: lmathlib.c,v 1.83.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Standard mathematical library
 ** See Copyright Notice in lua.h
 */
index 3f88496..ee343e3 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lmem.c,v 1.84 2012/05/23 15:41:53 roberto Exp $
+** $Id: lmem.c,v 1.84.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Interface to Memory Manager
 ** See Copyright Notice in lua.h
 */
index 5f85099..bd4f4e0 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lmem.h,v 1.40 2013/02/20 14:08:21 roberto Exp $
+** $Id: lmem.h,v 1.40.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Interface to Memory Manager
 ** See Copyright Notice in lua.h
 */
index a995927..bedbea3 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: loadlib.c,v 1.111 2012/05/30 12:33:44 roberto Exp $
+** $Id: loadlib.c,v 1.111.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Dynamic library loader for Lua
 ** See Copyright Notice in lua.h
 **
index c152785..882d994 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lobject.c,v 2.58 2013/02/20 14:08:56 roberto Exp $
+** $Id: lobject.c,v 2.58.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Some generic functions over Lua objects
 ** See Copyright Notice in lua.h
 */
index dd23b91..3a630b9 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lobject.h,v 2.71 2012/09/11 18:21:44 roberto Exp $
+** $Id: lobject.h,v 2.71.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Type definitions for Lua objects
 ** See Copyright Notice in lua.h
 */
index ef73692..4190dc7 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lopcodes.c,v 1.49 2012/05/14 13:34:18 roberto Exp $
+** $Id: lopcodes.c,v 1.49.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Opcodes for Lua virtual machine
 ** See Copyright Notice in lua.h
 */
index 07d2b3f..51f5791 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lopcodes.h,v 1.142 2011/07/15 12:50:29 roberto Exp $
+** $Id: lopcodes.h,v 1.142.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Opcodes for Lua virtual machine
 ** See Copyright Notice in lua.h
 */
index 5170fd0..052ba17 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: loslib.c,v 1.40 2012/10/19 15:54:02 roberto Exp $
+** $Id: loslib.c,v 1.40.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Standard Operating System library
 ** See Copyright Notice in lua.h
 */
index d8f5b4f..9e1a9ca 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lparser.c,v 2.130 2013/02/06 13:37:39 roberto Exp $
+** $Id: lparser.c,v 2.130.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Lua Parser
 ** See Copyright Notice in lua.h
 */
index 301167d..0346e3c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lparser.h,v 1.70 2012/05/08 13:53:33 roberto Exp $
+** $Id: lparser.h,v 1.70.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Lua Parser
 ** See Copyright Notice in lua.h
 */
index 207a106..c7f2672 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lstate.c,v 2.99 2012/10/02 17:40:53 roberto Exp $
+** $Id: lstate.c,v 2.99.1.2 2013/11/08 17:45:31 roberto Exp $
 ** Global State
 ** See Copyright Notice in lua.h
 */
@@ -192,6 +192,8 @@ static void f_luaopen (lua_State *L, void *ud) {
   g->memerrmsg = luaS_newliteral(L, MEMERRMSG);
   luaS_fix(g->memerrmsg);  /* it should never be collected */
   g->gcrunning = 1;  /* allow gc */
+  g->version = lua_version(NULL);
+  luai_userstateopen(L);
 }
 
 
@@ -222,6 +224,8 @@ static void close_state (lua_State *L) {
   global_State *g = G(L);
   luaF_close(L, L->stack);  /* close all upvalues for this thread */
   luaC_freeallobjects(L);  /* collect all objects */
+  if (g->version)  /* closing a fully built state? */
+    luai_userstateclose(L);
   luaM_freearray(L, G(L)->strt.hash, G(L)->strt.size);
   luaZ_freebuffer(L, &g->buff);
   freestack(L);
@@ -287,7 +291,7 @@ LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) {
   setnilvalue(&g->l_registry);
   luaZ_initbuffer(L, &g->buff);
   g->panic = NULL;
-  g->version = lua_version(NULL);
+  g->version = NULL;
   g->gcstate = GCSpause;
   g->allgc = NULL;
   g->finobj = NULL;
@@ -306,8 +310,6 @@ LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) {
     close_state(L);
     L = NULL;
   }
-  else
-    luai_userstateopen(L);
   return L;
 }
 
@@ -315,7 +317,6 @@ LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) {
 LUA_API void lua_close (lua_State *L) {
   L = G(L)->mainthread;  /* only the main thread can be closed */
   lua_lock(L);
-  luai_userstateclose(L);
   close_state(L);
 }
 
index c8a31f5..daffd9a 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lstate.h,v 2.82 2012/07/02 13:37:04 roberto Exp $
+** $Id: lstate.h,v 2.82.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Global State
 ** See Copyright Notice in lua.h
 */
index 8b5af0b..af96c89 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lstring.c,v 2.26 2013/01/08 13:50:10 roberto Exp $
+** $Id: lstring.c,v 2.26.1.1 2013/04/12 18:48:47 roberto Exp $
 ** String table (keeps all strings handled by Lua)
 ** See Copyright Notice in lua.h
 */
index d312ff3..260e7f1 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lstring.h,v 1.49 2012/02/01 21:57:15 roberto Exp $
+** $Id: lstring.h,v 1.49.1.1 2013/04/12 18:48:47 roberto Exp $
 ** String table (keep all strings handled by Lua)
 ** See Copyright Notice in lua.h
 */
index fcc61c9..9261fd2 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lstrlib.c,v 1.178 2012/08/14 18:12:34 roberto Exp $
+** $Id: lstrlib.c,v 1.178.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Standard library for string operations and pattern-matching
 ** See Copyright Notice in lua.h
 */
index 420391f..5d76f97 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: ltable.c,v 2.72 2012/09/11 19:37:16 roberto Exp $
+** $Id: ltable.c,v 2.72.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Lua tables (hash)
 ** See Copyright Notice in lua.h
 */
index 2f6f5c2..d69449b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: ltable.h,v 2.16 2011/08/17 20:26:47 roberto Exp $
+** $Id: ltable.h,v 2.16.1.2 2013/08/30 15:49:41 roberto Exp $
 ** Lua tables (hash)
 ** See Copyright Notice in lua.h
 */
 
 #define invalidateTMcache(t)   ((t)->flags = 0)
 
+/* returns the key, given the value of a table entry */
+#define keyfromval(v) \
+  (gkey(cast(Node *, cast(char *, (v)) - offsetof(Node, i_val))))
+
 
 LUAI_FUNC const TValue *luaH_getint (Table *t, int key);
 LUAI_FUNC void luaH_setint (lua_State *L, Table *t, int key, TValue *value);
index ad798b4..6001224 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: ltablib.c,v 1.65 2013/03/07 18:17:24 roberto Exp $
+** $Id: ltablib.c,v 1.65.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Library for Table Manipulation
 ** See Copyright Notice in lua.h
 */
index e70006d..69b4ed7 100644 (file)
--- a/src/ltm.c
+++ b/src/ltm.c
@@ -1,5 +1,5 @@
 /*
-** $Id: ltm.c,v 2.14 2011/06/02 19:31:40 roberto Exp $
+** $Id: ltm.c,v 2.14.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Tag methods
 ** See Copyright Notice in lua.h
 */
index 89bdc19..7f89c84 100644 (file)
--- a/src/ltm.h
+++ b/src/ltm.h
@@ -1,5 +1,5 @@
 /*
-** $Id: ltm.h,v 2.11 2011/02/28 17:32:10 roberto Exp $
+** $Id: ltm.h,v 2.11.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Tag methods
 ** See Copyright Notice in lua.h
 */
index 6a00712..4345e55 100644 (file)
--- a/src/lua.c
+++ b/src/lua.c
@@ -1,5 +1,5 @@
 /*
-** $Id: lua.c,v 1.206 2012/09/29 20:07:06 roberto Exp $
+** $Id: lua.c,v 1.206.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Lua stand-alone interpreter
 ** See Copyright Notice in lua.h
 */
index eb0482b..149a2c3 100644 (file)
--- a/src/lua.h
+++ b/src/lua.h
@@ -1,5 +1,5 @@
 /*
-** $Id: lua.h,v 1.285 2013/03/15 13:04:22 roberto Exp $
+** $Id: lua.h,v 1.285.1.2 2013/11/11 12:09:16 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,7 +19,7 @@
 #define LUA_VERSION_MAJOR      "5"
 #define LUA_VERSION_MINOR      "2"
 #define LUA_VERSION_NUM                502
-#define LUA_VERSION_RELEASE    "2"
+#define LUA_VERSION_RELEASE    "3"
 
 #define LUA_VERSION    "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
 #define LUA_RELEASE    LUA_VERSION "." LUA_VERSION_RELEASE
index 5081836..7409706 100644 (file)
@@ -203,7 +203,7 @@ int main(int argc, char* argv[])
 }
 
 /*
-** $Id: print.c,v 1.68 2011/09/30 10:21:20 lhf Exp $
+** $Id: print.c,v 1.69 2013/07/04 01:03:46 lhf Exp $
 ** print bytecodes
 ** See Copyright Notice in lua.h
 */
@@ -251,7 +251,7 @@ static void PrintString(const TString* ts)
 static void PrintConstant(const Proto* f, int i)
 {
  const TValue* o=&f->k[i];
- switch (ttype(o))
+ switch (ttypenv(o))
  {
   case LUA_TNIL:
        printf("nil");
index df802c9..18be9a9 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: luaconf.h,v 1.176 2013/03/16 21:10:18 roberto Exp $
+** $Id: luaconf.h,v 1.176.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Configuration file for Lua
 ** See Copyright Notice in lua.h
 */
index 9fd126b..da82005 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lualib.h,v 1.43 2011/12/08 12:11:37 roberto Exp $
+** $Id: lualib.h,v 1.43.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Lua standard libraries
 ** See Copyright Notice in lua.h
 */
index 54de011..4163cb5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lundump.c,v 2.22 2012/05/08 13:53:33 roberto Exp $
+** $Id: lundump.c,v 2.22.1.1 2013/04/12 18:48:47 roberto Exp $
 ** load precompiled Lua chunks
 ** See Copyright Notice in lua.h
 */
index 2b8acce..5255db2 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lundump.h,v 1.39 2012/05/08 13:53:33 roberto Exp $
+** $Id: lundump.h,v 1.39.1.1 2013/04/12 18:48:47 roberto Exp $
 ** load precompiled Lua chunks
 ** See Copyright Notice in lua.h
 */
index 657d5c4..141b9fd 100644 (file)
--- a/src/lvm.c
+++ b/src/lvm.c
@@ -1,5 +1,5 @@
 /*
-** $Id: lvm.c,v 2.155 2013/03/16 21:10:18 roberto Exp $
+** $Id: lvm.c,v 2.155.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Lua virtual machine
 ** See Copyright Notice in lua.h
 */
index 07e25f9..5380270 100644 (file)
--- a/src/lvm.h
+++ b/src/lvm.h
@@ -1,5 +1,5 @@
 /*
-** $Id: lvm.h,v 2.18 2013/01/08 14:06:55 roberto Exp $
+** $Id: lvm.h,v 2.18.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Lua virtual machine
 ** See Copyright Notice in lua.h
 */
index 8b77054..20efea9 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lzio.c,v 1.35 2012/05/14 13:34:18 roberto Exp $
+** $Id: lzio.c,v 1.35.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Buffered streams
 ** See Copyright Notice in lua.h
 */
index 0868230..441f747 100644 (file)
@@ -1,5 +1,5 @@
 /*
-** $Id: lzio.h,v 1.26 2011/07/15 12:48:03 roberto Exp $
+** $Id: lzio.h,v 1.26.1.1 2013/04/12 18:48:47 roberto Exp $
 ** Buffered streams
 ** See Copyright Notice in lua.h
 */