diffs-lua-5.4.8-lua-5.4.9
Makefile
49c49
< R= $V.8
> R= $V.9
README
2c2
< This is Lua 5.4.8, released on 21 May 2025.
> This is Lua 5.4.9, released on 10 Aug 2026.
Binary files lua-5.4.8/doc/OSIApproved.png and lua-5.4.9/doc/OSIApproved.png differ
Binary files lua-5.4.8/doc/OSIApproved_100X125.png and lua-5.4.9/doc/OSIApproved_100X125.png differ
doc/contents.html
13c13
< <A HREF="https://www.lua.org/"><IMG SRC="logo.gif" ALT="Lua"></A>
> <A HREF="https://www.lua.org/"><IMG SRC="logo.png" ALT="Lua"></A>
35c35
< Copyright © 2020–2025 Lua.org, PUC-Rio.
> Copyright © 2020–2026 Lua.org, PUC-Rio.
88c88
< <LI><A HREF="manual.html#3.4.12">3.4.12 – Lists of expressions, multiple results, and adjustment<A>
> <LI><A HREF="manual.html#3.4.12">3.4.12 – Lists of expressions, multiple results, and adjustment</A>
671c671
< Wed May 21 21:11:33 UTC 2025
> Thu Aug 6 00:05:48 UTC 2026
674c674
< Last change: revised for Lua 5.4.8
> Last change: revised for Lua 5.4.9
Binary files lua-5.4.8/doc/logo.gif and lua-5.4.9/doc/logo.gif differ
Binary files lua-5.4.8/doc/logo.png and lua-5.4.9/doc/logo.png differ
doc/manual.css
9a10,13
> pre.api {
> white-space: normal ;
> }
>
doc/manual.html
13c13
< <A HREF="https://www.lua.org/"><IMG SRC="logo.gif" ALT="Lua"></A>
> <A HREF="https://www.lua.org/"><IMG SRC="logo.png" ALT="Lua"></A>
22c22
< Copyright © 2020–2025 Lua.org, PUC-Rio.
> Copyright © 2020–2026 Lua.org, PUC-Rio.
169c169
< according to the usual rules of two-complement arithmetic.
> according to the usual rules of two's complement arithmetic.
750c750
< and excludes also operations using the debug library.)
> and it excludes also operations using the debug library.)
2389c2389
< For instance, the table <code>{10, 20, 30, 40, 50}</code> is a sequence,
> For instance, the table <code>{10,20,30,40,50}</code> is a sequence,
2391c2391
< The table <code>{10, 20, 30, nil, 50}</code> has two borders (3 and 5),
> The table <code>{10,20,30,nil,50}</code> has two borders (3 and 5),
2394c2394
< The table <code>{nil, 20, 30, nil, nil, 60, nil}</code>
> The table <code>{nil,20,30,nil,nil,60,nil}</code>
2827c2827
< Here are some examples of uses of mutlres expressions.
> Here are some examples of uses of multires expressions.
3515c3515
< <pre>int lua_absindex (lua_State *L, int idx);</pre>
> <pre class="api">int lua_absindex (lua_State *L, int idx);</pre>
3527c3527
< <pre>typedef void * (*lua_Alloc) (void *ud,
> <pre class="api">typedef void * (*lua_Alloc) (void *ud,
3605c3605
< <pre>void lua_arith (lua_State *L, int op);</pre>
> <pre class="api">void lua_arith (lua_State *L, int op);</pre>
3644c3644
< <pre>lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf);</pre>
> <pre class="api">lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf);</pre>
3655c3655
< <pre>void lua_call (lua_State *L, int nargs, int nresults);</pre>
> <pre class="api">void lua_call (lua_State *L, int nargs, int nresults);</pre>
3720c3720
< <pre>void lua_callk (lua_State *L,
> <pre class="api">void lua_callk (lua_State *L,
3735c3735
< <pre>typedef int (*lua_CFunction) (lua_State *L);</pre>
> <pre class="api">typedef int (*lua_CFunction) (lua_State *L);</pre>
3787c3787
< <pre>int lua_checkstack (lua_State *L, int n);</pre>
> <pre class="api">int lua_checkstack (lua_State *L, int n);</pre>
3807c3807
< <pre>void lua_close (lua_State *L);</pre>
> <pre class="api">void lua_close (lua_State *L);</pre>
3829c3829
< <pre>void lua_closeslot (lua_State *L, int index);</pre>
> <pre class="api">void lua_closeslot (lua_State *L, int index);</pre>
3851c3851
< <pre>int lua_closethread (lua_State *L, lua_State *from);</pre>
> <pre class="api">int lua_closethread (lua_State *L, lua_State *from);</pre>
3880c3880
< <pre>int lua_compare (lua_State *L, int index1, int index2, int op);</pre>
> <pre class="api">int lua_compare (lua_State *L, int index1, int index2, int op);</pre>
3908c3908
< <pre>void lua_concat (lua_State *L, int n);</pre>
> <pre class="api">void lua_concat (lua_State *L, int n);</pre>
3925c3925
< <pre>void lua_copy (lua_State *L, int fromidx, int toidx);</pre>
> <pre class="api">void lua_copy (lua_State *L, int fromidx, int toidx);</pre>
3939c3939
< <pre>void lua_createtable (lua_State *L, int narr, int nrec);</pre>
> <pre class="api">void lua_createtable (lua_State *L, int narr, int nrec);</pre>
3958c3958
< <pre>int lua_dump (lua_State *L,
> <pre class="api">int lua_dump (lua_State *L,
3997c3997
< <pre>int lua_error (lua_State *L);</pre>
> <pre class="api">int lua_error (lua_State *L);</pre>
4012c4012
< <pre>int lua_gc (lua_State *L, int what, ...);</pre>
> <pre class="api">int lua_gc (lua_State *L, int what, ...);</pre>
4083c4083
< <pre>lua_Alloc lua_getallocf (lua_State *L, void **ud);</pre>
> <pre class="api">lua_Alloc lua_getallocf (lua_State *L, void **ud);</pre>
4096c4096
< <pre>int lua_getfield (lua_State *L, int index, const char *k);</pre>
> <pre class="api">int lua_getfield (lua_State *L, int index, const char *k);</pre>
4114c4114
< <pre>void *lua_getextraspace (lua_State *L);</pre>
> <pre class="api">void *lua_getextraspace (lua_State *L);</pre>
4139c4139
< <pre>int lua_getglobal (lua_State *L, const char *name);</pre>
> <pre class="api">int lua_getglobal (lua_State *L, const char *name);</pre>
4151c4151
< <pre>int lua_geti (lua_State *L, int index, lua_Integer i);</pre>
> <pre class="api">int lua_geti (lua_State *L, int index, lua_Integer i);</pre>
4169c4169
< <pre>int lua_getmetatable (lua_State *L, int index);</pre>
> <pre class="api">int lua_getmetatable (lua_State *L, int index);</pre>
4183c4183
< <pre>int lua_gettable (lua_State *L, int index);</pre>
> <pre class="api">int lua_gettable (lua_State *L, int index);</pre>
4207c4207
< <pre>int lua_gettop (lua_State *L);</pre>
> <pre class="api">int lua_gettop (lua_State *L);</pre>
4221c4221
< <pre>int lua_getiuservalue (lua_State *L, int index, int n);</pre>
> <pre class="api">int lua_getiuservalue (lua_State *L, int index, int n);</pre>
4239c4239
< <pre>void lua_insert (lua_State *L, int index);</pre>
> <pre class="api">void lua_insert (lua_State *L, int index);</pre>
4252c4252
< <pre>typedef ... lua_Integer;</pre>
> <pre class="api">typedef ... lua_Integer;</pre>
4260c4260
< (usually a 64-bit two-complement integer),
> (usually a 64-bit two's complement integer),
4262c4262
< (usually a 32-bit two-complement integer).
> (usually a 32-bit two's complement integer).
4277c4277
< <pre>int lua_isboolean (lua_State *L, int index);</pre>
> <pre class="api">int lua_isboolean (lua_State *L, int index);</pre>
4289c4289
< <pre>int lua_iscfunction (lua_State *L, int index);</pre>
> <pre class="api">int lua_iscfunction (lua_State *L, int index);</pre>
4301c4301
< <pre>int lua_isfunction (lua_State *L, int index);</pre>
> <pre class="api">int lua_isfunction (lua_State *L, int index);</pre>
4313c4313
< <pre>int lua_isinteger (lua_State *L, int index);</pre>
> <pre class="api">int lua_isinteger (lua_State *L, int index);</pre>
4326c4326
< <pre>int lua_islightuserdata (lua_State *L, int index);</pre>
> <pre class="api">int lua_islightuserdata (lua_State *L, int index);</pre>
4338c4338
< <pre>int lua_isnil (lua_State *L, int index);</pre>
> <pre class="api">int lua_isnil (lua_State *L, int index);</pre>
4350c4350
< <pre>int lua_isnone (lua_State *L, int index);</pre>
> <pre class="api">int lua_isnone (lua_State *L, int index);</pre>
4362c4362
< <pre>int lua_isnoneornil (lua_State *L, int index);</pre>
> <pre class="api">int lua_isnoneornil (lua_State *L, int index);</pre>
4375c4375
< <pre>int lua_isnumber (lua_State *L, int index);</pre>
> <pre class="api">int lua_isnumber (lua_State *L, int index);</pre>
4388c4388
< <pre>int lua_isstring (lua_State *L, int index);</pre>
> <pre class="api">int lua_isstring (lua_State *L, int index);</pre>
4401c4401
< <pre>int lua_istable (lua_State *L, int index);</pre>
> <pre class="api">int lua_istable (lua_State *L, int index);</pre>
4413c4413
< <pre>int lua_isthread (lua_State *L, int index);</pre>
> <pre class="api">int lua_isthread (lua_State *L, int index);</pre>
4425c4425
< <pre>int lua_isuserdata (lua_State *L, int index);</pre>
> <pre class="api">int lua_isuserdata (lua_State *L, int index);</pre>
4437c4437
< <pre>int lua_isyieldable (lua_State *L);</pre>
> <pre class="api">int lua_isyieldable (lua_State *L);</pre>
4448c4448
< <pre>typedef ... lua_KContext;</pre>
> <pre class="api">typedef ... lua_KContext;</pre>
4463c4463
< <pre>typedef int (*lua_KFunction) (lua_State *L, int status, lua_KContext ctx);</pre>
> <pre class="api">typedef int (*lua_KFunction) (lua_State *L, int status, lua_KContext ctx);</pre>
4474c4474
< <pre>void lua_len (lua_State *L, int index);</pre>
> <pre class="api">void lua_len (lua_State *L, int index);</pre>
4488c4488
< <pre>int lua_load (lua_State *L,
> <pre class="api">int lua_load (lua_State *L,
4548c4548
< <pre>lua_State *lua_newstate (lua_Alloc f, void *ud);</pre>
> <pre class="api">lua_State *lua_newstate (lua_Alloc f, void *ud);</pre>
4566c4566
< <pre>void lua_newtable (lua_State *L);</pre>
> <pre class="api">void lua_newtable (lua_State *L);</pre>
4570c4570
< It is equivalent to <code>lua_createtable(L, 0, 0)</code>.
> It is equivalent to <code>lua_createtable(L,0,0)</code>.
4578c4578
< <pre>lua_State *lua_newthread (lua_State *L);</pre>
> <pre class="api">lua_State *lua_newthread (lua_State *L);</pre>
4598c4598
< <pre>void *lua_newuserdatauv (lua_State *L, size_t size, int nuvalue);</pre>
> <pre class="api">void *lua_newuserdatauv (lua_State *L, size_t size, int nuvalue);</pre>
4621c4621
< <pre>int lua_next (lua_State *L, int index);</pre>
> <pre class="api">int lua_next (lua_State *L, int index);</pre>
4667c4667
< <pre>typedef ... lua_Number;</pre>
> <pre class="api">typedef ... lua_Number;</pre>
4683c4683
< <pre>int lua_numbertointeger (lua_Number n, lua_Integer *p);</pre>
> <pre class="api">int lua_numbertointeger (lua_Number n, lua_Integer *p);</pre>
4705c4705
< <pre>int lua_pcall (lua_State *L, int nargs, int nresults, int msgh);</pre>
> <pre class="api">int lua_pcall (lua_State *L, int nargs, int nresults, int msgh);</pre>
4755c4755
< <pre>int lua_pcallk (lua_State *L,
> <pre class="api">int lua_pcallk (lua_State *L,
4772c4772
< <pre>void lua_pop (lua_State *L, int n);</pre>
> <pre class="api">void lua_pop (lua_State *L, int n);</pre>
4784c4784
< <pre>void lua_pushboolean (lua_State *L, int b);</pre>
> <pre class="api">void lua_pushboolean (lua_State *L, int b);</pre>
4795c4795
< <pre>void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);</pre>
> <pre class="api">void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);</pre>
4844c4844
< <pre>void lua_pushcfunction (lua_State *L, lua_CFunction f);</pre>
> <pre class="api">void lua_pushcfunction (lua_State *L, lua_CFunction f);</pre>
4856c4856
< <pre>const char *lua_pushfstring (lua_State *L, const char *fmt, ...);</pre>
> <pre class="api">const char *lua_pushfstring (lua_State *L, const char *fmt, ...);</pre>
4891c4891
< <pre>void lua_pushglobaltable (lua_State *L);</pre>
> <pre class="api">void lua_pushglobaltable (lua_State *L);</pre>
4902c4902
< <pre>void lua_pushinteger (lua_State *L, lua_Integer n);</pre>
> <pre class="api">void lua_pushinteger (lua_State *L, lua_Integer n);</pre>
4913c4913
< <pre>void lua_pushlightuserdata (lua_State *L, void *p);</pre>
> <pre class="api">void lua_pushlightuserdata (lua_State *L, void *p);</pre>
4934c4934
< <pre>const char *lua_pushliteral (lua_State *L, const char *s);</pre>
> <pre class="api">const char *lua_pushliteral (lua_State *L, const char *s);</pre>
4947c4947
< <pre>const char *lua_pushlstring (lua_State *L, const char *s, size_t len);</pre>
> <pre class="api">const char *lua_pushlstring (lua_State *L, const char *s, size_t len);</pre>
4968c4968
< <pre>void lua_pushnil (lua_State *L);</pre>
> <pre class="api">void lua_pushnil (lua_State *L);</pre>
4979c4979
< <pre>void lua_pushnumber (lua_State *L, lua_Number n);</pre>
> <pre class="api">void lua_pushnumber (lua_State *L, lua_Number n);</pre>
4990c4990
< <pre>const char *lua_pushstring (lua_State *L, const char *s);</pre>
> <pre class="api">const char *lua_pushstring (lua_State *L, const char *s);</pre>
5013c5013
< <pre>int lua_pushthread (lua_State *L);</pre>
> <pre class="api">int lua_pushthread (lua_State *L);</pre>
5025c5025
< <pre>void lua_pushvalue (lua_State *L, int index);</pre>
> <pre class="api">void lua_pushvalue (lua_State *L, int index);</pre>
5037c5037
< <pre>const char *lua_pushvfstring (lua_State *L,
> <pre class="api">const char *lua_pushvfstring (lua_State *L,
5051c5051
< <pre>int lua_rawequal (lua_State *L, int index1, int index2);</pre>
> <pre class="api">int lua_rawequal (lua_State *L, int index1, int index2);</pre>
5066c5066
< <pre>int lua_rawget (lua_State *L, int index);</pre>
> <pre class="api">int lua_rawget (lua_State *L, int index);</pre>
5079c5079
< <pre>int lua_rawgeti (lua_State *L, int index, lua_Integer n);</pre>
> <pre class="api">int lua_rawgeti (lua_State *L, int index, lua_Integer n);</pre>
5097c5097
< <pre>int lua_rawgetp (lua_State *L, int index, const void *p);</pre>
> <pre class="api">int lua_rawgetp (lua_State *L, int index, const void *p);</pre>
5116c5116
< <pre>lua_Unsigned lua_rawlen (lua_State *L, int index);</pre>
> <pre class="api">lua_Unsigned lua_rawlen (lua_State *L, int index);</pre>
5133c5133
< <pre>void lua_rawset (lua_State *L, int index);</pre>
> <pre class="api">void lua_rawset (lua_State *L, int index);</pre>
5146c5146
< <pre>void lua_rawseti (lua_State *L, int index, lua_Integer i);</pre>
> <pre class="api">void lua_rawseti (lua_State *L, int index, lua_Integer i);</pre>
5165c5165
< <pre>void lua_rawsetp (lua_State *L, int index, const void *p);</pre>
> <pre class="api">void lua_rawsetp (lua_State *L, int index, const void *p);</pre>
5184c5184
< <pre>typedef const char * (*lua_Reader) (lua_State *L,
> <pre class="api">typedef const char * (*lua_Reader) (lua_State *L,
5207c5207
< <pre>void lua_register (lua_State *L, const char *name, lua_CFunction f);</pre>
> <pre class="api">void lua_register (lua_State *L, const char *name, lua_CFunction f);</pre>
5223c5223
< <pre>void lua_remove (lua_State *L, int index);</pre>
> <pre class="api">void lua_remove (lua_State *L, int index);</pre>
5237c5237
< <pre>void lua_replace (lua_State *L, int index);</pre>
> <pre class="api">void lua_replace (lua_State *L, int index);</pre>
5251c5251
< <pre>int lua_resetthread (lua_State *L);</pre>
> <pre class="api">int lua_resetthread (lua_State *L);</pre>
5264c5264
< <pre>int lua_resume (lua_State *L, lua_State *from, int nargs,
> <pre class="api">int lua_resume (lua_State *L, lua_State *from, int nargs,
5310c5310
< <pre>void lua_rotate (lua_State *L, int idx, int n);</pre>
> <pre class="api">void lua_rotate (lua_State *L, int idx, int n);</pre>
5330c5330
< <pre>void lua_setallocf (lua_State *L, lua_Alloc f, void *ud);</pre>
> <pre class="api">void lua_setallocf (lua_State *L, lua_Alloc f, void *ud);</pre>
5342c5342
< <pre>void lua_setfield (lua_State *L, int index, const char *k);</pre>
> <pre class="api">void lua_setfield (lua_State *L, int index, const char *k);</pre>
5361c5361
< <pre>void lua_setglobal (lua_State *L, const char *name);</pre>
> <pre class="api">void lua_setglobal (lua_State *L, const char *name);</pre>
5373c5373
< <pre>void lua_seti (lua_State *L, int index, lua_Integer n);</pre>
> <pre class="api">void lua_seti (lua_State *L, int index, lua_Integer n);</pre>
5392c5392
< <pre>int lua_setiuservalue (lua_State *L, int index, int n);</pre>
> <pre class="api">int lua_setiuservalue (lua_State *L, int index, int n);</pre>
5406c5406
< <pre>int lua_setmetatable (lua_State *L, int index);</pre>
> <pre class="api">int lua_setmetatable (lua_State *L, int index);</pre>
5424c5424
< <pre>void lua_settable (lua_State *L, int index);</pre>
> <pre class="api">void lua_settable (lua_State *L, int index);</pre>
5444c5444
< <pre>void lua_settop (lua_State *L, int index);</pre>
> <pre class="api">void lua_settop (lua_State *L, int index);</pre>
5464c5464
< <pre>void lua_setwarnf (lua_State *L, lua_WarnFunction f, void *ud);</pre>
> <pre class="api">void lua_setwarnf (lua_State *L, lua_WarnFunction f, void *ud);</pre>
5477c5477
< <pre>typedef struct lua_State lua_State;</pre>
> <pre class="api">typedef struct lua_State lua_State;</pre>
5498c5498
< <pre>int lua_status (lua_State *L);</pre>
> <pre class="api">int lua_status (lua_State *L);</pre>
5523c5523
< <pre>size_t lua_stringtonumber (lua_State *L, const char *s);</pre>
> <pre class="api">size_t lua_stringtonumber (lua_State *L, const char *s);</pre>
5544c5544
< <pre>int lua_toboolean (lua_State *L, int index);</pre>
> <pre class="api">int lua_toboolean (lua_State *L, int index);</pre>
5562c5562
< <pre>lua_CFunction lua_tocfunction (lua_State *L, int index);</pre>
> <pre class="api">lua_CFunction lua_tocfunction (lua_State *L, int index);</pre>
5575c5575
< <pre>void lua_toclose (lua_State *L, int index);</pre>
> <pre class="api">void lua_toclose (lua_State *L, int index);</pre>
5617c5617
< <pre>lua_Integer lua_tointeger (lua_State *L, int index);</pre>
> <pre class="api">lua_Integer lua_tointeger (lua_State *L, int index);</pre>
5628c5628
< <pre>lua_Integer lua_tointegerx (lua_State *L, int index, int *isnum);</pre>
> <pre class="api">lua_Integer lua_tointegerx (lua_State *L, int index, int *isnum);</pre>
5649c5649
< <pre>const char *lua_tolstring (lua_State *L, int index, size_t *len);</pre>
> <pre class="api">const char *lua_tolstring (lua_State *L, int index, size_t *len);</pre>
5683c5683
< <pre>lua_Number lua_tonumber (lua_State *L, int index);</pre>
> <pre class="api">lua_Number lua_tonumber (lua_State *L, int index);</pre>
5694c5694
< <pre>lua_Number lua_tonumberx (lua_State *L, int index, int *isnum);</pre>
> <pre class="api">lua_Number lua_tonumberx (lua_State *L, int index, int *isnum);</pre>
5715c5715
< <pre>const void *lua_topointer (lua_State *L, int index);</pre>
> <pre class="api">const void *lua_topointer (lua_State *L, int index);</pre>
5735c5735
< <pre>const char *lua_tostring (lua_State *L, int index);</pre>
> <pre class="api">const char *lua_tostring (lua_State *L, int index);</pre>
5746c5746
< <pre>lua_State *lua_tothread (lua_State *L, int index);</pre>
> <pre class="api">lua_State *lua_tothread (lua_State *L, int index);</pre>
5760c5760
< <pre>void *lua_touserdata (lua_State *L, int index);</pre>
> <pre class="api">void *lua_touserdata (lua_State *L, int index);</pre>
5775c5775
< <pre>int lua_type (lua_State *L, int index);</pre>
> <pre class="api">int lua_type (lua_State *L, int index);</pre>
5799c5799
< <pre>const char *lua_typename (lua_State *L, int tp);</pre>
> <pre class="api">const char *lua_typename (lua_State *L, int tp);</pre>
5810c5810
< <pre>typedef ... lua_Unsigned;</pre>
> <pre class="api">typedef ... lua_Unsigned;</pre>
5821c5821
< <pre>int lua_upvalueindex (int i);</pre>
> <pre class="api">int lua_upvalueindex (int i);</pre>
5834c5834
< <pre>lua_Number lua_version (lua_State *L);</pre>
> <pre class="api">lua_Number lua_version (lua_State *L);</pre>
5844c5844
< <pre>typedef void (*lua_WarnFunction) (void *ud, const char *msg, int tocont);</pre>
> <pre class="api">typedef void (*lua_WarnFunction) (void *ud, const char *msg, int tocont);</pre>
5865c5865
< <pre>void lua_warning (lua_State *L, const char *msg, int tocont);</pre>
> <pre class="api">void lua_warning (lua_State *L, const char *msg, int tocont);</pre>
5881c5881
< <pre>typedef int (*lua_Writer) (lua_State *L,
> <pre class="api">typedef int (*lua_Writer) (lua_State *L,
5907c5907
< <pre>void lua_xmove (lua_State *from, lua_State *to, int n);</pre>
> <pre class="api">void lua_xmove (lua_State *from, lua_State *to, int n);</pre>
5923c5923
< <pre>int lua_yield (lua_State *L, int nresults);</pre>
> <pre class="api">int lua_yield (lua_State *L, int nresults);</pre>
5940c5940
< <pre>int lua_yieldk (lua_State *L,
> <pre class="api">int lua_yieldk (lua_State *L,
6012c6012
< <pre>typedef struct lua_Debug {
> <pre class="api">typedef struct lua_Debug {
6155c6155
< <pre>lua_Hook lua_gethook (lua_State *L);</pre>
> <pre class="api">lua_Hook lua_gethook (lua_State *L);</pre>
6166c6166
< <pre>int lua_gethookcount (lua_State *L);</pre>
> <pre class="api">int lua_gethookcount (lua_State *L);</pre>
6177c6177
< <pre>int lua_gethookmask (lua_State *L);</pre>
> <pre class="api">int lua_gethookmask (lua_State *L);</pre>
6188c6188
< <pre>int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);</pre>
> <pre class="api">int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);</pre>
6274c6274
< <pre>const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n);</pre>
> <pre class="api">const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n);</pre>
6315c6315
< <pre>int lua_getstack (lua_State *L, int level, lua_Debug *ar);</pre>
> <pre class="api">int lua_getstack (lua_State *L, int level, lua_Debug *ar);</pre>
6338c6338
< <pre>const char *lua_getupvalue (lua_State *L, int funcindex, int n);</pre>
> <pre class="api">const char *lua_getupvalue (lua_State *L, int funcindex, int n);</pre>
6357c6357
< <pre>typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);</pre>
> <pre class="api">typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);</pre>
6406c6406
< <pre>void lua_sethook (lua_State *L, lua_Hook f, int mask, int count);</pre>
> <pre class="api">void lua_sethook (lua_State *L, lua_Hook f, int mask, int count);</pre>
6456c6456
< <pre>const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n);</pre>
> <pre class="api">const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n);</pre>
6480c6480
< <pre>const char *lua_setupvalue (lua_State *L, int funcindex, int n);</pre>
> <pre class="api">const char *lua_setupvalue (lua_State *L, int funcindex, int n);</pre>
6504c6504
< <pre>void *lua_upvalueid (lua_State *L, int funcindex, int n);</pre>
> <pre class="api">void *lua_upvalueid (lua_State *L, int funcindex, int n);</pre>
6530c6530
< <pre>void lua_upvaluejoin (lua_State *L, int funcindex1, int n1,
> <pre class="api">void lua_upvaluejoin (lua_State *L, int funcindex1, int n1,
6605c6605
< <pre>void luaL_addchar (luaL_Buffer *B, char c);</pre>
> <pre class="api">void luaL_addchar (luaL_Buffer *B, char c);</pre>
6617c6617
< <pre>const void luaL_addgsub (luaL_Buffer *B, const char *s,
> <pre class="api">const void luaL_addgsub (luaL_Buffer *B, const char *s,
6631c6631
< <pre>void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);</pre>
> <pre class="api">void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);</pre>
6645c6645
< <pre>void luaL_addsize (luaL_Buffer *B, size_t n);</pre>
> <pre class="api">void luaL_addsize (luaL_Buffer *B, size_t n);</pre>
6658c6658
< <pre>void luaL_addstring (luaL_Buffer *B, const char *s);</pre>
> <pre class="api">void luaL_addstring (luaL_Buffer *B, const char *s);</pre>
6671c6671
< <pre>void luaL_addvalue (luaL_Buffer *B);</pre>
> <pre class="api">void luaL_addvalue (luaL_Buffer *B);</pre>
6691c6691
< <pre>void luaL_argcheck (lua_State *L,
> <pre class="api">void luaL_argcheck (lua_State *L,
6706c6706
< <pre>int luaL_argerror (lua_State *L, int arg, const char *extramsg);</pre>
> <pre class="api">int luaL_argerror (lua_State *L, int arg, const char *extramsg);</pre>
6725c6725
< <pre>void luaL_argexpected (lua_State *L,
> <pre class="api">void luaL_argexpected (lua_State *L,
6740c6740
< <pre>typedef struct luaL_Buffer luaL_Buffer;</pre>
> <pre class="api">typedef struct luaL_Buffer luaL_Buffer;</pre>
6812c6812
< <pre>char *luaL_buffaddr (luaL_Buffer *B);</pre>
> <pre class="api">char *luaL_buffaddr (luaL_Buffer *B);</pre>
6825c6825
< <pre>void luaL_buffinit (lua_State *L, luaL_Buffer *B);</pre>
> <pre class="api">void luaL_buffinit (lua_State *L, luaL_Buffer *B);</pre>
6839c6839
< <pre>size_t luaL_bufflen (luaL_Buffer *B);</pre>
> <pre class="api">size_t luaL_bufflen (luaL_Buffer *B);</pre>
6851c6851
< <pre>char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz);</pre>
> <pre class="api">char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz);</pre>
6863c6863
< <pre>void luaL_buffsub (luaL_Buffer *B, int n);</pre>
> <pre class="api">void luaL_buffsub (luaL_Buffer *B, int n);</pre>
6876c6876
< <pre>int luaL_callmeta (lua_State *L, int obj, const char *e);</pre>
> <pre class="api">int luaL_callmeta (lua_State *L, int obj, const char *e);</pre>
6897c6897
< <pre>void luaL_checkany (lua_State *L, int arg);</pre>
> <pre class="api">void luaL_checkany (lua_State *L, int arg);</pre>
6909c6909
< <pre>lua_Integer luaL_checkinteger (lua_State *L, int arg);</pre>
> <pre class="api">lua_Integer luaL_checkinteger (lua_State *L, int arg);</pre>
6922c6922
< <pre>const char *luaL_checklstring (lua_State *L, int arg, size_t *l);</pre>
> <pre class="api">const char *luaL_checklstring (lua_State *L, int arg, size_t *l);</pre>
6941c6941
< <pre>lua_Number luaL_checknumber (lua_State *L, int arg);</pre>
> <pre class="api">lua_Number luaL_checknumber (lua_State *L, int arg);</pre>
6953c6953
< <pre>int luaL_checkoption (lua_State *L,
> <pre class="api">int luaL_checkoption (lua_State *L,
6984c6984
< <pre>void luaL_checkstack (lua_State *L, int sz, const char *msg);</pre>
> <pre class="api">void luaL_checkstack (lua_State *L, int sz, const char *msg);</pre>
6998c6998
< <pre>const char *luaL_checkstring (lua_State *L, int arg);</pre>
> <pre class="api">const char *luaL_checkstring (lua_State *L, int arg);</pre>
7015c7015
< <pre>void luaL_checktype (lua_State *L, int arg, int t);</pre>
> <pre class="api">void luaL_checktype (lua_State *L, int arg, int t);</pre>
7027c7027
< <pre>void *luaL_checkudata (lua_State *L, int arg, const char *tname);</pre>
> <pre class="api">void *luaL_checkudata (lua_State *L, int arg, const char *tname);</pre>
7040c7040
< <pre>void luaL_checkversion (lua_State *L);</pre>
> <pre class="api">void luaL_checkversion (lua_State *L);</pre>
7052c7052
< <pre>int luaL_dofile (lua_State *L, const char *filename);</pre>
> <pre class="api">int luaL_dofile (lua_State *L, const char *filename);</pre>
7070c7070
< <pre>int luaL_dostring (lua_State *L, const char *str);</pre>
> <pre class="api">int luaL_dostring (lua_State *L, const char *str);</pre>
7088c7088
< <pre>int luaL_error (lua_State *L, const char *fmt, ...);</pre>
> <pre class="api">int luaL_error (lua_State *L, const char *fmt, ...);</pre>
7111c7111
< <pre>int luaL_execresult (lua_State *L, int stat);</pre>
> <pre class="api">int luaL_execresult (lua_State *L, int stat);</pre>
7124c7124
< <pre>int luaL_fileresult (lua_State *L, int stat, const char *fname);</pre>
> <pre class="api">int luaL_fileresult (lua_State *L, int stat, const char *fname);</pre>
7137c7137
< <pre>int luaL_getmetafield (lua_State *L, int obj, const char *e);</pre>
> <pre class="api">int luaL_getmetafield (lua_State *L, int obj, const char *e);</pre>
7152c7152
< <pre>int luaL_getmetatable (lua_State *L, const char *tname);</pre>
> <pre class="api">int luaL_getmetatable (lua_State *L, const char *tname);</pre>
7166c7166
< <pre>int luaL_getsubtable (lua_State *L, int idx, const char *fname);</pre>
> <pre class="api">int luaL_getsubtable (lua_State *L, int idx, const char *fname);</pre>
7182c7182
< <pre>const char *luaL_gsub (lua_State *L,
> <pre class="api">const char *luaL_gsub (lua_State *L,
7199c7199
< <pre>lua_Integer luaL_len (lua_State *L, int index);</pre>
> <pre class="api">lua_Integer luaL_len (lua_State *L, int index);</pre>
7214c7214
< <pre>int luaL_loadbuffer (lua_State *L,
> <pre class="api">int luaL_loadbuffer (lua_State *L,
7228c7228
< <pre>int luaL_loadbufferx (lua_State *L,
> <pre class="api">int luaL_loadbufferx (lua_State *L,
7252c7252
< <pre>int luaL_loadfile (lua_State *L, const char *filename);</pre>
> <pre class="api">int luaL_loadfile (lua_State *L, const char *filename);</pre>
7263c7263
< <pre>int luaL_loadfilex (lua_State *L, const char *filename,
> <pre class="api">int luaL_loadfilex (lua_State *L, const char *filename,
7294c7294
< <pre>int luaL_loadstring (lua_State *L, const char *s);</pre>
> <pre class="api">int luaL_loadstring (lua_State *L, const char *s);</pre>
7316c7316
< <pre>void luaL_newlib (lua_State *L, const luaL_Reg l[]);</pre>
> <pre class="api">void luaL_newlib (lua_State *L, const luaL_Reg l[]);</pre>
7338c7338
< <pre>void luaL_newlibtable (lua_State *L, const luaL_Reg l[]);</pre>
> <pre class="api">void luaL_newlibtable (lua_State *L, const luaL_Reg l[]);</pre>
7359c7359
< <pre>int luaL_newmetatable (lua_State *L, const char *tname);</pre>
> <pre class="api">int luaL_newmetatable (lua_State *L, const char *tname);</pre>
7382c7382
< <pre>lua_State *luaL_newstate (void);</pre>
> <pre class="api">lua_State *luaL_newstate (void);</pre>
7402c7402
< <pre>void luaL_openlibs (lua_State *L);</pre>
> <pre class="api">void luaL_openlibs (lua_State *L);</pre>
7413c7413
< <pre>T luaL_opt (L, func, arg, dflt);</pre>
> <pre class="api">T luaL_opt (L, func, arg, dflt);</pre>
7434c7434
< <pre>lua_Integer luaL_optinteger (lua_State *L,
> <pre class="api">lua_Integer luaL_optinteger (lua_State *L,
7452c7452
< <pre>const char *luaL_optlstring (lua_State *L,
> <pre class="api">const char *luaL_optlstring (lua_State *L,
7483c7483
< <pre>lua_Number luaL_optnumber (lua_State *L, int arg, lua_Number d);</pre>
> <pre class="api">lua_Number luaL_optnumber (lua_State *L, int arg, lua_Number d);</pre>
7498c7498
< <pre>const char *luaL_optstring (lua_State *L,
> <pre class="api">const char *luaL_optstring (lua_State *L,
7515c7515
< <pre>char *luaL_prepbuffer (luaL_Buffer *B);</pre>
> <pre class="api">char *luaL_prepbuffer (luaL_Buffer *B);</pre>
7527c7527
< <pre>char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz);</pre>
> <pre class="api">char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz);</pre>
7543c7543
< <pre>void luaL_pushfail (lua_State *L);</pre>
> <pre class="api">void luaL_pushfail (lua_State *L);</pre>
7554c7554
< <pre>void luaL_pushresult (luaL_Buffer *B);</pre>
> <pre class="api">void luaL_pushresult (luaL_Buffer *B);</pre>
7566c7566
< <pre>void luaL_pushresultsize (luaL_Buffer *B, size_t sz);</pre>
> <pre class="api">void luaL_pushresultsize (luaL_Buffer *B, size_t sz);</pre>
7577c7577
< <pre>int luaL_ref (lua_State *L, int t);</pre>
> <pre class="api">int luaL_ref (lua_State *L, int t);</pre>
7605c7605
< <pre>typedef struct luaL_Reg {
> <pre class="api">typedef struct luaL_Reg {
7624c7624
< <pre>void luaL_requiref (lua_State *L, const char *modname,
> <pre class="api">void luaL_requiref (lua_State *L, const char *modname,
7648c7648
< <pre>void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup);</pre>
> <pre class="api">void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup);</pre>
7675c7675
< <pre>void luaL_setmetatable (lua_State *L, const char *tname);</pre>
> <pre class="api">void luaL_setmetatable (lua_State *L, const char *tname);</pre>
7687c7687
< <pre>typedef struct luaL_Stream {
> <pre class="api">typedef struct luaL_Stream {
7726c7726
< <pre>void *luaL_testudata (lua_State *L, int arg, const char *tname);</pre>
> <pre class="api">void *luaL_testudata (lua_State *L, int arg, const char *tname);</pre>
7739c7739
< <pre>const char *luaL_tolstring (lua_State *L, int idx, size_t *len);</pre>
> <pre class="api">const char *luaL_tolstring (lua_State *L, int idx, size_t *len);</pre>
7762c7762
< <pre>void luaL_traceback (lua_State *L, lua_State *L1, const char *msg,
> <pre class="api">void luaL_traceback (lua_State *L, lua_State *L1, const char *msg,
7778c7778
< <pre>int luaL_typeerror (lua_State *L, int arg, const char *tname);</pre>
> <pre class="api">int luaL_typeerror (lua_State *L, int arg, const char *tname);</pre>
7793c7793
< <pre>const char *luaL_typename (lua_State *L, int index);</pre>
> <pre class="api">const char *luaL_typename (lua_State *L, int index);</pre>
7804c7804
< <pre>void luaL_unref (lua_State *L, int t, int ref);</pre>
> <pre class="api">void luaL_unref (lua_State *L, int t, int ref);</pre>
7824c7824
< <pre>void luaL_where (lua_State *L, int lvl);</pre>
> <pre class="api">void luaL_where (lua_State *L, int lvl);</pre>
12053c12053
< Wed May 21 21:09:59 UTC 2025
> Fri Aug 7 20:25:45 UTC 2026
12056c12056
< Last change: revised for Lua 5.4.8
> Last change: revised for Lua 5.4.9
doc/readme.html
32c32
< <A HREF="https://www.lua.org/"><IMG SRC="logo.gif" ALT="Lua"></A>
> <A HREF="https://www.lua.org/"><IMG SRC="logo.png" ALT="Lua"></A>
89,90c89,90
< Lua is implemented in pure ANSI C and compiles unmodified in all known
< platforms that have an ANSI C compiler.
> Lua is implemented in pure ISO C and compiles unmodified in all known
> platforms that have an ISO C compiler.
112c112
< the top-level directory, which is named <TT>lua-5.4.8</TT>.
> the top-level directory, which is named <TT>lua-5.4.9</TT>.
290c290
< <IMG SRC="OSIApproved_100X125.png" ALIGN="right" ALT="[Open Source Initiative Approved License]" STYLE="padding-left: 1em" WIDTH=50>
> <IMG SRC="OSIApproved.png" ALIGN="right" ALT="[Open Source Initiative Approved License]" STYLE="padding-left: 1em" WIDTH=50>
305c305
< Copyright © 1994–2025 Lua.org, PUC-Rio.
> Copyright © 1994–2026 Lua.org, PUC-Rio.
332c332
< Wed May 21 21:12:01 UTC 2025
> Wed Aug 5 21:42:45 UTC 2026
335c335
< Last change: revised for Lua 5.4.8
> Last change: revised for Lua 5.4.9
src/lapi.c
1091a1092
> luaC_checkGC(L);
src/lauxlib.c
503a504,517
> /*
> ** Get/create metatable (MT) for boxes
> */
> static void getBoxMT (lua_State *L) {
> const char *BOXMT = "_UBOX*"; /* key for the metatable */
> if (luaL_getmetatable(L, BOXMT) == LUA_TNIL) { /* MT not created yet? */
> luaL_newlibtable(L, boxmt); /* create it */
> luaL_setfuncs(L, boxmt, 0); /* initialize it */
> lua_copy(L, -1, -2); /* change stack from nil,MT to MT,MT */
> lua_setfield(L, LUA_REGISTRYINDEX, BOXMT); /* store MT in the registry */
> }
> }
>
>
508,509c522
< if (luaL_newmetatable(L, "_UBOX*")) /* creating metatable? */
< luaL_setfuncs(L, boxmt, 0); /* set its metamethods */
> getBoxMT(L);
src/ldo.c
208a209,227
> ** Check whether stacks have enough space to run a simple function (such
> ** as a finalizer): At least BASIC_STACK_SIZE in the Lua stack, two
> ** available CallInfos, and two "slots" in the C stack.
> */
> int luaD_checkminstack (lua_State *L) {
> if (getCcalls(L) >= LUAI_MAXCCALLS - 2)
> return 0; /* not enough C-stack slots */
> if (L->ci->next == NULL && luaE_extendCI(L, 0) == NULL)
> return 0; /* unable to allocate first ci */
> if (L->ci->next->next == NULL && luaE_extendCI(L, 0) == NULL)
> return 0; /* unable to allocate second ci */
> if (L->stack_last.p - L->top.p >= BASIC_STACK_SIZE)
> return 1; /* enough (BASIC_STACK_SIZE) free slots in the Lua stack */
> else /* try to grow stack to a size with enough free slots */
> return luaD_growstack(L, BASIC_STACK_SIZE, 0);
> }
>
>
> /*
506c525
< #define next_ci(L) (L->ci->next ? L->ci->next : luaE_extendCI(L))
> #define next_ci(L) (L->ci->next ? L->ci->next : luaE_extendCI(L, 1))
src/ldo.h
82a83
> LUAI_FUNC int luaD_checkminstack (lua_State *L);
src/lgc.c
556,557c556,561
< else /* all weak */
< linkgclist(h, g->allweak); /* nothing to traverse now */
> else { /* all weak */
> if (g->gcstate == GCSpropagate)
> linkgclist(h, g->grayagain); /* must visit again its metatable */
> else
> linkgclist(h, g->allweak); /* must clear collected entries */
> }
1241c1245
< if (!g->gcemergency)
> if (g->tobefnz != NULL && !g->gcemergency && luaD_checkminstack(L))
1631c1635
< if (g->tobefnz && !g->gcemergency) {
> if (g->tobefnz && !g->gcemergency && luaD_checkminstack(L)) {
1635c1639,1640
< else { /* emergency mode or no more finalizers */
> else { /* no more finalizers or emergency mode or no enough stack
> to run finalizers */
src/lparser.c
942a943,944
> checklimit(fs, cc.tostore + cc.na + cc.nh, INT_MAX/2,
> "items in a constructor");
src/lstate.c
105c105
< CallInfo *luaE_extendCI (lua_State *L) {
> CallInfo *luaE_extendCI (lua_State *L, int err) {
107,110c107,113
< lua_assert(L->ci->next == NULL);
< ci = luaM_new(L, CallInfo);
< lua_assert(L->ci->next == NULL);
< L->ci->next = ci;
> ci = luaM_reallocvector(L, NULL, 0, 1, CallInfo);
> if (l_unlikely(ci == NULL)) { /* allocation failed? */
> if (err)
> luaM_error(L); /* raise the error */
> return NULL; /* else only report it */
> }
> ci->next = L->ci->next;
112c115,117
< ci->next = NULL;
> L->ci->next = ci;
> if (ci->next)
> ci->next->previous = ci;
src/lstate.h
398c398
< LUAI_FUNC CallInfo *luaE_extendCI (lua_State *L);
> LUAI_FUNC CallInfo *luaE_extendCI (lua_State *L, int err);
src/lstrlib.c
760d759
< ms->matchdepth = MAXCCALLS;
767a767
> ms->matchdepth = MAXCCALLS;
769d768
< lua_assert(ms->matchdepth == MAXCCALLS);
src/lua.c
305c305,306
< *first = i + 1;
> /* if there is a script name, it comes after '--' */
> *first = (argv[i + 1] != NULL) ? i + 1 : 0;
src/lua.h
21c21
< #define LUA_VERSION_RELEASE "8"
> #define LUA_VERSION_RELEASE "9"
24c24
< #define LUA_VERSION_RELEASE_NUM (LUA_VERSION_NUM * 100 + 8)
> #define LUA_VERSION_RELEASE_NUM (LUA_VERSION_NUM * 100 + 9)
28c28
< #define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2025 Lua.org, PUC-Rio"
> #define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2026 Lua.org, PUC-Rio"
500c500
< * Copyright (C) 1994-2025 Lua.org, PUC-Rio.
> * Copyright (C) 1994-2026 Lua.org, PUC-Rio.
src/lutf8lib.c
67a68,69
> else if (c >= 0xfe) /* c >= 1111 1110b ? */
> return NULL; /* would need six or more continuation bytes */
77c79
< if (count > 5 || res > MAXUTF || res < limits[count])
> if (res > MAXUTF || res < limits[count])
src/lvm.c
364c364,369
< luaV_finishfastset(L, t, slot, val);
> /* execute 'luaV_finishfastset', but preserving the original 't'
> for the barrier. 't' and 'slot' can point to the same value,
> and so the assignment can change 't' value */
> GCObject *h = gcvalue(t);
> setobj2t(L, cast(TValue *,slot), val);
> luaC_barrierback(L, h, val);