feat: 适配 Lua 5.1.5 (lua_5.1.5 分支)

- lib/lua 替换为 Lua 5.1.5 官方源码; CMakeLists 删除 5.1 不存在的
  lcorolib.c/lctype.c/lutf8lib.c/lbitlib.c
- 补充 lua.hpp C++ 包装头(5.1 官方不提供, 保持桥接 include 路径不变)
- LUA_OK 兼容宏: 5.1 无此定义(成功返回值为 0)
- luaL_tolstring 兼容: 5.1 无此 API, l_print 改用 lua_tostring +
  lua_typename 兜底(#if LUA_VERSION_NUM >= 502 条件编译, 弹栈逻辑同步分支)
- luaL_setfuncs 兼容: 5.1 无此 API, push_tty_file 改手动循环注册
- I/O 重定向沿用 Registry 方案(自 5.2.4 分支同步), typed interop
  版本自适应断言同步
- 验证: GTest 44/44 通过
This commit is contained in:
JianFeeeee
2026-08-25 11:13:41 +08:00
parent 4af121c1f3
commit c23f8c5e32
70 changed files with 9553 additions and 22456 deletions

45
lib/lua/linit.c Executable file → Normal file
View File

@ -1,6 +1,6 @@
/*
** $Id: linit.c $
** Initialization of libraries for lua.c and other clients
** $Id: linit.c,v 1.14.1.1 2007/12/27 13:02:25 roberto Exp $
** Initialization of libraries for lua.c
** See Copyright Notice in lua.h
*/
@ -8,58 +8,31 @@
#define linit_c
#define LUA_LIB
/*
** If you embed Lua in your program and need to open the standard
** libraries, call luaL_openlibs in your program. If you need a
** different set of libraries, copy this file to your project and edit
** it to suit your needs.
**
** You can also *preload* libraries, so that a later 'require' can
** open the library, which is already linked to the application.
** For that, do the following code:
**
** luaL_getsubtable(L, LUA_REGISTRYINDEX, LUA_PRELOAD_TABLE);
** lua_pushcfunction(L, luaopen_modname);
** lua_setfield(L, -2, modname);
** lua_pop(L, 1); // remove PRELOAD table
*/
#include "lprefix.h"
#include <stddef.h>
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
/*
** these libs are loaded by lua.c and are readily available to any Lua
** program
*/
static const luaL_Reg loadedlibs[] = {
{LUA_GNAME, luaopen_base},
static const luaL_Reg lualibs[] = {
{"", luaopen_base},
{LUA_LOADLIBNAME, luaopen_package},
{LUA_COLIBNAME, luaopen_coroutine},
{LUA_TABLIBNAME, luaopen_table},
{LUA_IOLIBNAME, luaopen_io},
{LUA_OSLIBNAME, luaopen_os},
{LUA_STRLIBNAME, luaopen_string},
{LUA_MATHLIBNAME, luaopen_math},
{LUA_UTF8LIBNAME, luaopen_utf8},
{LUA_DBLIBNAME, luaopen_debug},
{NULL, NULL}
};
LUALIB_API void luaL_openlibs (lua_State *L) {
const luaL_Reg *lib;
/* "require" functions from 'loadedlibs' and set results to global table */
for (lib = loadedlibs; lib->func; lib++) {
luaL_requiref(L, lib->name, lib->func, 1);
lua_pop(L, 1); /* remove lib */
const luaL_Reg *lib = lualibs;
for (; lib->func; lib++) {
lua_pushcfunction(L, lib->func);
lua_pushstring(L, lib->name);
lua_call(L, 1, 0);
}
}