Lua 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 &copy; 2020&ndash;2025 Lua.org, PUC-Rio.
> Copyright &copy; 2020&ndash;2026 Lua.org, PUC-Rio.

88c88
< <LI><A HREF="manual.html#3.4.12">3.4.12 &ndash; Lists of expressions, multiple results, and adjustment<A>
> <LI><A HREF="manual.html#3.4.12">3.4.12 &ndash; 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 &copy; 2020&ndash;2025 Lua.org, PUC-Rio.
> Copyright &copy; 2020&ndash;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 &copy; 1994&ndash;2025 Lua.org, PUC-Rio.
> Copyright &copy; 1994&ndash;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);