mirror of
https://github.com/d0k3/GodMode9.git
synced 2026-05-30 22:36:55 +00:00
Update Lua to 5.4.8 (#939)
* Update lapi.c * Update lcode.c * Update lcode.c * Update ldebug.c * Update ldo.c * Update ldo.h * Update lparser.c * Update lstate.c * Update lua.h * Update lvm.c * Update lua-doc.md * Fix missing newline * Update lcode.c * Update ldo.c * Update lvm.c * Update lvm.c * Update README.md
This commit is contained in:
parent
65b55f9d60
commit
1bbd8193d1
@ -1,11 +1,11 @@
|
|||||||
This is Lua 5.4.7 with a few modifications:
|
This is Lua 5.4.8 with a few modifications:
|
||||||
* Patches made to silence warnings: https://github.com/ihaveamac/GodMode9/commit/9905b939b26aae3422c906c7858d8852764fa279
|
* Patches made to silence warnings: https://github.com/ihaveamac/GodMode9/commit/9905b939b26aae3422c906c7858d8852764fa279
|
||||||
* lua.c, luac.c, lua.hpp removed (not useful in GodMode9)
|
* lua.c, luac.c, lua.hpp removed (not useful in GodMode9)
|
||||||
* liolib.c, loslib.c removed (replaced with custom implementations)
|
* liolib.c, loslib.c removed (replaced with custom implementations)
|
||||||
|
|
||||||
## License of Lua 5.4.7
|
## License of Lua 5.4.8
|
||||||
|
|
||||||
Copyright © 1994–2024 Lua.org, PUC-Rio.
|
Copyright © 1994–2025 Lua.org, PUC-Rio.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
|||||||
@ -1343,7 +1343,7 @@ void lua_warning (lua_State *L, const char *msg, int tocont) {
|
|||||||
LUA_API void *lua_newuserdatauv (lua_State *L, size_t size, int nuvalue) {
|
LUA_API void *lua_newuserdatauv (lua_State *L, size_t size, int nuvalue) {
|
||||||
Udata *u;
|
Udata *u;
|
||||||
lua_lock(L);
|
lua_lock(L);
|
||||||
api_check(L, 0 <= nuvalue && nuvalue < USHRT_MAX, "invalid value");
|
api_check(L, 0 <= nuvalue && nuvalue < SHRT_MAX, "invalid value");
|
||||||
u = luaS_newudata(L, size, nuvalue);
|
u = luaS_newudata(L, size, nuvalue);
|
||||||
setuvalue(L, s2v(L->top.p), u);
|
setuvalue(L, s2v(L->top.p), u);
|
||||||
api_incr_top(L);
|
api_incr_top(L);
|
||||||
|
|||||||
@ -35,6 +35,7 @@
|
|||||||
#define MAXREGS 255
|
#define MAXREGS 255
|
||||||
|
|
||||||
|
|
||||||
|
/* (note that expressions VJMP also have jumps.) */
|
||||||
#define hasjumps(e) ((e)->t != (e)->f)
|
#define hasjumps(e) ((e)->t != (e)->f)
|
||||||
|
|
||||||
|
|
||||||
@ -985,7 +986,7 @@ void luaK_exp2anyregup (FuncState *fs, expdesc *e) {
|
|||||||
** or it is a constant.
|
** or it is a constant.
|
||||||
*/
|
*/
|
||||||
void luaK_exp2val (FuncState *fs, expdesc *e) {
|
void luaK_exp2val (FuncState *fs, expdesc *e) {
|
||||||
if (hasjumps(e))
|
if (e->k == VJMP || hasjumps(e))
|
||||||
luaK_exp2anyreg(fs, e);
|
luaK_exp2anyreg(fs, e);
|
||||||
else
|
else
|
||||||
luaK_dischargevars(fs, e);
|
luaK_dischargevars(fs, e);
|
||||||
|
|||||||
@ -37,6 +37,9 @@
|
|||||||
static const char *funcnamefromcall (lua_State *L, CallInfo *ci,
|
static const char *funcnamefromcall (lua_State *L, CallInfo *ci,
|
||||||
const char **name);
|
const char **name);
|
||||||
|
|
||||||
|
static const char strlocal[] = "local";
|
||||||
|
static const char strupval[] = "upvalue";
|
||||||
|
|
||||||
|
|
||||||
static int currentpc (CallInfo *ci) {
|
static int currentpc (CallInfo *ci) {
|
||||||
lua_assert(isLua(ci));
|
lua_assert(isLua(ci));
|
||||||
@ -497,7 +500,7 @@ static const char *basicgetobjname (const Proto *p, int *ppc, int reg,
|
|||||||
int pc = *ppc;
|
int pc = *ppc;
|
||||||
*name = luaF_getlocalname(p, reg + 1, pc);
|
*name = luaF_getlocalname(p, reg + 1, pc);
|
||||||
if (*name) /* is a local? */
|
if (*name) /* is a local? */
|
||||||
return "local";
|
return strlocal;
|
||||||
/* else try symbolic execution */
|
/* else try symbolic execution */
|
||||||
*ppc = pc = findsetreg(p, pc, reg);
|
*ppc = pc = findsetreg(p, pc, reg);
|
||||||
if (pc != -1) { /* could find instruction? */
|
if (pc != -1) { /* could find instruction? */
|
||||||
@ -512,7 +515,7 @@ static const char *basicgetobjname (const Proto *p, int *ppc, int reg,
|
|||||||
}
|
}
|
||||||
case OP_GETUPVAL: {
|
case OP_GETUPVAL: {
|
||||||
*name = upvalname(p, GETARG_B(i));
|
*name = upvalname(p, GETARG_B(i));
|
||||||
return "upvalue";
|
return strupval;
|
||||||
}
|
}
|
||||||
case OP_LOADK: return kname(p, GETARG_Bx(i), name);
|
case OP_LOADK: return kname(p, GETARG_Bx(i), name);
|
||||||
case OP_LOADKX: return kname(p, GETARG_Ax(p->code[pc + 1]), name);
|
case OP_LOADKX: return kname(p, GETARG_Ax(p->code[pc + 1]), name);
|
||||||
@ -547,15 +550,21 @@ static void rkname (const Proto *p, int pc, Instruction i, const char **name) {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
** Check whether table being indexed by instruction 'i' is the
|
** Check whether table being indexed by instruction 'i' is the
|
||||||
** environment '_ENV'
|
** environment '_ENV'. If the table is an upvalue, get its name;
|
||||||
|
** otherwise, find some "name" for the table and check whether
|
||||||
|
** that name is the name of a local variable (and not, for instance,
|
||||||
|
** a string). Then check that, if there is a name, it is '_ENV'.
|
||||||
*/
|
*/
|
||||||
static const char *isEnv (const Proto *p, int pc, Instruction i, int isup) {
|
static const char *isEnv (const Proto *p, int pc, Instruction i, int isup) {
|
||||||
int t = GETARG_B(i); /* table index */
|
int t = GETARG_B(i); /* table index */
|
||||||
const char *name; /* name of indexed variable */
|
const char *name; /* name of indexed variable */
|
||||||
if (isup) /* is 't' an upvalue? */
|
if (isup) /* is 't' an upvalue? */
|
||||||
name = upvalname(p, t);
|
name = upvalname(p, t);
|
||||||
else /* 't' is a register */
|
else { /* 't' is a register */
|
||||||
basicgetobjname(p, &pc, t, &name);
|
const char *what = basicgetobjname(p, &pc, t, &name);
|
||||||
|
if (what != strlocal && what != strupval)
|
||||||
|
name = NULL; /* cannot be the variable _ENV */
|
||||||
|
}
|
||||||
return (name && strcmp(name, LUA_ENV) == 0) ? "global" : "field";
|
return (name && strcmp(name, LUA_ENV) == 0) ? "global" : "field";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -701,7 +710,7 @@ static const char *getupvalname (CallInfo *ci, const TValue *o,
|
|||||||
for (i = 0; i < c->nupvalues; i++) {
|
for (i = 0; i < c->nupvalues; i++) {
|
||||||
if (c->upvals[i]->v.p == o) {
|
if (c->upvals[i]->v.p == o) {
|
||||||
*name = upvalname(c->p, i);
|
*name = upvalname(c->p, i);
|
||||||
return "upvalue";
|
return strupval;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
@ -94,10 +94,6 @@ void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop) {
|
|||||||
setsvalue2s(L, oldtop, G(L)->memerrmsg); /* reuse preregistered msg. */
|
setsvalue2s(L, oldtop, G(L)->memerrmsg); /* reuse preregistered msg. */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LUA_ERRERR: {
|
|
||||||
setsvalue2s(L, oldtop, luaS_newliteral(L, "error in error handling"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case LUA_OK: { /* special case only for closing upvalues */
|
case LUA_OK: { /* special case only for closing upvalues */
|
||||||
setnilvalue(s2v(oldtop)); /* no error message */
|
setnilvalue(s2v(oldtop)); /* no error message */
|
||||||
break;
|
break;
|
||||||
@ -120,6 +116,7 @@ l_noret luaD_throw (lua_State *L, int errcode) {
|
|||||||
else { /* thread has no error handler */
|
else { /* thread has no error handler */
|
||||||
global_State *g = G(L);
|
global_State *g = G(L);
|
||||||
errcode = luaE_resetthread(L, errcode); /* close all upvalues */
|
errcode = luaE_resetthread(L, errcode); /* close all upvalues */
|
||||||
|
L->status = errcode;
|
||||||
if (g->mainthread->errorJmp) { /* main thread has a handler? */
|
if (g->mainthread->errorJmp) { /* main thread has a handler? */
|
||||||
setobjs2s(L, g->mainthread->top.p++, L->top.p - 1); /* copy error obj. */
|
setobjs2s(L, g->mainthread->top.p++, L->top.p - 1); /* copy error obj. */
|
||||||
luaD_throw(g->mainthread, errcode); /* re-throw in main thread */
|
luaD_throw(g->mainthread, errcode); /* re-throw in main thread */
|
||||||
@ -198,6 +195,16 @@ static void correctstack (lua_State *L) {
|
|||||||
/* some space for error handling */
|
/* some space for error handling */
|
||||||
#define ERRORSTACKSIZE (LUAI_MAXSTACK + 200)
|
#define ERRORSTACKSIZE (LUAI_MAXSTACK + 200)
|
||||||
|
|
||||||
|
|
||||||
|
/* raise an error while running the message handler */
|
||||||
|
l_noret luaD_errerr (lua_State *L) {
|
||||||
|
TString *msg = luaS_newliteral(L, "error in error handling");
|
||||||
|
setsvalue2s(L, L->top.p, msg);
|
||||||
|
L->top.p++; /* assume EXTRA_STACK */
|
||||||
|
luaD_throw(L, LUA_ERRERR);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Reallocate the stack to a new size, correcting all pointers into it.
|
** Reallocate the stack to a new size, correcting all pointers into it.
|
||||||
** In ISO C, any pointer use after the pointer has been deallocated is
|
** In ISO C, any pointer use after the pointer has been deallocated is
|
||||||
@ -247,7 +254,7 @@ int luaD_growstack (lua_State *L, int n, int raiseerror) {
|
|||||||
a stack error; cannot grow further than that. */
|
a stack error; cannot grow further than that. */
|
||||||
lua_assert(stacksize(L) == ERRORSTACKSIZE);
|
lua_assert(stacksize(L) == ERRORSTACKSIZE);
|
||||||
if (raiseerror)
|
if (raiseerror)
|
||||||
luaD_throw(L, LUA_ERRERR); /* error inside message handler */
|
luaD_errerr(L); /* error inside message handler */
|
||||||
return 0; /* if not 'raiseerror', just signal it */
|
return 0; /* if not 'raiseerror', just signal it */
|
||||||
}
|
}
|
||||||
else if (n < LUAI_MAXSTACK) { /* avoids arithmetic overflows */
|
else if (n < LUAI_MAXSTACK) { /* avoids arithmetic overflows */
|
||||||
|
|||||||
@ -60,6 +60,7 @@
|
|||||||
/* type of protected functions, to be ran by 'runprotected' */
|
/* type of protected functions, to be ran by 'runprotected' */
|
||||||
typedef void (*Pfunc) (lua_State *L, void *ud);
|
typedef void (*Pfunc) (lua_State *L, void *ud);
|
||||||
|
|
||||||
|
LUAI_FUNC l_noret luaD_errerr (lua_State *L);
|
||||||
LUAI_FUNC void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop);
|
LUAI_FUNC void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop);
|
||||||
LUAI_FUNC int luaD_protectedparser (lua_State *L, ZIO *z, const char *name,
|
LUAI_FUNC int luaD_protectedparser (lua_State *L, ZIO *z, const char *name,
|
||||||
const char *mode);
|
const char *mode);
|
||||||
|
|||||||
@ -198,7 +198,7 @@ static int new_localvar (LexState *ls, TString *name) {
|
|||||||
checklimit(fs, dyd->actvar.n + 1 - fs->firstlocal,
|
checklimit(fs, dyd->actvar.n + 1 - fs->firstlocal,
|
||||||
MAXVARS, "local variables");
|
MAXVARS, "local variables");
|
||||||
luaM_growvector(L, dyd->actvar.arr, dyd->actvar.n + 1,
|
luaM_growvector(L, dyd->actvar.arr, dyd->actvar.n + 1,
|
||||||
dyd->actvar.size, Vardesc, USHRT_MAX, "local variables");
|
dyd->actvar.size, Vardesc, SHRT_MAX, "local variables");
|
||||||
var = &dyd->actvar.arr[dyd->actvar.n++];
|
var = &dyd->actvar.arr[dyd->actvar.n++];
|
||||||
var->vd.kind = VDKREG; /* default */
|
var->vd.kind = VDKREG; /* default */
|
||||||
var->vd.name = name;
|
var->vd.name = name;
|
||||||
@ -849,12 +849,11 @@ static void recfield (LexState *ls, ConsControl *cc) {
|
|||||||
FuncState *fs = ls->fs;
|
FuncState *fs = ls->fs;
|
||||||
int reg = ls->fs->freereg;
|
int reg = ls->fs->freereg;
|
||||||
expdesc tab, key, val;
|
expdesc tab, key, val;
|
||||||
if (ls->t.token == TK_NAME) {
|
if (ls->t.token == TK_NAME)
|
||||||
checklimit(fs, cc->nh, MAX_INT, "items in a constructor");
|
|
||||||
codename(ls, &key);
|
codename(ls, &key);
|
||||||
}
|
|
||||||
else /* ls->t.token == '[' */
|
else /* ls->t.token == '[' */
|
||||||
yindex(ls, &key);
|
yindex(ls, &key);
|
||||||
|
checklimit(fs, cc->nh, MAX_INT, "items in a constructor");
|
||||||
cc->nh++;
|
cc->nh++;
|
||||||
checknext(ls, '=');
|
checknext(ls, '=');
|
||||||
tab = *cc->t;
|
tab = *cc->t;
|
||||||
|
|||||||
@ -166,7 +166,7 @@ void luaE_checkcstack (lua_State *L) {
|
|||||||
if (getCcalls(L) == LUAI_MAXCCALLS)
|
if (getCcalls(L) == LUAI_MAXCCALLS)
|
||||||
luaG_runerror(L, "C stack overflow");
|
luaG_runerror(L, "C stack overflow");
|
||||||
else if (getCcalls(L) >= (LUAI_MAXCCALLS / 10 * 11))
|
else if (getCcalls(L) >= (LUAI_MAXCCALLS / 10 * 11))
|
||||||
luaD_throw(L, LUA_ERRERR); /* error while handling stack error */
|
luaD_errerr(L); /* error while handling stack error */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -272,7 +272,9 @@ static void close_state (lua_State *L) {
|
|||||||
luaC_freeallobjects(L); /* just collect its objects */
|
luaC_freeallobjects(L); /* just collect its objects */
|
||||||
else { /* closing a fully built state */
|
else { /* closing a fully built state */
|
||||||
L->ci = &L->base_ci; /* unwind CallInfo list */
|
L->ci = &L->base_ci; /* unwind CallInfo list */
|
||||||
|
L->errfunc = 0; /* stack unwind can "throw away" the error function */
|
||||||
luaD_closeprotected(L, 1, LUA_OK); /* close all upvalues */
|
luaD_closeprotected(L, 1, LUA_OK); /* close all upvalues */
|
||||||
|
L->top.p = L->stack.p + 1; /* empty the stack to run finalizers */
|
||||||
luaC_freeallobjects(L); /* collect all objects */
|
luaC_freeallobjects(L); /* collect all objects */
|
||||||
luai_userstateclose(L);
|
luai_userstateclose(L);
|
||||||
}
|
}
|
||||||
@ -328,6 +330,7 @@ int luaE_resetthread (lua_State *L, int status) {
|
|||||||
if (status == LUA_YIELD)
|
if (status == LUA_YIELD)
|
||||||
status = LUA_OK;
|
status = LUA_OK;
|
||||||
L->status = LUA_OK; /* so it can run __close metamethods */
|
L->status = LUA_OK; /* so it can run __close metamethods */
|
||||||
|
L->errfunc = 0; /* stack unwind can "throw away" the error function */
|
||||||
status = luaD_closeprotected(L, 1, status);
|
status = luaD_closeprotected(L, 1, status);
|
||||||
if (status != LUA_OK) /* errors? */
|
if (status != LUA_OK) /* errors? */
|
||||||
luaD_seterrorobj(L, status, L->stack.p + 1);
|
luaD_seterrorobj(L, status, L->stack.p + 1);
|
||||||
|
|||||||
@ -18,14 +18,14 @@
|
|||||||
|
|
||||||
#define LUA_VERSION_MAJOR "5"
|
#define LUA_VERSION_MAJOR "5"
|
||||||
#define LUA_VERSION_MINOR "4"
|
#define LUA_VERSION_MINOR "4"
|
||||||
#define LUA_VERSION_RELEASE "7"
|
#define LUA_VERSION_RELEASE "8"
|
||||||
|
|
||||||
#define LUA_VERSION_NUM 504
|
#define LUA_VERSION_NUM 504
|
||||||
#define LUA_VERSION_RELEASE_NUM (LUA_VERSION_NUM * 100 + 7)
|
#define LUA_VERSION_RELEASE_NUM (LUA_VERSION_NUM * 100 + 8)
|
||||||
|
|
||||||
#define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
|
#define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
|
||||||
#define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE
|
#define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE
|
||||||
#define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2024 Lua.org, PUC-Rio"
|
#define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2025 Lua.org, PUC-Rio"
|
||||||
#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes"
|
#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes"
|
||||||
|
|
||||||
|
|
||||||
@ -497,7 +497,7 @@ struct lua_Debug {
|
|||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Copyright (C) 1994-2024 Lua.org, PUC-Rio.
|
* Copyright (C) 1994-2025 Lua.org, PUC-Rio.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining
|
* Permission is hereby granted, free of charge, to any person obtaining
|
||||||
* a copy of this software and associated documentation files (the
|
* a copy of this software and associated documentation files (the
|
||||||
|
|||||||
@ -339,7 +339,10 @@ void luaV_finishset (lua_State *L, const TValue *t, TValue *key,
|
|||||||
lua_assert(isempty(slot)); /* slot must be empty */
|
lua_assert(isempty(slot)); /* slot must be empty */
|
||||||
tm = fasttm(L, h->metatable, TM_NEWINDEX); /* get metamethod */
|
tm = fasttm(L, h->metatable, TM_NEWINDEX); /* get metamethod */
|
||||||
if (tm == NULL) { /* no metamethod? */
|
if (tm == NULL) { /* no metamethod? */
|
||||||
|
sethvalue2s(L, L->top.p, h); /* anchor 't' */
|
||||||
|
L->top.p++; /* assume EXTRA_STACK */
|
||||||
luaH_finishset(L, h, key, slot, val); /* set new value */
|
luaH_finishset(L, h, key, slot, val); /* set new value */
|
||||||
|
L->top.p--;
|
||||||
invalidateTMcache(h);
|
invalidateTMcache(h);
|
||||||
luaC_barrierback(L, obj2gco(h), val);
|
luaC_barrierback(L, obj2gco(h), val);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# GodMode9 Lua documentation
|
# GodMode9 Lua documentation
|
||||||
|
|
||||||
GodMode9 includes a Lua 5.4.7 implementation.
|
GodMode9 includes a Lua 5.4.8 implementation.
|
||||||
|
|
||||||
## Running scripts
|
## Running scripts
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user