From: <ste...@us...> - 2013-06-09 00:35:39
|
Revision: 4051 http://sourceforge.net/p/moneymanagerex/code/4051 Author: stef145g Date: 2013-06-09 00:35:36 +0000 (Sun, 09 Jun 2013) Log Message: ----------- Lua Update: Version 5.2.2 Modified Paths: -------------- trunk/mmex/lib/lua/doc/contents.html trunk/mmex/lib/lua/doc/lua.css trunk/mmex/lib/lua/doc/manual.css trunk/mmex/lib/lua/doc/manual.html trunk/mmex/lib/lua/doc/readme.html trunk/mmex/lib/lua/src/Makefile trunk/mmex/lib/lua/src/lapi.c trunk/mmex/lib/lua/src/lauxlib.c trunk/mmex/lib/lua/src/lbaselib.c trunk/mmex/lib/lua/src/lbitlib.c trunk/mmex/lib/lua/src/lcode.c trunk/mmex/lib/lua/src/lcorolib.c trunk/mmex/lib/lua/src/ldebug.c trunk/mmex/lib/lua/src/ldo.c trunk/mmex/lib/lua/src/lfunc.c trunk/mmex/lib/lua/src/lgc.c trunk/mmex/lib/lua/src/lgc.h trunk/mmex/lib/lua/src/liolib.c trunk/mmex/lib/lua/src/llex.c trunk/mmex/lib/lua/src/llimits.h trunk/mmex/lib/lua/src/lmathlib.c trunk/mmex/lib/lua/src/lmem.h trunk/mmex/lib/lua/src/lobject.c trunk/mmex/lib/lua/src/lobject.h trunk/mmex/lib/lua/src/loslib.c trunk/mmex/lib/lua/src/lparser.c trunk/mmex/lib/lua/src/lstate.c trunk/mmex/lib/lua/src/lstate.h trunk/mmex/lib/lua/src/lstring.c trunk/mmex/lib/lua/src/lstrlib.c trunk/mmex/lib/lua/src/ltable.c trunk/mmex/lib/lua/src/ltablib.c trunk/mmex/lib/lua/src/lua.c trunk/mmex/lib/lua/src/lua.h trunk/mmex/lib/lua/src/luaconf.h trunk/mmex/lib/lua/src/lvm.c trunk/mmex/lib/lua/src/lvm.h trunk/mmex/src/constants.cpp Modified: trunk/mmex/lib/lua/doc/contents.html =================================================================== --- trunk/mmex/lib/lua/doc/contents.html 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/doc/contents.html 2013-06-09 00:35:36 UTC (rev 4051) @@ -23,7 +23,7 @@ <P> The reference manual is the official definition of the Lua language. For a complete introduction to Lua programming, see the book -<A HREF="http://www.lua.org/docs.html#books">Programming in Lua</A>. +<A HREF="http://www.lua.org/pil/">Programming in Lua</A>. <P> <A HREF="manual.html">start</A> @@ -33,7 +33,7 @@ <A HREF="#index">index</A> <HR> <SMALL> -Copyright © 2011–2012 Lua.org, PUC-Rio. +Copyright © 2011–2013 Lua.org, PUC-Rio. Freely available under the terms of the <A HREF="http://www.lua.org/license.html">Lua license</A>. </SMALL> @@ -149,8 +149,8 @@ <A HREF="manual.html#pdf-error">error</A><BR> <A HREF="manual.html#pdf-getmetatable">getmetatable</A><BR> <A HREF="manual.html#pdf-ipairs">ipairs</A><BR> +<A HREF="manual.html#pdf-load">load</A><BR> <A HREF="manual.html#pdf-loadfile">loadfile</A><BR> -<A HREF="manual.html#pdf-load">load</A><BR> <A HREF="manual.html#pdf-next">next</A><BR> <A HREF="manual.html#pdf-pairs">pairs</A><BR> <A HREF="manual.html#pdf-pcall">pcall</A><BR> @@ -385,6 +385,7 @@ <A HREF="manual.html#lua_pushcclosure">lua_pushcclosure</A><BR> <A HREF="manual.html#lua_pushcfunction">lua_pushcfunction</A><BR> <A HREF="manual.html#lua_pushfstring">lua_pushfstring</A><BR> +<A HREF="manual.html#lua_pushglobaltable">lua_pushglobaltable</A><BR> <A HREF="manual.html#lua_pushinteger">lua_pushinteger</A><BR> <A HREF="manual.html#lua_pushlightuserdata">lua_pushlightuserdata</A><BR> <A HREF="manual.html#lua_pushliteral">lua_pushliteral</A><BR> @@ -393,15 +394,16 @@ <A HREF="manual.html#lua_pushnumber">lua_pushnumber</A><BR> <A HREF="manual.html#lua_pushstring">lua_pushstring</A><BR> <A HREF="manual.html#lua_pushthread">lua_pushthread</A><BR> +<A HREF="manual.html#lua_pushunsigned">lua_pushunsigned</A><BR> <A HREF="manual.html#lua_pushvalue">lua_pushvalue</A><BR> <A HREF="manual.html#lua_pushvfstring">lua_pushvfstring</A><BR> <A HREF="manual.html#lua_rawequal">lua_rawequal</A><BR> <A HREF="manual.html#lua_rawget">lua_rawget</A><BR> <A HREF="manual.html#lua_rawgeti">lua_rawgeti</A><BR> +<A HREF="manual.html#lua_rawgetp">lua_rawgetp</A><BR> <A HREF="manual.html#lua_rawlen">lua_rawlen</A><BR> <A HREF="manual.html#lua_rawset">lua_rawset</A><BR> <A HREF="manual.html#lua_rawseti">lua_rawseti</A><BR> -<A HREF="manual.html#lua_rawgetp">lua_rawgetp</A><BR> <A HREF="manual.html#lua_rawsetp">lua_rawsetp</A><BR> <A HREF="manual.html#lua_register">lua_register</A><BR> <A HREF="manual.html#lua_remove">lua_remove</A><BR> @@ -460,8 +462,8 @@ <A HREF="manual.html#luaL_buffinitsize">luaL_buffinitsize</A><BR> <A HREF="manual.html#luaL_callmeta">luaL_callmeta</A><BR> <A HREF="manual.html#luaL_checkany">luaL_checkany</A><BR> +<A HREF="manual.html#luaL_checkint">luaL_checkint</A><BR> <A HREF="manual.html#luaL_checkinteger">luaL_checkinteger</A><BR> -<A HREF="manual.html#luaL_checkint">luaL_checkint</A><BR> <A HREF="manual.html#luaL_checklong">luaL_checklong</A><BR> <A HREF="manual.html#luaL_checklstring">luaL_checklstring</A><BR> <A HREF="manual.html#luaL_checknumber">luaL_checknumber</A><BR> @@ -492,8 +494,8 @@ <A HREF="manual.html#luaL_newmetatable">luaL_newmetatable</A><BR> <A HREF="manual.html#luaL_newstate">luaL_newstate</A><BR> <A HREF="manual.html#luaL_openlibs">luaL_openlibs</A><BR> +<A HREF="manual.html#luaL_optint">luaL_optint</A><BR> <A HREF="manual.html#luaL_optinteger">luaL_optinteger</A><BR> -<A HREF="manual.html#luaL_optint">luaL_optint</A><BR> <A HREF="manual.html#luaL_optlong">luaL_optlong</A><BR> <A HREF="manual.html#luaL_optlstring">luaL_optlstring</A><BR> <A HREF="manual.html#luaL_optnumber">luaL_optnumber</A><BR> @@ -521,10 +523,10 @@ <HR> <SMALL CLASS="footer"> Last update: -Sat May 26 08:52:25 BRT 2012 +Tue Mar 12 11:22:18 BRT 2013 </SMALL> <!-- -Last change: revised for Lua 5.2.1 +Last change: revised for Lua 5.2.2 --> </BODY> Modified: trunk/mmex/lib/lua/doc/lua.css =================================================================== --- trunk/mmex/lib/lua/doc/lua.css 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/doc/lua.css 2013-06-09 00:35:36 UTC (rev 4051) @@ -16,10 +16,10 @@ h2 { padding-top: 0.4em ; padding-bottom: 0.4em ; - padding-left: 30px ; - padding-right: 30px ; - margin-left: -30px ; + padding-left: 1em ; + padding-right: 1em ; background-color: #E0E0FF ; + border-radius: 8px ; } h3 { Modified: trunk/mmex/lib/lua/doc/manual.css =================================================================== --- trunk/mmex/lib/lua/doc/manual.css 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/doc/manual.css 2013-06-09 00:35:36 UTC (rev 4051) @@ -18,7 +18,9 @@ p+h1, ul+h1 { padding-top: 0.4em ; padding-bottom: 0.4em ; - padding-left: 30px ; - margin-left: -30px ; + padding-left: 24px ; + margin-left: -24px ; background-color: #E0E0FF ; + border-radius: 8px ; } + Modified: trunk/mmex/lib/lua/doc/manual.html =================================================================== --- trunk/mmex/lib/lua/doc/manual.html 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/doc/manual.html 2013-06-09 00:35:36 UTC (rev 4051) @@ -19,7 +19,7 @@ by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes <p> <small> -Copyright © 2011–2012 Lua.org, PUC-Rio. +Copyright © 2011–2013 Lua.org, PUC-Rio. Freely available under the terms of the <a href="http://www.lua.org/license.html">Lua license</a>. </small> @@ -33,7 +33,7 @@ <!-- ====================================================================== --> <p> -<!-- $Id: manual.of,v 1.99 2012/06/08 15:30:20 roberto Exp $ --> +<!-- $Id: manual.of,v 1.103 2013/03/14 18:51:56 roberto Exp $ --> @@ -424,7 +424,6 @@ <pre> rawget(getmetatable(obj) or {}, event) </pre><p> - This means that the access to a metamethod does not invoke other metamethods, and access to objects with no metatables does not fail (it simply results in <b>nil</b>). @@ -915,7 +914,7 @@ <p> When you close a state (see <a href="#lua_close"><code>lua_close</code></a>), -Lua calls the finalizers of all objects marked for collection, +Lua calls the finalizers of all objects marked for finalization, following the reverse order that they were marked. If any finalizer marks new objects for collection during that phase, these new objects will not be finalized. @@ -1255,8 +1254,7 @@ <p> -When parsing a from a string source, -any byte in a literal string not +Any byte in a literal string not explicitly affected by the previous rules represents itself. However, Lua opens files for parsing in text mode, and the system file functions may have problems with @@ -1410,6 +1408,35 @@ </pre> <p> +Function calls and assignments +can start with an open parenthesis. +This possibility leads to an ambiguity in Lua's grammar. +Consider the following fragment: + +<pre> + a = b + c + (print or io.write)('done') +</pre><p> +The grammar could see it in two ways: + +<pre> + a = b + c(print or io.write)('done') + + a = b + c; (print or io.write)('done') +</pre><p> +The current parser always sees such constructions +in the first way, +interpreting the open parenthesis +as the start of the arguments to a call. +To avoid this ambiguity, +it is a good practice to always precede with a semicolon +statements that start with a parenthesis: + +<pre> + ;(print or io.write)('done') +</pre> + +<p> A block can be explicitly delimited to produce a single statement: <pre> @@ -1428,7 +1455,7 @@ <h3>3.3.2 – <a name="3.3.2">Chunks</a></h3> <p> -The unit of execution of Lua is called a <em>chunk</em>. +The unit of compilation of Lua is called a <em>chunk</em>. Syntactically, a chunk is simply a block: @@ -1859,7 +1886,8 @@ (unless the expression is enclosed in parentheses). In all other contexts, Lua adjusts the result list to one element, -discarding all values except the first one. +either discarding all values except the first one +or adding a single <b>nil</b> if there are no values. <p> @@ -2559,32 +2587,35 @@ <p> A <em>valid index</em> is an index that refers to a -valid position within the stack, that is, -it lies between 1 and the stack top +real position within the stack, that is, +its position lies between 1 and the stack top (<code>1 ≤ abs(index) ≤ top</code>). -Usually, functions that need a specific stack position -(e.g., <a href="#lua_remove"><code>lua_remove</code></a>) require valid indices. +Usually, functions that can modify the value at an index +require valid indices. <p> +Unless otherwise noted, +any function that accepts valid indices also accepts <em>pseudo-indices</em>, +which represent some Lua values that are accessible to C code +but which are not in the stack. +Pseudo-indices are used to access the registry +and the upvalues of a C function (see <a href="#4.4">§4.4</a>). + + +<p> Functions that do not need a specific stack position, but only a value in the stack (e.g., query functions), can be called with acceptable indices. -An <em>acceptable index</em> refers to a position within -the space allocated for the stack, +An <em>acceptable index</em> can be any valid index, +including the pseudo-indices, +but it also can be any positive index after the stack top +within the space allocated for the stack, that is, indices up to the stack size. -More formally, we define an acceptable index -as follows: - -<pre> - (index < 0 && abs(index) <= top) || - (index > 0 && index <= stack size) -</pre><p> (Note that 0 is never an acceptable index.) -When a function is called, -its stack size is <code>top + LUA_MINSTACK</code>. -You can change its stack size through function <a href="#lua_checkstack"><code>lua_checkstack</code></a>. +Except when noted otherwise, +functions in the API work with acceptable indices. <p> @@ -2598,21 +2629,13 @@ <p> For functions that can be called with acceptable indices, any non-valid index is treated as if it -contains a value of a virtual type <a name="pdf-LUA_TNONE"><code>LUA_TNONE</code></a>. +contains a value of a virtual type <a name="pdf-LUA_TNONE"><code>LUA_TNONE</code></a>, +which behaves like a nil value. -<p> -Unless otherwise noted, -any function that accepts valid indices also accepts <em>pseudo-indices</em>, -which represent some Lua values that are accessible to C code -but which are not in the stack. -Pseudo-indices are used to access the registry -and the upvalues of a C function (see <a href="#4.4">§4.4</a>). - - <h2>4.4 – <a name="4.4">C Closures</a></h2> <p> @@ -2628,13 +2651,13 @@ Whenever a C function is called, its upvalues are located at specific pseudo-indices. These pseudo-indices are produced by the macro -<a name="lua_upvalueindex"><code>lua_upvalueindex</code></a>. +<a href="#lua_upvalueindex"><code>lua_upvalueindex</code></a>. The first value associated with a function is at position <code>lua_upvalueindex(1)</code>, and so on. Any access to <code>lua_upvalueindex(<em>n</em>)</code>, where <em>n</em> is greater than the number of upvalues of the current function (but not greater than 256), -produces an acceptable (but invalid) index. +produces an acceptable but invalid index. @@ -2647,7 +2670,8 @@ a predefined table that can be used by any C code to store whatever Lua values it needs to store. The registry table is always located at pseudo-index -<a name="pdf-LUA_REGISTRYINDEX"><code>LUA_REGISTRYINDEX</code></a>. +<a name="pdf-LUA_REGISTRYINDEX"><code>LUA_REGISTRYINDEX</code></a>, +which is a valid index. Any C library can store data into this table, but it should take care to choose keys that are different from those used @@ -2692,8 +2716,8 @@ <p> Internally, Lua uses the C <code>longjmp</code> facility to handle errors. -(You can also choose to use exceptions if you use C++; -see file <code>luaconf.h</code>.) +(You can also choose to use exceptions if you compile Lua as C++; +search for <code>LUAI_THROW</code> in the source code.) When Lua faces any error (such as a memory allocation error, type errors, syntax errors, and runtime errors) @@ -3136,8 +3160,8 @@ <p> Compares two Lua values. -Returns 1 if the value at acceptable index <code>index1</code> satisfies <code>op</code> -when compared with the value at acceptable index <code>index2</code>, +Returns 1 if the value at index <code>index1</code> satisfies <code>op</code> +when compared with the value at index <code>index2</code>, following the semantics of the corresponding Lua operator (that is, it may call metamethods). Otherwise returns 0. @@ -3180,7 +3204,7 @@ <pre>void lua_copy (lua_State *L, int fromidx, int toidx);</pre> <p> -Moves the element at the valid index <code>fromidx</code> +Moves the element at index <code>fromidx</code> into the valid index <code>toidx</code> without shifting any element (therefore replacing the value at that position). @@ -3390,7 +3414,7 @@ <p> Pushes onto the stack the value <code>t[k]</code>, -where <code>t</code> is the value at the given valid index. +where <code>t</code> is the value at the given index. As in Lua, this function may trigger a metamethod for the "index" event (see <a href="#2.4">§2.4</a>). @@ -3414,8 +3438,7 @@ <pre>int lua_getmetatable (lua_State *L, int index);</pre> <p> -Pushes onto the stack the metatable of the value at the given -acceptable index. +Pushes onto the stack the metatable of the value at the given index. If the value does not have a metatable, the function returns 0 and pushes nothing on the stack. @@ -3429,7 +3452,7 @@ <p> Pushes onto the stack the value <code>t[k]</code>, -where <code>t</code> is the value at the given valid index +where <code>t</code> is the value at the given index and <code>k</code> is the value at the top of the stack. @@ -3477,7 +3500,7 @@ <p> Moves the top element into the given valid index, shifting up the elements above this index to open space. -Cannot be called with a pseudo-index, +This function cannot be called with a pseudo-index, because a pseudo-index is not an actual stack position. @@ -3505,7 +3528,7 @@ <pre>int lua_isboolean (lua_State *L, int index);</pre> <p> -Returns 1 if the value at the given acceptable index is a boolean, +Returns 1 if the value at the given index is a boolean, and 0 otherwise. @@ -3517,7 +3540,7 @@ <pre>int lua_iscfunction (lua_State *L, int index);</pre> <p> -Returns 1 if the value at the given acceptable index is a C function, +Returns 1 if the value at the given index is a C function, and 0 otherwise. @@ -3529,7 +3552,7 @@ <pre>int lua_isfunction (lua_State *L, int index);</pre> <p> -Returns 1 if the value at the given acceptable index is a function +Returns 1 if the value at the given index is a function (either C or Lua), and 0 otherwise. @@ -3541,7 +3564,7 @@ <pre>int lua_islightuserdata (lua_State *L, int index);</pre> <p> -Returns 1 if the value at the given acceptable index is a light userdata, +Returns 1 if the value at the given index is a light userdata, and 0 otherwise. @@ -3553,7 +3576,7 @@ <pre>int lua_isnil (lua_State *L, int index);</pre> <p> -Returns 1 if the value at the given acceptable index is <b>nil</b>, +Returns 1 if the value at the given index is <b>nil</b>, and 0 otherwise. @@ -3565,8 +3588,7 @@ <pre>int lua_isnone (lua_State *L, int index);</pre> <p> -Returns 1 if the given acceptable index is not valid -(that is, it refers to an element outside the current stack), +Returns 1 if the given index is not valid, and 0 otherwise. @@ -3578,8 +3600,7 @@ <pre>int lua_isnoneornil (lua_State *L, int index);</pre> <p> -Returns 1 if the given acceptable index is not valid -(that is, it refers to an element outside the current stack) +Returns 1 if the given index is not valid or if the value at this index is <b>nil</b>, and 0 otherwise. @@ -3592,7 +3613,7 @@ <pre>int lua_isnumber (lua_State *L, int index);</pre> <p> -Returns 1 if the value at the given acceptable index is a number +Returns 1 if the value at the given index is a number or a string convertible to a number, and 0 otherwise. @@ -3605,7 +3626,7 @@ <pre>int lua_isstring (lua_State *L, int index);</pre> <p> -Returns 1 if the value at the given acceptable index is a string +Returns 1 if the value at the given index is a string or a number (which is always convertible to a string), and 0 otherwise. @@ -3618,7 +3639,7 @@ <pre>int lua_istable (lua_State *L, int index);</pre> <p> -Returns 1 if the value at the given acceptable index is a table, +Returns 1 if the value at the given index is a table, and 0 otherwise. @@ -3630,7 +3651,7 @@ <pre>int lua_isthread (lua_State *L, int index);</pre> <p> -Returns 1 if the value at the given acceptable index is a thread, +Returns 1 if the value at the given index is a thread, and 0 otherwise. @@ -3642,7 +3663,7 @@ <pre>int lua_isuserdata (lua_State *L, int index);</pre> <p> -Returns 1 if the value at the given acceptable index is a userdata +Returns 1 if the value at the given index is a userdata (either full or light), and 0 otherwise. @@ -3654,7 +3675,7 @@ <pre>void lua_len (lua_State *L, int index);</pre> <p> -Returns the "length" of the value at the given acceptable index; +Returns the "length" of the value at the given index; it is equivalent to the '<code>#</code>' operator in Lua (see <a href="#3.4.6">§3.4.6</a>). The result is pushed on the stack. @@ -3719,6 +3740,12 @@ <p> +<code>lua_load</code> uses the stack internally, +so the reader function should always leave the stack +unmodified when returning. + + +<p> If the resulting function has one upvalue, this upvalue is set to the value of the global environment stored at index <code>LUA_RIDX_GLOBALS</code> in the registry (see <a href="#4.5">§4.5</a>). @@ -4038,7 +4065,7 @@ <p> Pushes onto the stack a formatted string and returns a pointer to this string. -It is similar to the C function <code>sprintf</code>, +It is similar to the ANSI C function <code>sprintf</code>, but has some important differences: <ul> @@ -4066,6 +4093,17 @@ +<hr><h3><a name="lua_pushglobaltable"><code>lua_pushglobaltable</code></a></h3><p> +<span class="apii">[-0, +1, –]</span> +<pre>void lua_pushglobaltable (lua_State *L);</pre> + +<p> +Pushes the global environment onto the stack. + + + + + <hr><h3><a name="lua_pushinteger"><code>lua_pushinteger</code></a></h3><p> <span class="apii">[-0, +1, –]</span> <pre>void lua_pushinteger (lua_State *L, lua_Integer n);</pre> @@ -4189,12 +4227,23 @@ +<hr><h3><a name="lua_pushunsigned"><code>lua_pushunsigned</code></a></h3><p> +<span class="apii">[-0, +1, –]</span> +<pre>void lua_pushunsigned (lua_State *L, lua_Unsigned n);</pre> + +<p> +Pushes a number with value <code>n</code> onto the stack. + + + + + <hr><h3><a name="lua_pushvalue"><code>lua_pushvalue</code></a></h3><p> <span class="apii">[-0, +1, –]</span> <pre>void lua_pushvalue (lua_State *L, int index);</pre> <p> -Pushes a copy of the element at the given valid index +Pushes a copy of the element at the given index onto the stack. @@ -4220,7 +4269,7 @@ <pre>int lua_rawequal (lua_State *L, int index1, int index2);</pre> <p> -Returns 1 if the two values in acceptable indices <code>index1</code> and +Returns 1 if the two values in indices <code>index1</code> and <code>index2</code> are primitively equal (that is, without calling metamethods). Otherwise returns 0. @@ -4248,7 +4297,7 @@ <p> Pushes onto the stack the value <code>t[n]</code>, -where <code>t</code> is the table at the given valid index. +where <code>t</code> is the table at the given index. The access is raw; that is, it does not invoke metamethods. @@ -4262,7 +4311,7 @@ <p> Pushes onto the stack the value <code>t[k]</code>, -where <code>t</code> is the table at the given valid index and +where <code>t</code> is the table at the given index and <code>k</code> is the pointer <code>p</code> represented as a light userdata. The access is raw; that is, it does not invoke metamethods. @@ -4276,7 +4325,7 @@ <pre>size_t lua_rawlen (lua_State *L, int index);</pre> <p> -Returns the raw "length" of the value at the given acceptable index: +Returns the raw "length" of the value at the given index: for strings, this is the string length; for tables, this is the result of the length operator ('<code>#</code>') with no metamethods; @@ -4306,7 +4355,7 @@ <p> Does the equivalent of <code>t[n] = v</code>, -where <code>t</code> is the table at the given valid index +where <code>t</code> is the table at the given index and <code>v</code> is the value at the top of the stack. @@ -4325,7 +4374,7 @@ <p> Does the equivalent of <code>t[k] = v</code>, -where <code>t</code> is the table at the given valid index, +where <code>t</code> is the table at the given index, <code>k</code> is the pointer <code>p</code> represented as a light userdata, and <code>v</code> is the value at the top of the stack. @@ -4384,7 +4433,7 @@ <p> Removes the element at the given valid index, shifting down the elements above this index to fill the gap. -Cannot be called with a pseudo-index, +This function cannot be called with a pseudo-index, because a pseudo-index is not an actual stack position. @@ -4396,9 +4445,9 @@ <pre>void lua_replace (lua_State *L, int index);</pre> <p> -Moves the top element into the given position +Moves the top element into the given valid index without shifting any element -(therefore replacing the value at the given position), +(therefore replacing the value at the given index), and then pops the top element. @@ -4436,7 +4485,9 @@ <p> -To resume a coroutine, you put on its stack only the values to +To resume a coroutine, +you remove any results from the last <a href="#lua_yield"><code>lua_yield</code></a>, +put on its stack only the values to be passed as results from <code>yield</code>, and then call <a href="#lua_resume"><code>lua_resume</code></a>. @@ -4468,7 +4519,7 @@ <p> Does the equivalent to <code>t[k] = v</code>, -where <code>t</code> is the value at the given valid index +where <code>t</code> is the value at the given index and <code>v</code> is the value at the top of the stack. @@ -4499,8 +4550,7 @@ <p> Pops a table from the stack and -sets it as the new metatable for the value at the given -acceptable index. +sets it as the new metatable for the value at the given index. @@ -4512,7 +4562,7 @@ <p> Does the equivalent to <code>t[k] = v</code>, -where <code>t</code> is the value at the given valid index, +where <code>t</code> is the value at the given index, <code>v</code> is the value at the top of the stack, and <code>k</code> is the value just below the top. @@ -4531,7 +4581,7 @@ <pre>void lua_settop (lua_State *L, int index);</pre> <p> -Accepts any acceptable index, or 0, +Accepts any index, or 0, and sets the stack top to this index. If the new top is larger than the old one, then the new elements are filled with <b>nil</b>. @@ -4603,13 +4653,12 @@ <pre>int lua_toboolean (lua_State *L, int index);</pre> <p> -Converts the Lua value at the given acceptable index to a C boolean +Converts the Lua value at the given index to a C boolean value (0 or 1). Like all tests in Lua, <a href="#lua_toboolean"><code>lua_toboolean</code></a> returns true for any Lua value different from <b>false</b> and <b>nil</b>; otherwise it returns false. -It also returns false when called with a non-valid index. (If you want to accept only actual boolean values, use <a href="#lua_isboolean"><code>lua_isboolean</code></a> to test the value's type.) @@ -4622,7 +4671,7 @@ <pre>lua_CFunction lua_tocfunction (lua_State *L, int index);</pre> <p> -Converts a value at the given acceptable index to a C function. +Converts a value at the given index to a C function. That value must be a C function; otherwise, returns <code>NULL</code>. @@ -4646,7 +4695,7 @@ <pre>lua_Integer lua_tointegerx (lua_State *L, int index, int *isnum);</pre> <p> -Converts the Lua value at the given acceptable index +Converts the Lua value at the given index to the signed integral type <a href="#lua_Integer"><code>lua_Integer</code></a>. The Lua value must be a number or a string convertible to a number (see <a href="#3.4.2">§3.4.2</a>); @@ -4672,7 +4721,7 @@ <pre>const char *lua_tolstring (lua_State *L, int index, size_t *len);</pre> <p> -Converts the Lua value at the given acceptable index to a C string. +Converts the Lua value at the given index to a C string. If <code>len</code> is not <code>NULL</code>, it also sets <code>*len</code> with the string length. The Lua value must be a string or a number; @@ -4714,7 +4763,7 @@ <pre>lua_Number lua_tonumberx (lua_State *L, int index, int *isnum);</pre> <p> -Converts the Lua value at the given acceptable index +Converts the Lua value at the given index to the C type <a href="#lua_Number"><code>lua_Number</code></a> (see <a href="#lua_Number"><code>lua_Number</code></a>). The Lua value must be a number or a string convertible to a number (see <a href="#3.4.2">§3.4.2</a>); @@ -4735,7 +4784,7 @@ <pre>const void *lua_topointer (lua_State *L, int index);</pre> <p> -Converts the value at the given acceptable index to a generic +Converts the value at the given index to a generic C pointer (<code>void*</code>). The value can be a userdata, a table, a thread, or a function; otherwise, <code>lua_topointer</code> returns <code>NULL</code>. @@ -4766,7 +4815,7 @@ <pre>lua_State *lua_tothread (lua_State *L, int index);</pre> <p> -Converts the value at the given acceptable index to a Lua thread +Converts the value at the given index to a Lua thread (represented as <code>lua_State*</code>). This value must be a thread; otherwise, the function returns <code>NULL</code>. @@ -4791,7 +4840,7 @@ <pre>lua_Unsigned lua_tounsignedx (lua_State *L, int index, int *isnum);</pre> <p> -Converts the Lua value at the given acceptable index +Converts the Lua value at the given index to the unsigned integral type <a href="#lua_Unsigned"><code>lua_Unsigned</code></a>. The Lua value must be a number or a string convertible to a number (see <a href="#3.4.2">§3.4.2</a>); @@ -4820,7 +4869,7 @@ <pre>void *lua_touserdata (lua_State *L, int index);</pre> <p> -If the value at the given acceptable index is a full userdata, +If the value at the given index is a full userdata, returns its block address. If the value is a light userdata, returns its pointer. @@ -4835,8 +4884,8 @@ <pre>int lua_type (lua_State *L, int index);</pre> <p> -Returns the type of the value in the given acceptable index, -or <code>LUA_TNONE</code> for a non-valid index. +Returns the type of the value in the given valid index, +or <code>LUA_TNONE</code> for a non-valid (but acceptable) index. The types returned by <a href="#lua_type"><code>lua_type</code></a> are coded by the following constants defined in <code>lua.h</code>: <a name="pdf-LUA_TNIL"><code>LUA_TNIL</code></a>, @@ -4882,6 +4931,18 @@ +<hr><h3><a name="lua_upvalueindex"><code>lua_upvalueindex</code></a></h3><p> +<span class="apii">[-0, +0, –]</span> +<pre>int lua_upvalueindex (int i);</pre> + +<p> +Returns the pseudo-index that represents the <code>i</code>-th upvalue of +the running function (see <a href="#4.4">§4.4</a>). + + + + + <hr><h3><a name="lua_version"><code>lua_version</code></a></h3><p> <span class="apii">[-0, +0, <em>v</em>]</span> <pre>const lua_Number *lua_version (lua_State *L);</pre> @@ -6095,7 +6156,7 @@ <p> Ensures that the value <code>t[fname]</code>, -where <code>t</code> is the value at the valid index <code>idx</code>, +where <code>t</code> is the value at index <code>idx</code>, is a table, and pushes that table onto the stack. Returns true if it finds a previous table there @@ -6127,7 +6188,7 @@ <pre>int luaL_len (lua_State *L, int index);</pre> <p> -Returns the "length" of the value at the given acceptable index +Returns the "length" of the value at the given index as a number; it is equivalent to the '<code>#</code>' operator in Lua (see <a href="#3.4.6">§3.4.6</a>). Raises an error if the result of the operation is not a number. @@ -6242,7 +6303,7 @@ <hr><h3><a name="luaL_newlib"><code>luaL_newlib</code></a></h3><p> <span class="apii">[-0, +1, <em>e</em>]</span> -<pre>int luaL_newlib (lua_State *L, const luaL_Reg *l);</pre> +<pre>void luaL_newlib (lua_State *L, const luaL_Reg *l);</pre> <p> Creates a new table and registers there @@ -6258,7 +6319,7 @@ <hr><h3><a name="luaL_newlibtable"><code>luaL_newlibtable</code></a></h3><p> <span class="apii">[-0, +1, <em>e</em>]</span> -<pre>int luaL_newlibtable (lua_State *L, const luaL_Reg l[]);</pre> +<pre>void luaL_newlibtable (lua_State *L, const luaL_Reg l[]);</pre> <p> Creates a new table with a size optimized @@ -6622,7 +6683,7 @@ <pre>const char *luaL_tolstring (lua_State *L, int idx, size_t *len);</pre> <p> -Converts any Lua value at the given acceptable index to a C string +Converts any Lua value at the given index to a C string in a reasonable format. The resulting string is pushed onto the stack and also returned by the function. @@ -6986,11 +7047,14 @@ <p> If the resulting function has upvalues, -the first upvalue is set to the value of the -global environment or to <code>env</code>, -if that parameter is given. -When loading main chunks, -the first upvalue will be the <code>_ENV</code> variable (see <a href="#2.2">§2.2</a>). +the first upvalue is set to the value of <code>env</code>, +if that parameter is given, +or to the value of the global environment. +(When you load a main chunk, +the resulting function will always have exactly one upvalue, +the <code>_ENV</code> variable (see <a href="#2.2">§2.2</a>). +When you load a binary chunk created from a function (see <a href="#pdf-string.dump"><code>string.dump</code></a>), +the resulting function can have arbitrary upvalues.) <p> @@ -7510,7 +7574,6 @@ <p> - <hr><h3><a name="pdf-package.loaded"><code>package.loaded</code></a></h3> @@ -7546,7 +7609,8 @@ Otherwise, it looks for a function <code>funcname</code> inside the library and returns this function as a C function. -(So, <code>funcname</code> must follow the prototype <a href="#lua_CFunction"><code>lua_CFunction</code></a>). +So, <code>funcname</code> must follow the <a href="#lua_CFunction"><code>lua_CFunction</code></a> prototype +(see <a href="#lua_CFunction"><code>lua_CFunction</code></a>). <p> @@ -7842,7 +7906,7 @@ <p> Returns a formatted version of its variable number of arguments following the description given in its first argument (which must be a string). -The format string follows the same rules as the C function <code>sprintf</code>. +The format string follows the same rules as the ANSI C function <code>sprintf</code>. The only differences are that the options/modifiers <code>*</code>, <code>h</code>, <code>L</code>, <code>l</code>, <code>n</code>, and <code>p</code> are not supported @@ -8306,7 +8370,7 @@ <p> Given a list where all elements are strings or numbers, -returns <code>list[i]..sep..list[i+1] ··· sep..list[j]</code>. +returns the string <code>list[i]..sep..list[i+1] ··· sep..list[j]</code>. The default value for <code>sep</code> is the empty string, the default for <code>i</code> is 1, and the default for <code>j</code> is <code>#list</code>. @@ -8348,10 +8412,17 @@ <p> Removes from <code>list</code> the element at position <code>pos</code>, -shifting down the elements +returning the value of the removed element. +When <code>pos</code> is an integer between 1 and <code>#list</code>, +it shifts down the elements <code>list[pos+1], list[pos+2], ···, list[#list]</code> -and erasing element <code>list[#list]</code>. -Returns the value of the removed element. +and erases element <code>list[#list]</code>; +The index <code>pos</code> can also be 0 when <code>#list</code> is 0, +or <code>#list + 1</code>; +in those cases, the function erases the element <code>list[pos]</code>. + + +<p> The default value for <code>pos</code> is <code>#list</code>, so that a call <code>table.remove(t)</code> removes the last element of list <code>t</code>. @@ -8990,6 +9061,11 @@ (plus an error message as a second result and a system-dependent error code as a third result) and some value different from <b>nil</b> on success. +On non-Posix systems, +the computation of the error message and error code +in case of errors +may be not thread safe, +because they rely on the global C variable <code>errno</code>. <p> @@ -9410,7 +9486,7 @@ <p> If <code>format</code> is not "<code>*t</code>", then <code>date</code> returns the date as a string, -formatted according to the same rules as the C function <code>strftime</code>. +formatted according to the same rules as the ANSI C function <code>strftime</code>. <p> @@ -9421,8 +9497,9 @@ <p> -On some systems, -this function may be not thread safe. +On non-Posix systems, +this function may be not thread safe +because of its reliance on C function <code>gmtime</code> and C function <code>localtime</code>. @@ -9444,7 +9521,7 @@ <p> -This function is equivalent to the C function <code>system</code>. +This function is equivalent to the ANSI C function <code>system</code>. It passes <code>command</code> to be executed by an operating system shell. Its first result is <b>true</b> if the command terminated successfully, @@ -9479,7 +9556,7 @@ <p> -Calls the C function <code>exit</code> to terminate the host program. +Calls the ANSI C function <code>exit</code> to terminate the host program. If <code>code</code> is <b>true</b>, the returned status is <code>EXIT_SUCCESS</code>; if <code>code</code> is <b>false</b>, @@ -9560,8 +9637,13 @@ for the given category. +<p> +This function may be not thread safe +because of its reliance on C function <code>setlocale</code>. + + <p> <hr><h3><a name="pdf-os.time"><code>os.time ([table])</code></a></h3> @@ -9746,7 +9828,7 @@ <p> -Variable names starting with '<code>(</code>' (open parentheses) +Variable names starting with '<code>(</code>' (open parenthesis) represent internal variables (loop control variables, temporaries, varargs, and C function locals). @@ -10415,10 +10497,10 @@ <HR> <SMALL CLASS="footer"> Last update: -Fri Jun 8 16:13:40 BRT 2012 +Thu Mar 21 12:58:59 BRT 2013 </SMALL> <!-- -Last change: revised for Lua 5.2.1 +Last change: revised for Lua 5.2.2 --> </body></html> Modified: trunk/mmex/lib/lua/doc/readme.html =================================================================== --- trunk/mmex/lib/lua/doc/readme.html 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/doc/readme.html 2013-06-09 00:35:36 UTC (rev 4051) @@ -109,7 +109,7 @@ <OL> <LI> Open a terminal window and move to -the top-level directory, which is named <TT>lua-5.2.1</TT>. +the top-level directory, which is named <TT>lua-5.2.2</TT>. The Makefile there controls both the build process and the installation process. <P> <LI> @@ -140,6 +140,8 @@ <P> If you're running Linux and get compilation errors, make sure you have installed the <TT>readline</TT> development package. +If you get link errors after that, +then try "<KBD>make linux MYLIBS=-ltermcap</KBD>". <H3>Installing Lua</H3> <P> @@ -372,7 +374,7 @@ <A HREF="http://www.lua.org/license.html">this</A>. <BLOCKQUOTE STYLE="padding-bottom: 0em"> -Copyright © 1994–2012 Lua.org, PUC-Rio. +Copyright © 1994–2013 Lua.org, PUC-Rio. <P> Permission is hereby granted, free of charge, to any person obtaining a copy @@ -400,10 +402,10 @@ <HR> <SMALL CLASS="footer"> Last update: -Tue May 29 21:57:51 BRT 2012 +Fri Feb 22 09:24:20 BRT 2013 </SMALL> <!-- -Last change: revised for Lua 5.2.1 +Last change: revised for Lua 5.2.2 --> </BODY> Modified: trunk/mmex/lib/lua/src/Makefile =================================================================== --- trunk/mmex/lib/lua/src/Makefile 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/src/Makefile 2013-06-09 00:35:36 UTC (rev 4051) @@ -103,7 +103,7 @@ generic: $(ALL) linux: - $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline -lncurses" + $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline" macosx: $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_MACOSX" SYSLIBS="-lreadline" Modified: trunk/mmex/lib/lua/src/lapi.c =================================================================== --- trunk/mmex/lib/lua/src/lapi.c 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/src/lapi.c 2013-06-09 00:35:36 UTC (rev 4051) @@ -1,5 +1,5 @@ /* -** $Id: lapi.c,v 2.164 2012/06/08 15:14:04 roberto Exp $ +** $Id: lapi.c,v 2.171 2013/03/16 21:10:18 roberto Exp $ ** Lua API ** See Copyright Notice in lua.h */ @@ -40,9 +40,18 @@ /* corresponding test */ #define isvalid(o) ((o) != luaO_nilobject) -#define api_checkvalidindex(L, i) api_check(L, isvalid(i), "invalid index") +/* test for pseudo index */ +#define ispseudo(i) ((i) <= LUA_REGISTRYINDEX) +/* test for valid but not pseudo index */ +#define isstackindex(i, o) (isvalid(o) && !ispseudo(i)) +#define api_checkvalidindex(L, o) api_check(L, isvalid(o), "invalid index") + +#define api_checkstackindex(L, i, o) \ + api_check(L, isstackindex(i, o), "index not in the stack") + + static TValue *index2addr (lua_State *L, int idx) { CallInfo *ci = L->ci; if (idx > 0) { @@ -51,7 +60,7 @@ if (o >= L->top) return NONVALIDVALUE; else return o; } - else if (idx > LUA_REGISTRYINDEX) { + else if (!ispseudo(idx)) { /* negative index */ api_check(L, idx != 0 && -idx <= L->top - (ci->func + 1), "invalid index"); return L->top + idx; } @@ -142,7 +151,7 @@ ** convert an acceptable stack index into an absolute index */ LUA_API int lua_absindex (lua_State *L, int idx) { - return (idx > 0 || idx <= LUA_REGISTRYINDEX) + return (idx > 0 || ispseudo(idx)) ? idx : cast_int(L->top - L->ci->func + idx); } @@ -174,7 +183,7 @@ StkId p; lua_lock(L); p = index2addr(L, idx); - api_checkvalidindex(L, p); + api_checkstackindex(L, idx, p); while (++p < L->top) setobjs2s(L, p-1, p); L->top--; lua_unlock(L); @@ -186,8 +195,9 @@ StkId q; lua_lock(L); p = index2addr(L, idx); - api_checkvalidindex(L, p); - for (q = L->top; q>p; q--) setobjs2s(L, q, q-1); + api_checkstackindex(L, idx, p); + for (q = L->top; q > p; q--) /* use L->top as a temporary */ + setobjs2s(L, q, q - 1); setobjs2s(L, p, L->top); lua_unlock(L); } @@ -217,7 +227,6 @@ TValue *fr; lua_lock(L); fr = index2addr(L, fromidx); - api_checkvalidindex(L, fr); moveto(L, fr, toidx); lua_unlock(L); } @@ -281,7 +290,7 @@ } -LUA_API void lua_arith (lua_State *L, int op) { +LUA_API void lua_arith (lua_State *L, int op) { StkId o1; /* 1st operand */ StkId o2; /* 2nd operand */ lua_lock(L); @@ -295,7 +304,7 @@ o1 = L->top - 2; o2 = L->top - 1; if (ttisnumber(o1) && ttisnumber(o2)) { - changenvalue(o1, luaO_arith(op, nvalue(o1), nvalue(o2))); + setnvalue(o1, luaO_arith(op, nvalue(o1), nvalue(o2))); } else luaV_arith(L, o1, o1, o2, cast(TMS, op - LUA_OPADD + TM_ADD)); @@ -611,7 +620,6 @@ StkId t; lua_lock(L); t = index2addr(L, idx); - api_checkvalidindex(L, t); luaV_gettable(L, t, L->top - 1, L->top - 1); lua_unlock(L); } @@ -621,7 +629,6 @@ StkId t; lua_lock(L); t = index2addr(L, idx); - api_checkvalidindex(L, t); setsvalue2s(L, L->top, luaS_new(L, k)); api_incr_top(L); luaV_gettable(L, t, L->top - 1, L->top - 1); @@ -709,7 +716,6 @@ StkId o; lua_lock(L); o = index2addr(L, idx); - api_checkvalidindex(L, o); api_check(L, ttisuserdata(o), "userdata expected"); if (uvalue(o)->env) { sethvalue(L, L->top, uvalue(o)->env); @@ -743,7 +749,6 @@ lua_lock(L); api_checknelems(L, 2); t = index2addr(L, idx); - api_checkvalidindex(L, t); luaV_settable(L, t, L->top - 2, L->top - 1); L->top -= 2; /* pop index and value */ lua_unlock(L); @@ -755,7 +760,6 @@ lua_lock(L); api_checknelems(L, 1); t = index2addr(L, idx); - api_checkvalidindex(L, t); setsvalue2s(L, L->top++, luaS_new(L, k)); luaV_settable(L, t, L->top - 1, L->top - 2); L->top -= 2; /* pop value and key */ @@ -811,7 +815,6 @@ lua_lock(L); api_checknelems(L, 1); obj = index2addr(L, objindex); - api_checkvalidindex(L, obj); if (ttisnil(L->top - 1)) mt = NULL; else { @@ -821,9 +824,10 @@ switch (ttypenv(obj)) { case LUA_TTABLE: { hvalue(obj)->metatable = mt; - if (mt) + if (mt) { luaC_objbarrierback(L, gcvalue(obj), mt); luaC_checkfinalizer(L, gcvalue(obj), mt); + } break; } case LUA_TUSERDATA: { @@ -850,7 +854,6 @@ lua_lock(L); api_checknelems(L, 1); o = index2addr(L, idx); - api_checkvalidindex(L, o); api_check(L, ttisuserdata(o), "userdata expected"); if (ttisnil(L->top - 1)) uvalue(o)->env = NULL; @@ -937,7 +940,7 @@ func = 0; else { StkId o = index2addr(L, errfunc); - api_checkvalidindex(L, o); + api_checkstackindex(L, errfunc, o); func = savestack(L, o); } c.func = L->top - (nargs+1); /* function to be called */ @@ -1006,7 +1009,7 @@ } -LUA_API int lua_status (lua_State *L) { +LUA_API int lua_status (lua_State *L) { return L->status; } @@ -1103,7 +1106,7 @@ lua_lock(L); api_checknelems(L, 1); luaG_errormsg(L); - lua_unlock(L); + /* code unreachable; will unlock when control actually leaves the kernel */ return 0; /* to avoid warnings */ } Modified: trunk/mmex/lib/lua/src/lauxlib.c =================================================================== --- trunk/mmex/lib/lua/src/lauxlib.c 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/src/lauxlib.c 2013-06-09 00:35:36 UTC (rev 4051) @@ -1,5 +1,5 @@ /* -** $Id: lauxlib.c,v 1.244 2012/05/31 20:28:45 roberto Exp $ +** $Id: lauxlib.c,v 1.248 2013/03/21 13:54:57 roberto Exp $ ** Auxiliary functions for building Lua libraries ** See Copyright Notice in lua.h */ @@ -84,7 +84,7 @@ if (*ar->namewhat != '\0') /* is there a name? */ lua_pushfstring(L, "function " LUA_QS, ar->name); else if (*ar->what == 'm') /* main? */ - lua_pushfstring(L, "main chunk"); + lua_pushliteral(L, "main chunk"); else if (*ar->what == 'C') { if (pushglobalfuncname(L, ar)) { lua_pushfstring(L, "function " LUA_QS, lua_tostring(L, -1)); @@ -158,7 +158,8 @@ if (strcmp(ar.namewhat, "method") == 0) { narg--; /* do not count `self' */ if (narg == 0) /* error is in the self argument itself? */ - return luaL_error(L, "calling " LUA_QS " on bad self", ar.name); + return luaL_error(L, "calling " LUA_QS " on bad self (%s)", + ar.name, extramsg); } if (ar.name == NULL) ar.name = (pushglobalfuncname(L, &ar)) ? lua_tostring(L, -1) : "?"; @@ -214,7 +215,7 @@ if (fname) lua_pushfstring(L, "%s: %s", fname, strerror(en)); else - lua_pushfstring(L, "%s", strerror(en)); + lua_pushstring(L, strerror(en)); lua_pushinteger(L, en); return 3; } @@ -438,7 +439,7 @@ if (B->size - B->n < sz) { /* not enough space? */ char *newbuff; size_t newsize = B->size * 2; /* double buffer size */ - if (newsize - B->n < sz) /* not bit enough? */ + if (newsize - B->n < sz) /* not big enough? */ newsize = B->n + sz; if (newsize < B->n || newsize - B->n < sz) luaL_error(L, "buffer too large"); @@ -598,7 +599,7 @@ lf->n = 0; do { c = getc(lf->f); - if (c == EOF || c != *(unsigned char *)p++) return c; + if (c == EOF || c != *(const unsigned char *)p++) return c; lf->buff[lf->n++] = c; /* to be read by the parser */ } while (*p != '\0'); lf->n = 0; /* prefix matched; discard it */ Modified: trunk/mmex/lib/lua/src/lbaselib.c =================================================================== --- trunk/mmex/lib/lua/src/lbaselib.c 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/src/lbaselib.c 2013-06-09 00:35:36 UTC (rev 4051) @@ -1,5 +1,5 @@ /* -** $Id: lbaselib.c,v 1.274 2012/04/27 14:13:19 roberto Exp $ +** $Id: lbaselib.c,v 1.276 2013/02/21 13:44:53 roberto Exp $ ** Basic library ** See Copyright Notice in lua.h */ @@ -242,10 +242,16 @@ } -static int load_aux (lua_State *L, int status) { - if (status == LUA_OK) +static int load_aux (lua_State *L, int status, int envidx) { + if (status == LUA_OK) { + if (envidx != 0) { /* 'env' parameter? */ + lua_pushvalue(L, envidx); /* environment for loaded function */ + if (!lua_setupvalue(L, -2, 1)) /* set it as 1st upvalue */ + lua_pop(L, 1); /* remove 'env' if not used by previous call */ + } return 1; - else { + } + else { /* error (message is on top of the stack) */ lua_pushnil(L); lua_insert(L, -2); /* put before error message */ return 2; /* return nil plus error message */ @@ -256,13 +262,9 @@ static int luaB_loadfile (lua_State *L) { const char *fname = luaL_optstring(L, 1, NULL); const char *mode = luaL_optstring(L, 2, NULL); - int env = !lua_isnone(L, 3); /* 'env' parameter? */ + int env = (!lua_isnone(L, 3) ? 3 : 0); /* 'env' index or 0 if no 'env' */ int status = luaL_loadfilex(L, fname, mode); - if (status == LUA_OK && env) { /* 'env' parameter? */ - lua_pushvalue(L, 3); - lua_setupvalue(L, -2, 1); /* set it as 1st upvalue of loaded chunk */ - } - return load_aux(L, status); + return load_aux(L, status, env); } @@ -307,9 +309,9 @@ static int luaB_load (lua_State *L) { int status; size_t l; - int top = lua_gettop(L); const char *s = lua_tolstring(L, 1, &l); const char *mode = luaL_optstring(L, 3, "bt"); + int env = (!lua_isnone(L, 4) ? 4 : 0); /* 'env' index or 0 if no 'env' */ if (s != NULL) { /* loading a string? */ const char *chunkname = luaL_optstring(L, 2, s); status = luaL_loadbufferx(L, s, l, chunkname, mode); @@ -320,11 +322,7 @@ lua_settop(L, RESERVEDSLOT); /* create reserved slot */ status = lua_load(L, generic_reader, NULL, chunkname, mode); } - if (status == LUA_OK && top >= 4) { /* is there an 'env' argument */ - lua_pushvalue(L, 4); /* environment for loaded function */ - lua_setupvalue(L, -2, 1); /* set it as 1st upvalue */ - } - return load_aux(L, status); + return load_aux(L, status, env); } /* }====================================================== */ @@ -338,7 +336,8 @@ static int luaB_dofile (lua_State *L) { const char *fname = luaL_optstring(L, 1, NULL); lua_settop(L, 1); - if (luaL_loadfile(L, fname) != LUA_OK) lua_error(L); + if (luaL_loadfile(L, fname) != LUA_OK) + return lua_error(L); lua_callk(L, 0, LUA_MULTRET, 0, dofilecont); return dofilecont(L); } Modified: trunk/mmex/lib/lua/src/lbitlib.c =================================================================== --- trunk/mmex/lib/lua/src/lbitlib.c 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/src/lbitlib.c 2013-06-09 00:35:36 UTC (rev 4051) @@ -1,5 +1,5 @@ /* -** $Id: lbitlib.c,v 1.16 2011/06/20 16:35:23 roberto Exp $ +** $Id: lbitlib.c,v 1.18 2013/03/19 13:19:12 roberto Exp $ ** Standard library for bitwise operations ** See Copyright Notice in lua.h */ @@ -147,7 +147,9 @@ /* ** get field and width arguments for field-manipulation functions, -** checking whether they are valid +** checking whether they are valid. +** ('luaL_error' called without 'return' to avoid later warnings about +** 'width' being used uninitialized.) */ static int fieldargs (lua_State *L, int farg, int *width) { int f = luaL_checkint(L, farg); Modified: trunk/mmex/lib/lua/src/lcode.c =================================================================== --- trunk/mmex/lib/lua/src/lcode.c 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/src/lcode.c 2013-06-09 00:35:36 UTC (rev 4051) @@ -1,5 +1,5 @@ /* -** $Id: lcode.c,v 2.60 2011/08/30 16:26:41 roberto Exp $ +** $Id: lcode.c,v 2.62 2012/08/16 17:34:28 roberto Exp $ ** Code generator for Lua ** See Copyright Notice in lua.h */ @@ -330,10 +330,9 @@ setnvalue(&o, r); if (r == 0 || luai_numisnan(NULL, r)) { /* handle -0 and NaN */ /* use raw representation as key to avoid numeric problems */ - setsvalue(L, L->top, luaS_newlstr(L, (char *)&r, sizeof(r))); - incr_top(L); - n = addk(fs, L->top - 1, &o); - L->top--; + setsvalue(L, L->top++, luaS_newlstr(L, (char *)&r, sizeof(r))); + n = addk(fs, L->top - 1, &o); + L->top--; } else n = addk(fs, &o, &o); /* regular case */ @@ -426,7 +425,7 @@ luaK_nil(fs, reg, 1); break; } - case VFALSE: case VTRUE: { + case VFALSE: case VTRUE: { luaK_codeABC(fs, OP_LOADBOOL, reg, e->k == VTRUE, 0); break; } Modified: trunk/mmex/lib/lua/src/lcorolib.c =================================================================== --- trunk/mmex/lib/lua/src/lcorolib.c 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/src/lcorolib.c 2013-06-09 00:35:36 UTC (rev 4051) @@ -1,5 +1,5 @@ /* -** $Id: lcorolib.c,v 1.4 2012/04/27 18:59:04 roberto Exp $ +** $Id: lcorolib.c,v 1.5 2013/02/21 13:44:53 roberto Exp $ ** Coroutine Library ** See Copyright Notice in lua.h */ @@ -73,7 +73,7 @@ lua_insert(L, -2); lua_concat(L, 2); } - lua_error(L); /* propagate error */ + return lua_error(L); /* propagate error */ } return r; } Modified: trunk/mmex/lib/lua/src/ldebug.c =================================================================== --- trunk/mmex/lib/lua/src/ldebug.c 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/src/ldebug.c 2013-06-09 00:35:36 UTC (rev 4051) @@ -1,5 +1,5 @@ /* -** $Id: ldebug.c,v 2.89 2012/01/20 22:05:50 roberto Exp $ +** $Id: ldebug.c,v 2.90 2012/08/16 17:34:28 roberto Exp $ ** Debug Interface ** See Copyright Notice in lua.h */ @@ -196,7 +196,7 @@ static void collectvalidlines (lua_State *L, Closure *f) { if (noLuaClosure(f)) { setnilvalue(L->top); - incr_top(L); + api_incr_top(L); } else { int i; @@ -204,7 +204,7 @@ int *lineinfo = f->l.p->lineinfo; Table *t = luaH_new(L); /* new table to store active lines */ sethvalue(L, L->top, t); /* push it on stack */ - incr_top(L); + api_incr_top(L); setbvalue(&v, 1); /* boolean 'true' to be the value of all indices */ for (i = 0; i < f->l.p->sizelineinfo; i++) /* for all lines with code */ luaH_setint(L, t, lineinfo[i], &v); /* table[line] = true */ @@ -285,7 +285,7 @@ status = auxgetinfo(L, what, ar, cl, ci); if (strchr(what, 'f')) { setobjs2s(L, L->top, func); - incr_top(L); + api_incr_top(L); } if (strchr(what, 'L')) collectvalidlines(L, cl); @@ -563,7 +563,7 @@ if (!ttisfunction(errfunc)) luaD_throw(L, LUA_ERRERR); setobjs2s(L, L->top, L->top - 1); /* move argument */ setobjs2s(L, L->top - 1, errfunc); /* push function */ - incr_top(L); + L->top++; luaD_call(L, L->top - 2, 1, 0); /* call it */ } luaD_throw(L, LUA_ERRRUN); Modified: trunk/mmex/lib/lua/src/ldo.c =================================================================== --- trunk/mmex/lib/lua/src/ldo.c 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/src/ldo.c 2013-06-09 00:35:36 UTC (rev 4051) @@ -1,5 +1,5 @@ /* -** $Id: ldo.c,v 2.105 2012/06/08 15:14:04 roberto Exp $ +** $Id: ldo.c,v 2.108 2012/10/01 14:05:04 roberto Exp $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ @@ -311,6 +311,7 @@ ci->top = L->top + LUA_MINSTACK; lua_assert(ci->top <= L->stack_last); ci->callstatus = 0; + luaC_checkGC(L); /* stack grow uses memory */ if (L->hookmask & LUA_MASKCALL) luaD_hook(L, LUA_HOOKCALL, -1); lua_unlock(L); @@ -338,6 +339,7 @@ ci->u.l.savedpc = p->code; /* starting point */ ci->callstatus = CIST_LUA; L->top = ci->top; + luaC_checkGC(L); /* stack grow uses memory */ if (L->hookmask & LUA_MASKCALL) callhook(L, ci); return 0; @@ -393,7 +395,6 @@ luaV_execute(L); /* call it */ if (!allowyield) L->nny--; L->nCcalls--; - luaC_checkGC(L); } @@ -402,7 +403,11 @@ int n; lua_assert(ci->u.c.k != NULL); /* must have a continuation */ lua_assert(L->nny == 0); - /* finish 'lua_callk' */ + if (ci->callstatus & CIST_YPCALL) { /* was inside a pcall? */ + ci->callstatus &= ~CIST_YPCALL; /* finish 'lua_pcall' */ + L->errfunc = ci->u.c.old_errfunc; + } + /* finish 'lua_callk'/'lua_pcall' */ adjustresults(L, ci->nresults); /* call continuation function */ if (!(ci->callstatus & CIST_STAT)) /* no call status? */ @@ -473,7 +478,7 @@ static l_noret resume_error (lua_State *L, const char *msg, StkId firstArg) { L->top = firstArg; /* remove args from the stack */ setsvalue2s(L, L->top, luaS_new(L, msg)); /* push error message */ - incr_top(L); + api_incr_top(L); luaD_throw(L, -1); /* jump back to 'lua_resume' */ } @@ -558,7 +563,7 @@ api_checknelems(L, nresults); if (L->nny > 0) { if (L != G(L)->mainthread) - luaG_runerror(L, "attempt to yield across metamethod/C-call boundary"); + luaG_runerror(L, "attempt to yield across a C-call boundary"); else luaG_runerror(L, "attempt to yield from outside a coroutine"); } Modified: trunk/mmex/lib/lua/src/lfunc.c =================================================================== --- trunk/mmex/lib/lua/src/lfunc.c 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/src/lfunc.c 2013-06-09 00:35:36 UTC (rev 4051) @@ -1,5 +1,5 @@ /* -** $Id: lfunc.c,v 2.29 2012/05/08 13:53:33 roberto Exp $ +** $Id: lfunc.c,v 2.30 2012/10/03 12:36:46 roberto Exp $ ** Auxiliary functions to manipulate prototypes and closures ** See Copyright Notice in lua.h */ @@ -52,12 +52,12 @@ while (*pp != NULL && (p = gco2uv(*pp))->v >= level) { GCObject *o = obj2gco(p); lua_assert(p->v != &p->u.value); + lua_assert(!isold(o) || isold(obj2gco(L))); if (p->v == level) { /* found a corresponding upvalue? */ if (isdead(g, o)) /* is it dead? */ changewhite(o); /* resurrect it */ return p; } - resetoldbit(o); /* may create a newer upval after this one */ pp = &p->next; } /* not found: create a new one */ Modified: trunk/mmex/lib/lua/src/lgc.c =================================================================== --- trunk/mmex/lib/lua/src/lgc.c 2013-06-09 00:30:34 UTC (rev 4050) +++ trunk/mmex/lib/lua/src/lgc.c 2013-06-09 00:35:36 UTC (rev 4051) @@ -1,5 +1,5 @@ /* -** $Id: lgc.c,v 2.133 2012/05/31 21:28:59 roberto Exp $ +** $Id: lgc.c,v 2.140 2013/03/16 21:10:18 roberto Exp $ ** Garbage Collector ** See Copyright Notice in lua.h */ @@ -43,24 +43,15 @@ */ #define STEPMULADJ 200 + /* ** macro to adjust 'pause': 'pause' is actually used like ** 'pause / PAUSEADJ' (value chosen by tests) */ -#define PAUSEADJ 200 +#define PAUSEADJ 100 - - /* -** standard negative debt for GC; a reasonable "time" to wait before -** starting a new cycle -*/ -#define stddebtest(g,e) (-cast(l_mem, (e)/PAUSEADJ) * g->gcpause) -#define stddebt(g) stddebtest(g, gettotalbytes(g)) - - -/* ** 'makewhite' erases all color bits plus the old bit and then ** sets only the current white bit */ @@ -144,9 +135,9 @@ void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v) { global_State *g = G(L); lua_assert(isblack(o) && iswhite(v) && !isdead(g, v) && !isdead(g, o)); - lua_assert(isgenerational(g) || g->gcstate != GCSpause); + lua_assert(g->gcstate != GCSpause); lua_assert(gch(o)->tt != LUA_TTABLE); - if (keepinvariant(g)) /* must keep invariant? */ + if (keepinvariantout(g)) /* must keep invariant? */ reallymarkobject(g, v); /* restore invariant */ else { /* sweep phase */ lua_assert(issweepphase(g)); @@ -343,7 +334,7 @@ ** mark root set and reset all gray lists, to start a new ** incremental (or full) collection */ -static void markroot (global_State *g) { +static void restartcollection (global_State *g) { g->gray = g->grayagain = NULL; g->weak = g->allweak = g->ephemeron = NULL; markobject(g, g->mainthread); @@ -459,7 +450,7 @@ else /* not weak */ traversestrongtable(g, h); return sizeof(Table) + sizeof(TValue) * h->sizearray + - sizeof(Node) * sizenode(h); + sizeof(Node) * cast(size_t, sizenode(h)); } @@ -796,7 +787,7 @@ g->allgc = o; resetbit(gch(o)->marked, SEPARATED); /* mark that it is not in 'tobefnz' */ lua_assert(!isold(o)); /* see MOVE OLD rule */ - if (!keepinvariant(g)) /* not keeping invariant? */ + if (!keepinvariantout(g)) /* not keeping invariant? */ makewhite(g, o); /* "sweep" object */ return o; } @@ -855,7 +846,7 @@ while ((curr = *p) != NULL) { /* traverse all finalizable objects */ lua_assert(!isfinalized(curr)); lua_assert(testbit(gch(curr)->marked, SEPARATED)); - if (!(all || iswhite(curr))) /* not being collected? */ + if (!(iswhite(curr) || all)) /* not being collected? */ p = &gch(curr)->next; /* don't bother with it */ else { l_setbit(gch(curr)->marked, FINALIZEDBIT); /* won't be finalized again */ @@ -891,7 +882,7 @@ ho->next = g->finobj; /* link it in list 'finobj' */ g->finobj = o; l_setbit(ho->marked, SEPARATED); /* mark it as such */ - if (!keepinvariant(g)) /* not keeping invariant? */ + if (!keepinvariantout(g)) /* not keeping invariant? */ makewhite(g, o); /* "sweep" object */ else resetoldbit(o); /* see MOVE OLD rule */ @@ -908,6 +899,21 @@ */ +/* +** set a reasonable "time" to wait before starting a new GC cycle; +** cycle will start when memory use hits threshold +*/ +static void setpause (global_State *g, l_mem estimate) { + l_mem debt, threshold; + estimate = estimate / PAUSEADJ; /* adjust 'estimate' */ + threshold = (g->gcpause < MAX_LMEM / esti... [truncated message content] |