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

View File

@ -2,6 +2,11 @@
#include <cstring>
#include <functional>
/* Lua 5.1 兼容:无 LUA_OK 宏,成功返回值为 0 */
#ifndef LUA_OK
#define LUA_OK 0
#endif
extern "C"
{
#include <errno.h>
@ -329,7 +334,8 @@ void Lua_runner::capture_result()
break;
case LUA_TNUMBER:
{
// lua_isinteger 区分整型和浮点型
#if LUA_VERSION_NUM >= 503
// lua_isinteger 区分整型和浮点型5.3+ 才有)
if (lua_isinteger(this->L, -1))
{
this->last_result_type = CJT_INT;
@ -338,7 +344,9 @@ void Lua_runner::capture_result()
this->last_result_bool = this->last_result_int != 0;
}
else
#endif
{
// 5.2 及以下无 integer 子类型,所有数字按 number 处理
this->last_result_type = CJT_NUM;
this->last_result_num = lua_tonumber(this->L, -1);
this->last_result_int = (long long)this->last_result_num;