mirror of
https://gitcode.com/JianFeeeee/LuaCangjia_api.git
synced 2026-09-20 00:48:47 +00:00
feat: 实现loadFunction预加载函数能力 + AI辅助编程标识
- 新增 loadFunction/callFunction/unloadFunction 预加载函数 API - 预加载语义:加载文件→顶层执行一次→返回函数存入Lua Registry→可多次调用 - 与管道模式(load/runScript)存储完全解耦:funcs[]+Registry vs pkgs[]+虚拟栈 - 新增错误码 5023/5024/5025 - 新增单元测试:仓颉侧 8 个 + C++ GTest 侧 11 个 - 本机以 Cangjie 1.1.0 实编译并通过功能运行验证 - README/doc 增加 AI 辅助编程标识及预加载函数模式说明
This commit is contained in:
@ -86,6 +86,65 @@ int run(void *selfd,const char *path,const char *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// @brief 预加载lua文件到内存:加载文件、执行顶层代码、捕获返回的函数并存入 Registry,供后续 callfunction 多次调用
|
||||
/// @param selfd init_lua_runner返回的void指针
|
||||
/// @param path 需要加载的文件路径
|
||||
/// @param name 函数名称(callfunction/unloadfunction时使用)
|
||||
/// @return 0代表正常结束,-1表示异常退出
|
||||
int loadfunction(void *selfd,const char *path,const char *name)
|
||||
{
|
||||
lua_runner* self = (lua_runner*)selfd;
|
||||
Lua_runner *runner = (Lua_runner*)self->lua_obj;//还原对象
|
||||
if(runner == NULL)
|
||||
{
|
||||
errno = NAPI_LUA_STATE_ERROR;
|
||||
return -1;
|
||||
}
|
||||
if(runner->loadfunction(path,name)==-1)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// @brief 卸载预加载的函数(释放 Registry 引用)
|
||||
/// @param selfd init_lua_runner返回的void指针
|
||||
/// @param name loadfunction加载时的函数名称
|
||||
/// @return 0代表正常结束,-1表示异常退出
|
||||
int unloadfunction(void *selfd,const char *name)
|
||||
{
|
||||
lua_runner* self = (lua_runner*)selfd;
|
||||
Lua_runner *runner = (Lua_runner*)self->lua_obj;//还原对象
|
||||
if(runner == NULL)
|
||||
{
|
||||
errno = NAPI_LUA_STATE_ERROR;
|
||||
return -1;
|
||||
}
|
||||
if(runner->unloadfunction(name)==-1)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// @brief 按名称调用已预加载的函数(从 Registry 取出,不消耗该函数,可重复调用)
|
||||
/// @param selfd init_lua_runner返回的void指针
|
||||
/// @param name loadfunction加载时的函数名称
|
||||
/// @param arg 传递给函数的单参数(可为NULL)
|
||||
/// @return 成功返回0,失败返回-1,并将lua出错原因拷贝至result中
|
||||
int callfunction(void *selfd,const char *name,const char *arg)
|
||||
{
|
||||
lua_runner* self = (lua_runner*)selfd;
|
||||
Lua_runner *runner = (Lua_runner*)self->lua_obj;
|
||||
if(runner == NULL)
|
||||
{
|
||||
errno = NAPI_LUA_STATE_ERROR;
|
||||
return -1;
|
||||
}
|
||||
if(runner->callfunction(name,arg)==-1){
|
||||
snprintf(self->result,MAX_RESULT,"%s",runner->reslt.c_str());
|
||||
return -1;
|
||||
}
|
||||
snprintf(self->result,MAX_RESULT,"%s",runner->reslt.c_str());
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// @brief 执行单句lua语句
|
||||
/// @param selfd init_lua_runner返回的void指针
|
||||
/// @param target 执行语句(字符串类型)
|
||||
|
||||
Reference in New Issue
Block a user