History

Lua 5.2.1-rc3

Lua Team committed 14 years ago

Commit daa74971 parent b19ccd47 files · +114 −85Browse files

Unified · Split

7 files
  1. README +1 −1
  2. doc/manual.html +45 −46
  3. doc/readme.html +1 −2
  4. src/lauxlib.c +3 −3
  5. src/lgc.c +59 −28
  6. src/loadlib.c +3 −3
  7. src/lstate.c +2 −2
README+1−1
@@ -1,5 +1,5 @@
1 1
2This is Lua 5.2.1, released on 23 May 2012.2This is Lua 5.2.1, released on 01 Jun 2012.
3 3
4For installation instructions, license details, and4For installation instructions, license details, and
5further information about Lua, see doc/readme.html.5further information about Lua, see doc/readme.html.
doc/manual.html+45−46
@@ -33,7 +33,7 @@ Freely available under the terms of the · 32 unmodified lines
33<!-- ====================================================================== -->33<!-- ====================================================================== -->
34<p>34<p>
35 35
36<!-- $Id: manual.of,v 1.97 2012/05/23 15:50:01 roberto Exp $ -->36<!-- $Id: manual.of,v 1.98 2012/05/31 13:01:09 roberto Exp $ -->
37 37
38 38
39 39
@@ -2828,8 +2828,7 @@ by looking only at its arguments · 2788 unmodified lines
2828The third field, <code>x</code>,2828The third field, <code>x</code>,
2829tells whether the function may throw errors:2829tells whether the function may throw errors:
2830'<code>-</code>' means the function never throws any error;2830'<code>-</code>' means the function never throws any error;
2831'<code>m</code>' means the function may throw only memory allocation errors;2831'<code>e</code>' means the function may throw errors;
2832'<code>e</code>' means the function may throw other kinds of errors;
2833'<code>v</code>' means the function may throw an error on purpose.2832'<code>v</code>' means the function may throw an error on purpose.
2834 2833
2835 2834
@@ -3191,7 +3190,7 @@ without shifting any element · 355 unmodified lines
3191 3190
3192 3191
3193<hr><h3><a name="lua_createtable"><code>lua_createtable</code></a></h3><p>3192<hr><h3><a name="lua_createtable"><code>lua_createtable</code></a></h3><p>
3194<span class="apii">[-0, +1, <em>m</em>]</span>3193<span class="apii">[-0, +1, <em>e</em>]</span>
3195<pre>void lua_createtable (lua_State *L, int narr, int nrec);</pre>3194<pre>void lua_createtable (lua_State *L, int narr, int nrec);</pre>
3196 3195
3197<p>3196<p>
@@ -3210,7 +3209,7 @@ Otherwise you can use the function <a href="#lua_newtable"><code>lua_newtable</c · 12 unmodified lines
3210 3209
3211 3210
3212<hr><h3><a name="lua_dump"><code>lua_dump</code></a></h3><p>3211<hr><h3><a name="lua_dump"><code>lua_dump</code></a></h3><p>
3213<span class="apii">[-0, +0, <em>m</em>]</span>3212<span class="apii">[-0, +0, <em>e</em>]</span>
3214<pre>int lua_dump (lua_State *L, lua_Writer writer, void *data);</pre>3213<pre>int lua_dump (lua_State *L, lua_Writer writer, void *data);</pre>
3215 3214
3216<p>3215<p>
@@ -3748,7 +3747,7 @@ passes to the allocator in every call. · 531 unmodified lines
3748 3747
3749 3748
3750<hr><h3><a name="lua_newtable"><code>lua_newtable</code></a></h3><p>3749<hr><h3><a name="lua_newtable"><code>lua_newtable</code></a></h3><p>
3751<span class="apii">[-0, +1, <em>m</em>]</span>3750<span class="apii">[-0, +1, <em>e</em>]</span>
3752<pre>void lua_newtable (lua_State *L);</pre>3751<pre>void lua_newtable (lua_State *L);</pre>
3753 3752
3754<p>3753<p>
@@ -3760,7 +3759,7 @@ It is equivalent to <code>lua_createtable(L, 0, 0)</code>. · 5 unmodified lines
3760 3759
3761 3760
3762<hr><h3><a name="lua_newthread"><code>lua_newthread</code></a></h3><p>3761<hr><h3><a name="lua_newthread"><code>lua_newthread</code></a></h3><p>
3763<span class="apii">[-0, +1, <em>m</em>]</span>3762<span class="apii">[-0, +1, <em>e</em>]</span>
3764<pre>lua_State *lua_newthread (lua_State *L);</pre>3763<pre>lua_State *lua_newthread (lua_State *L);</pre>
3765 3764
3766<p>3765<p>
@@ -3781,7 +3780,7 @@ like any Lua object. · 14 unmodified lines
3781 3780
3782 3781
3783<hr><h3><a name="lua_newuserdata"><code>lua_newuserdata</code></a></h3><p>3782<hr><h3><a name="lua_newuserdata"><code>lua_newuserdata</code></a></h3><p>
3784<span class="apii">[-0, +1, <em>m</em>]</span>3783<span class="apii">[-0, +1, <em>e</em>]</span>
3785<pre>void *lua_newuserdata (lua_State *L, size_t size);</pre>3784<pre>void *lua_newuserdata (lua_State *L, size_t size);</pre>
3786 3785
3787<p>3786<p>
@@ -3967,7 +3966,7 @@ Pushes a boolean value with value <code>b</code> onto the stack. · 179 unmodified lines
3967 3966
3968 3967
3969<hr><h3><a name="lua_pushcclosure"><code>lua_pushcclosure</code></a></h3><p>3968<hr><h3><a name="lua_pushcclosure"><code>lua_pushcclosure</code></a></h3><p>
3970<span class="apii">[-n, +1, <em>m</em>]</span>3969<span class="apii">[-n, +1, <em>e</em>]</span>
3971<pre>void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);</pre>3970<pre>void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);</pre>
3972 3971
3973<p>3972<p>
@@ -4033,7 +4032,7 @@ Note that <code>f</code> is used twice. · 59 unmodified lines
4033 4032
4034 4033
4035<hr><h3><a name="lua_pushfstring"><code>lua_pushfstring</code></a></h3><p>4034<hr><h3><a name="lua_pushfstring"><code>lua_pushfstring</code></a></h3><p>
4036<span class="apii">[-0, +1, <em>m</em>]</span>4035<span class="apii">[-0, +1, <em>e</em>]</span>
4037<pre>const char *lua_pushfstring (lua_State *L, const char *fmt, ...);</pre>4036<pre>const char *lua_pushfstring (lua_State *L, const char *fmt, ...);</pre>
4038 4037
4039<p>4038<p>
@@ -4100,7 +4099,7 @@ light userdata with the same C&nbsp;address. · 60 unmodified lines
4100 4099
4101 4100
4102<hr><h3><a name="lua_pushliteral"><code>lua_pushliteral</code></a></h3><p>4101<hr><h3><a name="lua_pushliteral"><code>lua_pushliteral</code></a></h3><p>
4103<span class="apii">[-0, +1, <em>m</em>]</span>4102<span class="apii">[-0, +1, <em>e</em>]</span>
4104<pre>const char *lua_pushliteral (lua_State *L, const char *s);</pre>4103<pre>const char *lua_pushliteral (lua_State *L, const char *s);</pre>
4105 4104
4106<p>4105<p>
@@ -4113,7 +4112,7 @@ It automatically provides the string length. · 6 unmodified lines
4113 4112
4114 4113
4115<hr><h3><a name="lua_pushlstring"><code>lua_pushlstring</code></a></h3><p>4114<hr><h3><a name="lua_pushlstring"><code>lua_pushlstring</code></a></h3><p>
4116<span class="apii">[-0, +1, <em>m</em>]</span>4115<span class="apii">[-0, +1, <em>e</em>]</span>
4117<pre>const char *lua_pushlstring (lua_State *L, const char *s, size_t len);</pre>4116<pre>const char *lua_pushlstring (lua_State *L, const char *s, size_t len);</pre>
4118 4117
4119<p>4118<p>
@@ -4156,7 +4155,7 @@ Pushes a number with value <code>n</code> onto the stack. · 36 unmodified lines
4156 4155
4157 4156
4158<hr><h3><a name="lua_pushstring"><code>lua_pushstring</code></a></h3><p>4157<hr><h3><a name="lua_pushstring"><code>lua_pushstring</code></a></h3><p>
4159<span class="apii">[-0, +1, <em>m</em>]</span>4158<span class="apii">[-0, +1, <em>e</em>]</span>
4160<pre>const char *lua_pushstring (lua_State *L, const char *s);</pre>4159<pre>const char *lua_pushstring (lua_State *L, const char *s);</pre>
4161 4160
4162<p>4161<p>
@@ -4203,7 +4202,7 @@ onto the stack. · 40 unmodified lines
4203 4202
4204 4203
4205<hr><h3><a name="lua_pushvfstring"><code>lua_pushvfstring</code></a></h3><p>4204<hr><h3><a name="lua_pushvfstring"><code>lua_pushvfstring</code></a></h3><p>
4206<span class="apii">[-0, +1, <em>m</em>]</span>4205<span class="apii">[-0, +1, <em>e</em>]</span>
4207<pre>const char *lua_pushvfstring (lua_State *L,4206<pre>const char *lua_pushvfstring (lua_State *L,
4208 const char *fmt,4207 const char *fmt,
4209 va_list argp);</pre>4208 va_list argp);</pre>
@@ -4290,7 +4289,7 @@ for other values, it is&nbsp;0. · 80 unmodified lines
4290 4289
4291 4290
4292<hr><h3><a name="lua_rawset"><code>lua_rawset</code></a></h3><p>4291<hr><h3><a name="lua_rawset"><code>lua_rawset</code></a></h3><p>
4293<span class="apii">[-2, +0, <em>m</em>]</span>4292<span class="apii">[-2, +0, <em>e</em>]</span>
4294<pre>void lua_rawset (lua_State *L, int index);</pre>4293<pre>void lua_rawset (lua_State *L, int index);</pre>
4295 4294
4296<p>4295<p>
@@ -4302,7 +4301,7 @@ Similar to <a href="#lua_settable"><code>lua_settable</code></a>, but does a raw · 5 unmodified lines
4302 4301
4303 4302
4304<hr><h3><a name="lua_rawseti"><code>lua_rawseti</code></a></h3><p>4303<hr><h3><a name="lua_rawseti"><code>lua_rawseti</code></a></h3><p>
4305<span class="apii">[-1, +0, <em>m</em>]</span>4304<span class="apii">[-1, +0, <em>e</em>]</span>
4306<pre>void lua_rawseti (lua_State *L, int index, int n);</pre>4305<pre>void lua_rawseti (lua_State *L, int index, int n);</pre>
4307 4306
4308<p>4307<p>
@@ -4321,7 +4320,7 @@ that is, it does not invoke metamethods. · 12 unmodified lines
4321 4320
4322 4321
4323<hr><h3><a name="lua_rawsetp"><code>lua_rawsetp</code></a></h3><p>4322<hr><h3><a name="lua_rawsetp"><code>lua_rawsetp</code></a></h3><p>
4324<span class="apii">[-1, +0, <em>m</em>]</span>4323<span class="apii">[-1, +0, <em>e</em>]</span>
4325<pre>void lua_rawsetp (lua_State *L, int index, const void *p);</pre>4324<pre>void lua_rawsetp (lua_State *L, int index, const void *p);</pre>
4326 4325
4327<p>4326<p>
@@ -4669,7 +4668,7 @@ indicates whether the operation succeeded. · 341 unmodified lines
4669 4668
4670 4669
4671<hr><h3><a name="lua_tolstring"><code>lua_tolstring</code></a></h3><p>4670<hr><h3><a name="lua_tolstring"><code>lua_tolstring</code></a></h3><p>
4672<span class="apii">[-0, +0, <em>m</em>]</span>4671<span class="apii">[-0, +0, <em>e</em>]</span>
4673<pre>const char *lua_tolstring (lua_State *L, int index, size_t *len);</pre>4672<pre>const char *lua_tolstring (lua_State *L, int index, size_t *len);</pre>
4674 4673
4675<p>4674<p>
@@ -4752,7 +4751,7 @@ Typically this function is used only for debug information. · 76 unmodified lines
4752 4751
4753 4752
4754<hr><h3><a name="lua_tostring"><code>lua_tostring</code></a></h3><p>4753<hr><h3><a name="lua_tostring"><code>lua_tostring</code></a></h3><p>
4755<span class="apii">[-0, +0, <em>m</em>]</span>4754<span class="apii">[-0, +0, <em>e</em>]</span>
4756<pre>const char *lua_tostring (lua_State *L, int index);</pre>4755<pre>const char *lua_tostring (lua_State *L, int index);</pre>
4757 4756
4758<p>4757<p>
@@ -5154,7 +5153,7 @@ Returns the current hook mask. · 395 unmodified lines
5154 5153
5155 5154
5156<hr><h3><a name="lua_getinfo"><code>lua_getinfo</code></a></h3><p>5155<hr><h3><a name="lua_getinfo"><code>lua_getinfo</code></a></h3><p>
5157<span class="apii">[-(0|1), +(0|1|2), <em>m</em>]</span>5156<span class="apii">[-(0|1), +(0|1|2), <em>e</em>]</span>
5158<pre>int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);</pre>5157<pre>int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);</pre>
5159 5158
5160<p>5159<p>
@@ -5553,7 +5552,7 @@ in alphabetical order. · 392 unmodified lines
5553 5552
5554 5553
5555<hr><h3><a name="luaL_addchar"><code>luaL_addchar</code></a></h3><p>5554<hr><h3><a name="luaL_addchar"><code>luaL_addchar</code></a></h3><p>
5556<span class="apii">[-?, +?, <em>m</em>]</span>5555<span class="apii">[-?, +?, <em>e</em>]</span>
5557<pre>void luaL_addchar (luaL_Buffer *B, char c);</pre>5556<pre>void luaL_addchar (luaL_Buffer *B, char c);</pre>
5558 5557
5559<p>5558<p>
@@ -5565,7 +5564,7 @@ Adds the byte <code>c</code> to the buffer <code>B</code> · 5 unmodified lines
5565 5564
5566 5565
5567<hr><h3><a name="luaL_addlstring"><code>luaL_addlstring</code></a></h3><p>5566<hr><h3><a name="luaL_addlstring"><code>luaL_addlstring</code></a></h3><p>
5568<span class="apii">[-?, +?, <em>m</em>]</span>5567<span class="apii">[-?, +?, <em>e</em>]</span>
5569<pre>void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);</pre>5568<pre>void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);</pre>
5570 5569
5571<p>5570<p>
@@ -5579,7 +5578,7 @@ The string can contain embedded zeros. · 7 unmodified lines
5579 5578
5580 5579
5581<hr><h3><a name="luaL_addsize"><code>luaL_addsize</code></a></h3><p>5580<hr><h3><a name="luaL_addsize"><code>luaL_addsize</code></a></h3><p>
5582<span class="apii">[-?, +?, <em>m</em>]</span>5581<span class="apii">[-?, +?, <em>e</em>]</span>
5583<pre>void luaL_addsize (luaL_Buffer *B, size_t n);</pre>5582<pre>void luaL_addsize (luaL_Buffer *B, size_t n);</pre>
5584 5583
5585<p>5584<p>
@@ -5592,7 +5591,7 @@ buffer area (see <a href="#luaL_prepbuffer"><code>luaL_prepbuffer</code></a>). · 6 unmodified lines
5592 5591
5593 5592
5594<hr><h3><a name="luaL_addstring"><code>luaL_addstring</code></a></h3><p>5593<hr><h3><a name="luaL_addstring"><code>luaL_addstring</code></a></h3><p>
5595<span class="apii">[-?, +?, <em>m</em>]</span>5594<span class="apii">[-?, +?, <em>e</em>]</span>
5596<pre>void luaL_addstring (luaL_Buffer *B, const char *s);</pre>5595<pre>void luaL_addstring (luaL_Buffer *B, const char *s);</pre>
5597 5596
5598<p>5597<p>
@@ -5606,7 +5605,7 @@ The string cannot contain embedded zeros. · 7 unmodified lines
5606 5605
5607 5606
5608<hr><h3><a name="luaL_addvalue"><code>luaL_addvalue</code></a></h3><p>5607<hr><h3><a name="luaL_addvalue"><code>luaL_addvalue</code></a></h3><p>
5609<span class="apii">[-1, +?, <em>m</em>]</span>5608<span class="apii">[-1, +?, <em>e</em>]</span>
5610<pre>void luaL_addvalue (luaL_Buffer *B);</pre>5609<pre>void luaL_addvalue (luaL_Buffer *B);</pre>
5611 5610
5612<p>5611<p>
@@ -5743,7 +5742,7 @@ the buffer must be declared as a variable · 130 unmodified lines
5743 5742
5744 5743
5745<hr><h3><a name="luaL_buffinitsize"><code>luaL_buffinitsize</code></a></h3><p>5744<hr><h3><a name="luaL_buffinitsize"><code>luaL_buffinitsize</code></a></h3><p>
5746<span class="apii">[-?, +?, <em>m</em>]</span>5745<span class="apii">[-?, +?, <em>e</em>]</span>
5747<pre>char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz);</pre>5746<pre>char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz);</pre>
5748 5747
5749<p>5748<p>
@@ -5970,7 +5969,7 @@ are using the same address space. · 220 unmodified lines
5970 5969
5971 5970
5972<hr><h3><a name="luaL_dofile"><code>luaL_dofile</code></a></h3><p>5971<hr><h3><a name="luaL_dofile"><code>luaL_dofile</code></a></h3><p>
5973<span class="apii">[-0, +?, <em>m</em>]</span>5972<span class="apii">[-0, +?, <em>e</em>]</span>
5974<pre>int luaL_dofile (lua_State *L, const char *filename);</pre>5973<pre>int luaL_dofile (lua_State *L, const char *filename);</pre>
5975 5974
5976<p>5975<p>
@@ -6029,7 +6028,7 @@ as <code>return luaL_error(<em>args</em>)</code>. · 52 unmodified lines
6029 6028
6030 6029
6031<hr><h3><a name="luaL_execresult"><code>luaL_execresult</code></a></h3><p>6030<hr><h3><a name="luaL_execresult"><code>luaL_execresult</code></a></h3><p>
6032<span class="apii">[-0, +3, <em>m</em>]</span>6031<span class="apii">[-0, +3, <em>e</em>]</span>
6033<pre>int luaL_execresult (lua_State *L, int stat);</pre>6032<pre>int luaL_execresult (lua_State *L, int stat);</pre>
6034 6033
6035<p>6034<p>
@@ -6042,7 +6041,7 @@ process-related functions in the standard library · 6 unmodified lines
6042 6041
6043 6042
6044<hr><h3><a name="luaL_fileresult"><code>luaL_fileresult</code></a></h3><p>6043<hr><h3><a name="luaL_fileresult"><code>luaL_fileresult</code></a></h3><p>
6045<span class="apii">[-0, +(1|3), <em>m</em>]</span>6044<span class="apii">[-0, +(1|3), <em>e</em>]</span>
6046<pre>int luaL_fileresult (lua_State *L, int stat, const char *fname);</pre>6045<pre>int luaL_fileresult (lua_State *L, int stat, const char *fname);</pre>
6047 6046
6048<p>6047<p>
@@ -6055,7 +6054,7 @@ file-related functions in the standard library · 6 unmodified lines
6055 6054
6056 6055
6057<hr><h3><a name="luaL_getmetafield"><code>luaL_getmetafield</code></a></h3><p>6056<hr><h3><a name="luaL_getmetafield"><code>luaL_getmetafield</code></a></h3><p>
6058<span class="apii">[-0, +(0|1), <em>m</em>]</span>6057<span class="apii">[-0, +(0|1), <em>e</em>]</span>
6059<pre>int luaL_getmetafield (lua_State *L, int obj, const char *e);</pre>6058<pre>int luaL_getmetafield (lua_State *L, int obj, const char *e);</pre>
6060 6059
6061<p>6060<p>
@@ -6082,7 +6081,7 @@ in the registry (see <a href="#luaL_newmetatable"><code>luaL_newmetatable</code> · 20 unmodified lines
6082 6081
6083 6082
6084<hr><h3><a name="luaL_getsubtable"><code>luaL_getsubtable</code></a></h3><p>6083<hr><h3><a name="luaL_getsubtable"><code>luaL_getsubtable</code></a></h3><p>
6085<span class="apii">[-0, +1, <em>m</em>]</span>6084<span class="apii">[-0, +1, <em>e</em>]</span>
6086<pre>int luaL_getsubtable (lua_State *L, int idx, const char *fname);</pre>6085<pre>int luaL_getsubtable (lua_State *L, int idx, const char *fname);</pre>
6087 6086
6088<p>6087<p>
@@ -6098,7 +6097,7 @@ and false if it creates a new table. · 9 unmodified lines
6098 6097
6099 6098
6100<hr><h3><a name="luaL_gsub"><code>luaL_gsub</code></a></h3><p>6099<hr><h3><a name="luaL_gsub"><code>luaL_gsub</code></a></h3><p>
6101<span class="apii">[-0, +1, <em>m</em>]</span>6100<span class="apii">[-0, +1, <em>e</em>]</span>
6102<pre>const char *luaL_gsub (lua_State *L,6101<pre>const char *luaL_gsub (lua_State *L,
6103 const char *s,6102 const char *s,
6104 const char *p,6103 const char *p,
@@ -6168,7 +6167,7 @@ The string <code>mode</code> works as in function <a href="#lua_load"><code>lua_ · 63 unmodified lines
6168 6167
6169 6168
6170<hr><h3><a name="luaL_loadfile"><code>luaL_loadfile</code></a></h3><p>6169<hr><h3><a name="luaL_loadfile"><code>luaL_loadfile</code></a></h3><p>
6171<span class="apii">[-0, +1, <em>m</em>]</span>6170<span class="apii">[-0, +1, <em>e</em>]</span>
6172<pre>int luaL_loadfile (lua_State *L, const char *filename);</pre>6171<pre>int luaL_loadfile (lua_State *L, const char *filename);</pre>
6173 6172
6174<p>6173<p>
@@ -6179,7 +6178,7 @@ Equivalent to <a href="#luaL_loadfilex"><code>luaL_loadfilex</code></a> with <co · 4 unmodified lines
6179 6178
6180 6179
6181<hr><h3><a name="luaL_loadfilex"><code>luaL_loadfilex</code></a></h3><p>6180<hr><h3><a name="luaL_loadfilex"><code>luaL_loadfilex</code></a></h3><p>
6182<span class="apii">[-0, +1, <em>m</em>]</span>6181<span class="apii">[-0, +1, <em>e</em>]</span>
6183<pre>int luaL_loadfilex (lua_State *L, const char *filename,6182<pre>int luaL_loadfilex (lua_State *L, const char *filename,
6184 const char *mode);</pre>6183 const char *mode);</pre>
6185 6184
@@ -6233,7 +6232,7 @@ it does not run it. · 47 unmodified lines
6233 6232
6234 6233
6235<hr><h3><a name="luaL_newlib"><code>luaL_newlib</code></a></h3><p>6234<hr><h3><a name="luaL_newlib"><code>luaL_newlib</code></a></h3><p>
6236<span class="apii">[-0, +1, <em>m</em>]</span>6235<span class="apii">[-0, +1, <em>e</em>]</span>
6237<pre>int luaL_newlib (lua_State *L, const luaL_Reg *l);</pre>6236<pre>int luaL_newlib (lua_State *L, const luaL_Reg *l);</pre>
6238 6237
6239<p>6238<p>
@@ -6249,7 +6248,7 @@ It is implemented as the following macro: · 9 unmodified lines
6249 6248
6250 6249
6251<hr><h3><a name="luaL_newlibtable"><code>luaL_newlibtable</code></a></h3><p>6250<hr><h3><a name="luaL_newlibtable"><code>luaL_newlibtable</code></a></h3><p>
6252<span class="apii">[-0, +1, <em>m</em>]</span>6251<span class="apii">[-0, +1, <em>e</em>]</span>
6253<pre>int luaL_newlibtable (lua_State *L, const luaL_Reg l[]);</pre>6252<pre>int luaL_newlibtable (lua_State *L, const luaL_Reg l[]);</pre>
6254 6253
6255<p>6254<p>
@@ -6270,7 +6269,7 @@ not a pointer to it. · 14 unmodified lines
6270 6269
6271 6270
6272<hr><h3><a name="luaL_newmetatable"><code>luaL_newmetatable</code></a></h3><p>6271<hr><h3><a name="luaL_newmetatable"><code>luaL_newmetatable</code></a></h3><p>
6273<span class="apii">[-0, +1, <em>m</em>]</span>6272<span class="apii">[-0, +1, <em>e</em>]</span>
6274<pre>int luaL_newmetatable (lua_State *L, const char *tname);</pre>6273<pre>int luaL_newmetatable (lua_State *L, const char *tname);</pre>
6275 6274
6276<p>6275<p>
@@ -6442,7 +6441,7 @@ Otherwise, raises an error. · 165 unmodified lines
6442 6441
6443 6442
6444<hr><h3><a name="luaL_prepbuffer"><code>luaL_prepbuffer</code></a></h3><p>6443<hr><h3><a name="luaL_prepbuffer"><code>luaL_prepbuffer</code></a></h3><p>
6445<span class="apii">[-?, +?, <em>m</em>]</span>6444<span class="apii">[-?, +?, <em>e</em>]</span>
6446<pre>char *luaL_prepbuffer (luaL_Buffer *B);</pre>6445<pre>char *luaL_prepbuffer (luaL_Buffer *B);</pre>
6447 6446
6448<p>6447<p>
@@ -6454,7 +6453,7 @@ with the predefined size <a name="pdf-LUAL_BUFFERSIZE"><code>LUAL_BUFFERSIZE</co · 5 unmodified lines
6454 6453
6455 6454
6456<hr><h3><a name="luaL_prepbuffsize"><code>luaL_prepbuffsize</code></a></h3><p>6455<hr><h3><a name="luaL_prepbuffsize"><code>luaL_prepbuffsize</code></a></h3><p>
6457<span class="apii">[-?, +?, <em>m</em>]</span>6456<span class="apii">[-?, +?, <em>e</em>]</span>
6458<pre>char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz);</pre>6457<pre>char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz);</pre>
6459 6458
6460<p>6459<p>
@@ -6470,7 +6469,7 @@ it to the buffer. · 9 unmodified lines
6470 6469
6471 6470
6472<hr><h3><a name="luaL_pushresult"><code>luaL_pushresult</code></a></h3><p>6471<hr><h3><a name="luaL_pushresult"><code>luaL_pushresult</code></a></h3><p>
6473<span class="apii">[-?, +1, <em>m</em>]</span>6472<span class="apii">[-?, +1, <em>e</em>]</span>
6474<pre>void luaL_pushresult (luaL_Buffer *B);</pre>6473<pre>void luaL_pushresult (luaL_Buffer *B);</pre>
6475 6474
6476<p>6475<p>
@@ -6482,7 +6481,7 @@ the top of the stack. · 5 unmodified lines
6482 6481
6483 6482
6484<hr><h3><a name="luaL_pushresultsize"><code>luaL_pushresultsize</code></a></h3><p>6483<hr><h3><a name="luaL_pushresultsize"><code>luaL_pushresultsize</code></a></h3><p>
6485<span class="apii">[-?, +1, <em>m</em>]</span>6484<span class="apii">[-?, +1, <em>e</em>]</span>
6486<pre>void luaL_pushresultsize (luaL_Buffer *B, size_t sz);</pre>6485<pre>void luaL_pushresultsize (luaL_Buffer *B, size_t sz);</pre>
6487 6486
6488<p>6487<p>
@@ -6493,7 +6492,7 @@ Equivalent to the sequence <a href="#luaL_addsize"><code>luaL_addsize</code></a> · 4 unmodified lines
6493 6492
6494 6493
6495<hr><h3><a name="luaL_ref"><code>luaL_ref</code></a></h3><p>6494<hr><h3><a name="luaL_ref"><code>luaL_ref</code></a></h3><p>
6496<span class="apii">[-1, +0, <em>m</em>]</span>6495<span class="apii">[-1, +0, <em>e</em>]</span>
6497<pre>int luaL_ref (lua_State *L, int t);</pre>6496<pre>int luaL_ref (lua_State *L, int t);</pre>
6498 6497
6499<p>6498<p>
@@ -6597,7 +6596,7 @@ in the registry (see <a href="#luaL_newmetatable"><code>luaL_newmetatable</code> · 97 unmodified lines
6597 6596
6598 6597
6599<hr><h3><a name="luaL_testudata"><code>luaL_testudata</code></a></h3><p>6598<hr><h3><a name="luaL_testudata"><code>luaL_testudata</code></a></h3><p>
6600<span class="apii">[-0, +0, <em>m</em>]</span>6599<span class="apii">[-0, +0, <em>e</em>]</span>
6601<pre>void *luaL_testudata (lua_State *L, int arg, const char *tname);</pre>6600<pre>void *luaL_testudata (lua_State *L, int arg, const char *tname);</pre>
6602 6601
6603<p>6602<p>
@@ -6633,7 +6632,7 @@ and uses the result of the call as its result. · 29 unmodified lines
6633 6632
6634 6633
6635<hr><h3><a name="luaL_traceback"><code>luaL_traceback</code></a></h3><p>6634<hr><h3><a name="luaL_traceback"><code>luaL_traceback</code></a></h3><p>
6636<span class="apii">[-0, +1, <em>m</em>]</span>6635<span class="apii">[-0, +1, <em>e</em>]</span>
6637<pre>void luaL_traceback (lua_State *L, lua_State *L1, const char *msg,6636<pre>void luaL_traceback (lua_State *L, lua_State *L1, const char *msg,
6638 int level);</pre>6637 int level);</pre>
6639 6638
@@ -6680,7 +6679,7 @@ If <code>ref</code> is <a href="#pdf-LUA_NOREF"><code>LUA_NOREF</code></a> or <a · 40 unmodified lines
6680 6679
6681 6680
6682<hr><h3><a name="luaL_where"><code>luaL_where</code></a></h3><p>6681<hr><h3><a name="luaL_where"><code>luaL_where</code></a></h3><p>
6683<span class="apii">[-0, +1, <em>m</em>]</span>6682<span class="apii">[-0, +1, <em>e</em>]</span>
6684<pre>void luaL_where (lua_State *L, int lvl);</pre>6683<pre>void luaL_where (lua_State *L, int lvl);</pre>
6685 6684
6686<p>6685<p>
@@ -10407,7 +10406,7 @@ Here is the complete syntax of Lua in extended BNF. · 3720 unmodified lines
10407<HR>10406<HR>
10408<SMALL CLASS="footer">10407<SMALL CLASS="footer">
10409Last update:10408Last update:
10410Wed May 23 13:28:41 BRT 201210409Fri Jun 1 12:38:38 BRT 2012
10411</SMALL>10410</SMALL>
10412<!--10411<!--
10413Last change: revised for Lua 5.2.110412Last change: revised for Lua 5.2.1
doc/readme.html+1−2
@@ -43,7 +43,6 @@ Welcome to Lua 5.2 · 42 unmodified lines
43<A HREF="#license">license</A>43<A HREF="#license">license</A>
44&middot;44&middot;
45<A HREF="contents.html">reference manual</A>45<A HREF="contents.html">reference manual</A>
46<HR>
47 46
48<H2><A NAME="about">About Lua</A></H2>47<H2><A NAME="about">About Lua</A></H2>
49 48
@@ -401,7 +400,7 @@ THE SOFTWARE. · 351 unmodified lines
401<HR>400<HR>
402<SMALL CLASS="footer">401<SMALL CLASS="footer">
403Last update:402Last update:
404Thu May 17 11:09:49 BRT 2012403Tue May 29 21:57:51 BRT 2012
405</SMALL>404</SMALL>
406<!--405<!--
407Last change: revised for Lua 5.2.1406Last change: revised for Lua 5.2.1
src/lauxlib.c+3−3
@@ -1,5 +1,5 @@
1/*1/*
2** $Id: lauxlib.c,v 1.243 2012/04/20 17:05:17 roberto Exp $2** $Id: lauxlib.c,v 1.244 2012/05/31 20:28:45 roberto Exp $
3** Auxiliary functions for building Lua libraries3** Auxiliary functions for building Lua libraries
4** See Copyright Notice in lua.h4** See Copyright Notice in lua.h
5*/5*/
@@ -520,11 +520,11 @@ LUALIB_API char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz) { · 514 unmodified lines
520 520
521LUALIB_API int luaL_ref (lua_State *L, int t) {521LUALIB_API int luaL_ref (lua_State *L, int t) {
522 int ref;522 int ref;
523 t = lua_absindex(L, t);
524 if (lua_isnil(L, -1)) {523 if (lua_isnil(L, -1)) {
525 lua_pop(L, 1); /* remove from stack */524 lua_pop(L, 1); /* remove from stack */
526 return LUA_REFNIL; /* `nil' has a unique fixed reference */525 return LUA_REFNIL; /* `nil' has a unique fixed reference */
527 }526 }
527 t = lua_absindex(L, t);
528 lua_rawgeti(L, t, freelist); /* get first free element */528 lua_rawgeti(L, t, freelist); /* get first free element */
529 ref = (int)lua_tointeger(L, -1); /* ref = t[freelist] */529 ref = (int)lua_tointeger(L, -1); /* ref = t[freelist] */
530 lua_pop(L, 1); /* remove it from stack */530 lua_pop(L, 1); /* remove it from stack */
@@ -866,8 +866,8 @@ LUALIB_API int luaL_getsubtable (lua_State *L, int idx, const char *fname) { · 335 unmodified lines
866 lua_getfield(L, idx, fname);866 lua_getfield(L, idx, fname);
867 if (lua_istable(L, -1)) return 1; /* table already there */867 if (lua_istable(L, -1)) return 1; /* table already there */
868 else {868 else {
869 idx = lua_absindex(L, idx);
870 lua_pop(L, 1); /* remove previous result */869 lua_pop(L, 1); /* remove previous result */
870 idx = lua_absindex(L, idx);
871 lua_newtable(L);871 lua_newtable(L);
872 lua_pushvalue(L, -1); /* copy to be left at top */872 lua_pushvalue(L, -1); /* copy to be left at top */
873 lua_setfield(L, idx, fname); /* assign new table to field */873 lua_setfield(L, idx, fname); /* assign new table to field */
src/lgc.c+59−28
@@ -1,5 +1,5 @@
1/*1/*
2** $Id: lgc.c,v 2.129 2012/05/28 20:41:00 roberto Exp $2** $Id: lgc.c,v 2.133 2012/05/31 21:28:59 roberto Exp $
3** Garbage Collector3** Garbage Collector
4** See Copyright Notice in lua.h4** See Copyright Notice in lua.h
5*/5*/
@@ -753,6 +753,21 @@ static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count) { · 747 unmodified lines
753 return (*p == NULL) ? NULL : p;753 return (*p == NULL) ? NULL : p;
754}754}
755 755
756
757/*
758** sweep a list until a live object (or end of list)
759*/
760static GCObject **sweeptolive (lua_State *L, GCObject **p, int *n) {
761 GCObject ** old = p;
762 int i = 0;
763 do {
764 i++;
765 p = sweeplist(L, p, 1);
766 } while (p == old);
767 if (n) *n += i;
768 return p;
769}
770
756/* }====================================================== */771/* }====================================================== */
757 772
758 773
@@ -812,12 +827,14 @@ static void GCTM (lua_State *L, int propagateerrors) { · 53 unmodified lines
812 L->allowhook = oldah; /* restore hooks */827 L->allowhook = oldah; /* restore hooks */
813 g->gcrunning = running; /* restore state */828 g->gcrunning = running; /* restore state */
814 if (status != LUA_OK && propagateerrors) { /* error while running __gc? */829 if (status != LUA_OK && propagateerrors) { /* error while running __gc? */
815 if (status == LUA_ERRRUN) { /* is there an error msg.? */830 if (status == LUA_ERRRUN) { /* is there an error object? */
816 luaO_pushfstring(L, "error in __gc metamethod (%s)",831 const char *msg = (ttisstring(L->top - 1))
817 lua_tostring(L, -1));832 ? svalue(L->top - 1)
833 : "no message";
834 luaO_pushfstring(L, "error in __gc metamethod (%s)", msg);
818 status = LUA_ERRGCMM; /* error in __gc metamethod */835 status = LUA_ERRGCMM; /* error in __gc metamethod */
819 }836 }
820 luaD_throw(L, status); /* re-send error */837 luaD_throw(L, status); /* re-throw error */
821 }838 }
822 }839 }
823}840}
@@ -864,10 +881,9 @@ void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) { · 40 unmodified lines
864 else { /* move 'o' to 'finobj' list */881 else { /* move 'o' to 'finobj' list */
865 GCObject **p;882 GCObject **p;
866 GCheader *ho = gch(o);883 GCheader *ho = gch(o);
867 /* avoid removing current sweep object */884 if (g->sweepgc == &ho->next) { /* avoid removing current sweep object */
868 if (g->sweepgc == &ho->next) {885 lua_assert(issweepphase(g));
869 /* step to next object in the list */886 g->sweepgc = sweeptolive(L, g->sweepgc, NULL);
870 g->sweepgc = (ho->next == NULL) ? NULL : &gch(ho->next)->next;
871 }887 }
872 /* search for pointer pointing to 'o' */888 /* search for pointer pointing to 'o' */
873 for (p = &g->allgc; *p != o; p = &gch(*p)->next) { /* empty */ }889 for (p = &g->allgc; *p != o; p = &gch(*p)->next) { /* empty */ }
@@ -875,7 +891,10 @@ void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) { · 1 unmodified line
875 ho->next = g->finobj; /* link it in list 'finobj' */891 ho->next = g->finobj; /* link it in list 'finobj' */
876 g->finobj = o;892 g->finobj = o;
877 l_setbit(ho->marked, SEPARATED); /* mark it as such */893 l_setbit(ho->marked, SEPARATED); /* mark it as such */
878 resetoldbit(o); /* see MOVE OLD rule */894 if (!keepinvariant(g)) /* not keeping invariant? */
895 makewhite(g, o); /* "sweep" object */
896 else
897 resetoldbit(o); /* see MOVE OLD rule */
879 }898 }
880}899}
881 900
@@ -895,18 +914,22 @@ void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) { · 13 unmodified lines
895 914
896/*915/*
897** enter first sweep phase (strings) and prepare pointers for other916** enter first sweep phase (strings) and prepare pointers for other
898** sweep phases. The calls to 'sweeplist' attempt to make pointers917** sweep phases. The calls to 'sweeptolive' make pointers point to an
899** point to an object inside the list (instead of to the header), so918** object inside the list (instead of to the header), so that the real
900** that the real sweep do not need to skip objects created between "now"919** sweep do not need to skip objects created between "now" and the start
901** and the start of the real sweep.920** of the real sweep.
921** Returns how many objects it sweeped.
902*/922*/
903static void entersweep (lua_State *L) {923static int entersweep (lua_State *L) {
904 global_State *g = G(L);924 global_State *g = G(L);
925 int n = 0;
905 g->gcstate = GCSsweepstring;926 g->gcstate = GCSsweepstring;
906 lua_assert(g->sweepgc == NULL && g->sweepfin == NULL);927 lua_assert(g->sweepgc == NULL && g->sweepfin == NULL);
907 g->sweepstrgc = 0; /* prepare to sweep strings, ... */928 /* prepare to sweep strings, finalizable objects, and regular objects */
908 g->sweepfin = sweeplist(L, &g->finobj, 1); /* finalizable objects, ... */929 g->sweepstrgc = 0;
909 g->sweepgc = sweeplist(L, &g->allgc, 1); /* and regular objects */930 g->sweepfin = sweeptolive(L, &g->finobj, &n);
931 g->sweepgc = sweeptolive(L, &g->allgc, &n);
932 return n;
910}933}
911 934
912 935
@@ -962,7 +985,7 @@ void luaC_freeallobjects (lua_State *L) { · 49 unmodified lines
962 985
963static l_mem atomic (lua_State *L) {986static l_mem atomic (lua_State *L) {
964 global_State *g = G(L);987 global_State *g = G(L);
965 l_mem trav = g->GCmemtrav;988 l_mem work = -g->GCmemtrav; /* start counting work */
966 GCObject *origweak, *origall;989 GCObject *origweak, *origall;
967 lua_assert(!iswhite(obj2gco(g->mainthread)));990 lua_assert(!iswhite(obj2gco(g->mainthread)));
968 markobject(g, L); /* mark running thread */991 markobject(g, L); /* mark running thread */
@@ -971,18 +994,22 @@ static l_mem atomic (lua_State *L) { · 2 unmodified lines
971 markmt(g); /* mark basic metatables */994 markmt(g); /* mark basic metatables */
972 /* remark occasional upvalues of (maybe) dead threads */995 /* remark occasional upvalues of (maybe) dead threads */
973 remarkupvals(g);996 remarkupvals(g);
997 propagateall(g); /* propagate changes */
998 work += g->GCmemtrav; /* stop counting (do not (re)count grays) */
974 /* traverse objects caught by write barrier and by 'remarkupvals' */999 /* traverse objects caught by write barrier and by 'remarkupvals' */
975 retraversegrays(g);1000 retraversegrays(g);
1001 work -= g->GCmemtrav; /* restart counting */
976 convergeephemerons(g);1002 convergeephemerons(g);
977 /* at this point, all strongly accessible objects are marked. */1003 /* at this point, all strongly accessible objects are marked. */
978 /* clear values from weak tables, before checking finalizers */1004 /* clear values from weak tables, before checking finalizers */
979 clearvalues(g, g->weak, NULL);1005 clearvalues(g, g->weak, NULL);
980 clearvalues(g, g->allweak, NULL);1006 clearvalues(g, g->allweak, NULL);
981 origweak = g->weak; origall = g->allweak;1007 origweak = g->weak; origall = g->allweak;
1008 work += g->GCmemtrav; /* stop counting (objects being finalized) */
982 separatetobefnz(L, 0); /* separate objects to be finalized */1009 separatetobefnz(L, 0); /* separate objects to be finalized */
983 markbeingfnz(g); /* mark userdata that will be finalized */1010 markbeingfnz(g); /* mark objects that will be finalized */
984 propagateall(g); /* remark, to propagate `preserveness' */1011 propagateall(g); /* remark, to propagate `preserveness' */
985 trav = g->GCmemtrav - trav; /* avoid adding convergence twice */1012 work -= g->GCmemtrav; /* restart counting */
986 convergeephemerons(g);1013 convergeephemerons(g);
987 /* at this point, all resurrected objects are marked. */1014 /* at this point, all resurrected objects are marked. */
988 /* remove dead objects from weak tables */1015 /* remove dead objects from weak tables */
@@ -992,9 +1019,8 @@ static l_mem atomic (lua_State *L) { · 3 unmodified lines
992 clearvalues(g, g->weak, origweak);1019 clearvalues(g, g->weak, origweak);
993 clearvalues(g, g->allweak, origall);1020 clearvalues(g, g->allweak, origall);
994 g->currentwhite = cast_byte(otherwhite(g)); /* flip current white */1021 g->currentwhite = cast_byte(otherwhite(g)); /* flip current white */
995 entersweep(L); /* prepare to sweep strings */1022 work += g->GCmemtrav; /* complete counting */
996 /*lua_checkmemory(L);*/1023 return work; /* estimate of memory marked by 'atomic' */
997 return trav; /* reasonable estimate of the work done by 'atomic' */
998}1024}
999 1025
1000 1026
@@ -1018,9 +1044,14 @@ static lu_mem singlestep (lua_State *L) { · 17 unmodified lines
1018 return g->GCmemtrav - oldtrav; /* memory traversed in this step */1044 return g->GCmemtrav - oldtrav; /* memory traversed in this step */
1019 }1045 }
1020 else { /* no more `gray' objects */1046 else { /* no more `gray' objects */
1047 lu_mem work;
1048 int sw;
1021 g->gcstate = GCSatomic; /* finish mark phase */1049 g->gcstate = GCSatomic; /* finish mark phase */
1022 g->GCestimate = g->GCmemtrav; /* save what was counted */1050 g->GCestimate = g->GCmemtrav; /* save what was counted */;
1023 return atomic(L);1051 work = atomic(L); /* add what was traversed by 'atomic' */
1052 g->GCestimate += work; /* estimate of total memory traversed */
1053 sw = entersweep(L);
1054 return work + sw * GCSWEEPCOST;
1024 }1055 }
1025 }1056 }
1026 case GCSsweepstring: {1057 case GCSsweepstring: {
@@ -1089,7 +1120,7 @@ static void generationalcollection (lua_State *L) { · 62 unmodified lines
1089}1120}
1090 1121
1091 1122
1092static void step (lua_State *L) {1123static void incstep (lua_State *L) {
1093 global_State *g = G(L);1124 global_State *g = G(L);
1094 l_mem debt = g->GCdebt;1125 l_mem debt = g->GCdebt;
1095 int stepmul = g->gcstepmul;1126 int stepmul = g->gcstepmul;
@@ -1116,7 +1147,7 @@ void luaC_forcestep (lua_State *L) { · 20 unmodified lines
1116 global_State *g = G(L);1147 global_State *g = G(L);
1117 int i;1148 int i;
1118 if (isgenerational(g)) generationalcollection(L);1149 if (isgenerational(g)) generationalcollection(L);
1119 else step(L);1150 else incstep(L);
1120 /* run a few finalizers (or all of them at the end of a collect cycle) */1151 /* run a few finalizers (or all of them at the end of a collect cycle) */
1121 for (i = 0; g->tobefnz && (i < GCFINALIZENUM || g->gcstate == GCSpause); i++)1152 for (i = 0; g->tobefnz && (i < GCFINALIZENUM || g->gcstate == GCSpause); i++)
1122 GCTM(L, 1); /* call one finalizer */1153 GCTM(L, 1); /* call one finalizer */
src/loadlib.c+3−3
@@ -1,5 +1,5 @@
1/*1/*
2** $Id: loadlib.c,v 1.110 2012/04/26 19:38:52 roberto Exp $2** $Id: loadlib.c,v 1.111 2012/05/30 12:33:44 roberto Exp $
3** Dynamic library loader for Lua3** Dynamic library loader for Lua
4** See Copyright Notice in lua.h4** See Copyright Notice in lua.h
5**5**
@@ -482,9 +482,9 @@ static void findloader (lua_State *L, const char *name) { · 476 unmodified lines
482 lua_getfield(L, lua_upvalueindex(1), "searchers"); /* will be at index 3 */482 lua_getfield(L, lua_upvalueindex(1), "searchers"); /* will be at index 3 */
483 if (!lua_istable(L, 3))483 if (!lua_istable(L, 3))
484 luaL_error(L, LUA_QL("package.searchers") " must be a table");484 luaL_error(L, LUA_QL("package.searchers") " must be a table");
485 /* iterate over available seachers to find a loader */485 /* iterate over available searchers to find a loader */
486 for (i = 1; ; i++) {486 for (i = 1; ; i++) {
487 lua_rawgeti(L, 3, i); /* get a seacher */487 lua_rawgeti(L, 3, i); /* get a searcher */
488 if (lua_isnil(L, -1)) { /* no more searchers? */488 if (lua_isnil(L, -1)) { /* no more searchers? */
489 lua_pop(L, 1); /* remove nil */489 lua_pop(L, 1); /* remove nil */
490 luaL_pushresult(&msg); /* create error message */490 luaL_pushresult(&msg); /* create error message */
src/lstate.c+2−2
@@ -1,5 +1,5 @@
1/*1/*
2** $Id: lstate.c,v 2.97 2012/05/23 15:37:09 roberto Exp $2** $Id: lstate.c,v 2.98 2012/05/30 12:33:44 roberto Exp $
3** Global State3** Global State
4** See Copyright Notice in lua.h4** See Copyright Notice in lua.h
5*/5*/
@@ -79,7 +79,7 @@ typedef struct LG { · 73 unmodified lines
79 79
80/*80/*
81** Compute an initial seed as random as possible. In ANSI, rely on81** Compute an initial seed as random as possible. In ANSI, rely on
82** Address Space Layour Randomization (if present) to increase82** Address Space Layout Randomization (if present) to increase
83** randomness..83** randomness..
84*/84*/
85#define addbuff(b,p,e) \85#define addbuff(b,p,e) \