diff options
| author | “pengxuanzheng” <[email protected]> | 2022-07-12 03:53:54 +0000 |
|---|---|---|
| committer | “pengxuanzheng” <[email protected]> | 2022-07-12 07:28:14 +0000 |
| commit | 28dbcbc61eac1ae46a6d4ddf3133252b4bb66a10 (patch) | |
| tree | 0a15475714f00296f9d2835f1fed60d53c7cd148 /src | |
| parent | d232643ada60cb3c2ec495c0009460470c14ed8c (diff) | |
✨ feat(TSG-11123): 增加获取,error code函数,修改lua_set_script_context函数为lua_script_context_malloc函数
Diffstat (limited to 'src')
| -rw-r--r-- | src/tsg_lua_func.cpp | 74 | ||||
| -rw-r--r-- | src/tsg_lua_interface.h | 25 |
2 files changed, 66 insertions, 33 deletions
diff --git a/src/tsg_lua_func.cpp b/src/tsg_lua_func.cpp index b19ec01..3eea13a 100644 --- a/src/tsg_lua_func.cpp +++ b/src/tsg_lua_func.cpp @@ -114,6 +114,7 @@ struct lua_private_info_t jmp_buf *lua_exception; char lua_name[1024]; void *userdata; + int errcode; }; //static jmp_buf lua_exception[TSG_MAX_LUA_ID]; @@ -488,7 +489,7 @@ tsg_lua_handle tsg_lua_vm_create_with_name(const char *name) return NULL; } - struct lua_private_info_t *lua_info = (struct lua_private_info_t *)malloc(sizeof(struct lua_private_info_t)); + struct lua_private_info_t *lua_info = (struct lua_private_info_t *)calloc(1, sizeof(struct lua_private_info_t)); if (lua_info == NULL) { free(lua_exception); @@ -507,6 +508,7 @@ tsg_lua_handle tsg_lua_vm_create_with_name(const char *name) memcpy(lua_info->lua_name, name, MIN(1023, len)); lua_info->lua_name[len] = '\0'; lua_info->userdata = NULL; + lua_info->errcode = 0; lua_setexdata(L, lua_info); lua_atpanic(L, c_lua_atpanic); luaL_openlibs(L); @@ -1589,7 +1591,7 @@ void *lua_get_userdata(tsg_lua_handle L) int lua_register_function(tsg_lua_handle L, const char *function_set, const char *function_name, lua_function_ptr const function) { - if (L == NULL || function_set == NULL || function_name == NULL || function == NULL) + if (L == NULL || function_name == NULL || function == NULL) { return ERR_PARAMETER; } @@ -1600,15 +1602,23 @@ int lua_register_function(tsg_lua_handle L, const char *function_set, const char } lua_getglobal(L, lua_info->lua_name); - lua_getfield(L, -1, function_set); - int ret = lua_type(L, -1); - if (ret != LUA_TTABLE) + if (function_set != NULL) { - lua_pop(L, 1); - lua_newtable(L); - lua_pushcfunction(L, function); - lua_setfield(L, -2, function_name); - lua_setfield(L, -2, function_set); + lua_getfield(L, -1, function_set); + int ret = lua_type(L, -1); + if (ret != LUA_TTABLE) + { + lua_pop(L, 1); + lua_newtable(L); + lua_pushcfunction(L, function); + lua_setfield(L, -2, function_name); + lua_setfield(L, -2, function_set); + } + else + { + lua_pushcfunction(L, function); + lua_setfield(L, -2, function_name); + } } else { @@ -1625,29 +1635,35 @@ struct lua_script_context_t int context_id; }; -int lua_set_script_context(tsg_lua_handle L, struct lua_script_context_t **context) +struct lua_script_context_t *lua_script_context_malloc(tsg_lua_handle L) { - if (L == NULL || *context != NULL) + if (L == NULL) { - return ERR_PARAMETER; + return NULL; } + struct lua_private_info_t *lua_info = (struct lua_private_info_t *)lua_getexdata(L); + if (lua_info == NULL) + { + return NULL; + } lua_newtable(L); int context_id = luaL_ref(L, LUA_REGISTRYINDEX); if (context_id == LUA_REFNIL || context_id == LUA_NOREF) { - return ERR_LUA_SET_CONTEXT_FAILED; + lua_info->errcode = ERR_LUA_CACHE_FAILED; + return NULL; } lua_settop(L, 0); - *context = (struct lua_script_context_t *)malloc(sizeof(struct lua_script_context_t *)); - (*context)->context_id = context_id; + struct lua_script_context_t *context = (struct lua_script_context_t *)malloc(sizeof(struct lua_script_context_t)); + context->context_id = context_id; - return 0; + return context; } -int lua_unset_script_context(tsg_lua_handle L, struct lua_script_context_t *context) +int lua_script_context_free(tsg_lua_handle L, struct lua_script_context_t *context) { if (L == NULL) { @@ -1665,7 +1681,7 @@ int lua_unset_script_context(tsg_lua_handle L, struct lua_script_context_t *cont return 0; } -int lua_cache_exec_with_context(tsg_lua_handle L, size_t script_id, struct lua_data_t in, void *userdata, lua_script_context context, struct lua_arg_t *outvalue) +int lua_cache_exec(tsg_lua_handle L, size_t script_id, struct lua_data_t in, void *userdata, lua_script_context context, struct lua_arg_t *outvalue) { if (L == NULL) { @@ -1695,7 +1711,7 @@ int lua_cache_exec_with_context(tsg_lua_handle L, size_t script_id, struct lua_d return tsg_lua_cache_exec(L, script_id, in.data, in.len, outvalue->str, &outvalue->len, &outvalue->type); } -int lua_exec_with_context(tsg_lua_handle L, struct lua_data_t script, struct lua_data_t in, void *userdata, lua_script_context context, struct lua_arg_t *outvalue) +int lua_exec(tsg_lua_handle L, struct lua_data_t script, struct lua_data_t in, void *userdata, lua_script_context context, struct lua_arg_t *outvalue) { if (L == NULL) { @@ -1726,7 +1742,7 @@ int lua_exec_with_context(tsg_lua_handle L, struct lua_data_t script, struct lua return tsg_lua_exec(L, script.data, script.len, in.data, in.len, outvalue->str, &outvalue->len, &outvalue->type); } -int lua_exec_file_with_context(tsg_lua_handle L, const char *script, struct lua_data_t in, void *userdata, lua_script_context context, struct lua_arg_t *outvalue) +int lua_exec_file(tsg_lua_handle L, const char *script, struct lua_data_t in, void *userdata, lua_script_context context, struct lua_arg_t *outvalue) { if (L == NULL) { @@ -1755,4 +1771,20 @@ int lua_exec_file_with_context(tsg_lua_handle L, const char *script, struct lua_ } return tsg_lua_exec_file(L, script, in.data, in.len, outvalue->str, &outvalue->len, &outvalue->type); +} + +int lua_get_error_code(tsg_lua_handle L) +{ + if (L == NULL) + { + return ERR_LUAVM_ISNULL; + } + + struct lua_private_info_t *lua_info = (struct lua_private_info_t *)lua_getexdata(L); + if (lua_info == NULL) + { + retunr ERR_LUA_PRIVATE_INFO_IS_NIL; + } + + return lua_info->errcode; }
\ No newline at end of file diff --git a/src/tsg_lua_interface.h b/src/tsg_lua_interface.h index 4f73d25..9369036 100644 --- a/src/tsg_lua_interface.h +++ b/src/tsg_lua_interface.h @@ -191,19 +191,18 @@ int lua_register_function(tsg_lua_handle L, const char *function_set, const char struct lua_script_context_t; typedef lua_script_context_t * lua_script_context; -/* 函数名: lua_set_script_context +/* 函数名: lua_script_context_malloc * 输入参数: tsg_lua_handle L - * 输出参数: lua_script_context **context 成功时返回lua context - * 返回值: int 成功,返回0;失败返回 -1*/ -int lua_set_script_context(tsg_lua_handle L, lua_script_context *context); + * 返回值: lua_script_context 失败返回 NULL,并设置error code*/ +lua_script_context lua_script_context_malloc(tsg_lua_handle L); -/* 函数名: lua_unset_script_context +/* 函数名: lua_script_context_free * 输入参数: tsg_lua_handle L * 输出参数: lua_script_context *context_id 成功时回收lua context * 返回值: int 成功,返回0;失败返回 -1*/ -int lua_unset_script_context(tsg_lua_handle L, lua_script_context context); +int lua_script_context_free(tsg_lua_handle L, lua_script_context context); -/* 函数名: lua_cache_exec_with_context +/* 函数名: lua_cache_exec * 输入参数: tsg_lua_handle L size_t script_id 缓存的脚本id struct lua_data_t in 待处理的数据 @@ -211,9 +210,9 @@ int lua_unset_script_context(tsg_lua_handle L, lua_script_context context); struct lua_script_context *context lua上下文 * 输出参数: struct lua_arg_t *outvalue 脚本执行成功返回的内容 * 返回值: int 成功,返回0;失败返回 -1*/ -int lua_cache_exec_with_context(tsg_lua_handle L, size_t script_id, struct lua_data_t in, void *userdata, lua_script_context context, struct lua_arg_t *outvalue); +int lua_cache_exec(tsg_lua_handle L, size_t script_id, struct lua_data_t in, void *userdata, lua_script_context context, struct lua_arg_t *outvalue); -/* 函数名: lua_cache_exec_with_context +/* 函数名: lua_exec * 输入参数: tsg_lua_handle L struct lua_data_t script lua脚本(lua脚本内容) struct lua_data_t in 待处理的数据 @@ -221,9 +220,9 @@ int lua_cache_exec_with_context(tsg_lua_handle L, size_t script_id, struct lua_d struct lua_script_context *context lua上下文 * 输出参数: struct lua_arg_t *outvalue 脚本执行成功返回的内容 * 返回值: int 成功,返回0;失败返回 -1*/ -int lua_exec_with_context(tsg_lua_handle L, struct lua_data_t script, struct lua_data_t in, void *userdata, lua_script_context context, struct lua_arg_t *outvalue); +int lua_exec(tsg_lua_handle L, struct lua_data_t script, struct lua_data_t in, void *userdata, lua_script_context context, struct lua_arg_t *outvalue); -/* 函数名: lua_cache_exec_with_context +/* 函数名: lua_cache_exec * 输入参数: tsg_lua_handle L struct script lua脚本(lua脚本路径) struct lua_data_t in 待处理的数据 @@ -231,11 +230,13 @@ int lua_exec_with_context(tsg_lua_handle L, struct lua_data_t script, struct lua struct lua_script_context *context lua上下文文 * 输出参数: struct lua_arg_t *outvalue 脚本执行成功返回的内容 * 返回值: int 成功,返回0;失败返回 -1*/ -int lua_exec_file_with_context(tsg_lua_handle L, const char *script, struct lua_data_t in, void *userdata, lua_script_context context, struct lua_arg_t *outvalue); +int lua_exec_file(tsg_lua_handle L, const char *script, struct lua_data_t in, void *userdata, lua_script_context context, struct lua_arg_t *outvalue); /* 函数名:tsg_lua_vm_create_with_name * 返回值:tsg_lua_handle 成功,返回一个虚拟机, * 输入参数: char *name 虚拟机名称,可以在lua中找到该名字的全局变量,建议大写字母开头。如果为空,默认填写"TSG" * 失败,返回NULL */ tsg_lua_handle tsg_lua_vm_create_with_name(const char *name); + +int lua_get_error_code(tsg_lua_handle L); #endif |
