summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author“pengxuanzheng” <[email protected]>2022-07-12 03:53:54 +0000
committer“pengxuanzheng” <[email protected]>2022-07-12 07:28:14 +0000
commit28dbcbc61eac1ae46a6d4ddf3133252b4bb66a10 (patch)
tree0a15475714f00296f9d2835f1fed60d53c7cd148
parentd232643ada60cb3c2ec495c0009460470c14ed8c (diff)
✨ feat(TSG-11123): 增加获取,error code函数,修改lua_set_script_context函数为lua_script_context_malloc函数
-rw-r--r--gtest/gtest_tsg_lua_exec_with_context.cpp48
-rw-r--r--src/tsg_lua_func.cpp74
-rw-r--r--src/tsg_lua_interface.h25
3 files changed, 90 insertions, 57 deletions
diff --git a/gtest/gtest_tsg_lua_exec_with_context.cpp b/gtest/gtest_tsg_lua_exec_with_context.cpp
index 095bc25..447f460 100644
--- a/gtest/gtest_tsg_lua_exec_with_context.cpp
+++ b/gtest/gtest_tsg_lua_exec_with_context.cpp
@@ -26,7 +26,7 @@ int get_userdata(tsg_lua_handle L)
return 1;
}
-TEST(lua_exec_file_with_context, normal)
+TEST(lua_exec_file, normal)
{
tsg_lua_handle L = tsg_lua_vm_create_with_name("TEST");
@@ -42,8 +42,8 @@ TEST(lua_exec_file_with_context, normal)
lua_register_function(L, "get", "get_userdata", get_userdata);
lua_script_context context = NULL;
- lua_set_script_context(L, &context);
- int ret = lua_exec_file_with_context(L, script, in, (void *)ud, context, &out);
+ context = lua_script_context_malloc(L);
+ int ret = lua_exec_file(L, script, in, (void *)ud, context, &out);
const char *str = "userdata:hello world., context.count:1, context.message:This is first called";
EXPECT_EQ(0, ret);
EXPECT_EQ(strlen(str), out.len);
@@ -52,7 +52,7 @@ TEST(lua_exec_file_with_context, normal)
bzero(out.str, 1024);
ud = "hello lua.";
- ret = lua_exec_file_with_context(L, script, in, (void *)ud, context, &out);
+ ret = lua_exec_file(L, script, in, (void *)ud, context, &out);
str = "userdata:hello lua., context.count:2, context.message:This is not first called";
EXPECT_EQ(0, ret);
EXPECT_EQ(strlen(str), out.len);
@@ -61,8 +61,8 @@ TEST(lua_exec_file_with_context, normal)
bzero(out.str, 1024);
lua_script_context context2 = NULL;
- lua_set_script_context(L, &context2);
- ret = lua_exec_file_with_context(L, script, in, (void *)ud, context2, &out);
+ context2 = lua_script_context_malloc(L);
+ ret = lua_exec_file(L, script, in, (void *)ud, context2, &out);
str = "userdata:hello lua., context.count:1, context.message:This is first called";
EXPECT_EQ(0, ret);
EXPECT_EQ(strlen(str), out.len);
@@ -70,13 +70,13 @@ TEST(lua_exec_file_with_context, normal)
EXPECT_STREQ(str, out.str);
bzero(out.str, 1024);
- lua_unset_script_context(L, context);
- lua_unset_script_context(L, context2);
+ lua_script_context_free(L, context);
+ lua_script_context_free(L, context2);
tsg_destory_lua(L);
free(out.str);
}
-TEST(lua_exec_with_context, normal)
+TEST(lua_exec, normal)
{
tsg_lua_handle L = tsg_lua_vm_create_with_name("TEST");
@@ -94,8 +94,8 @@ TEST(lua_exec_with_context, normal)
lua_register_function(L, "get", "get_userdata", get_userdata);
lua_script_context context = NULL;
- lua_set_script_context(L, &context);
- int ret = lua_exec_with_context(L, script, in, (void *)ud, context, &out);
+ context = lua_script_context_malloc(L);
+ int ret = lua_exec(L, script, in, (void *)ud, context, &out);
const char *str = "userdata:hello world., context.count:1, context.message:This is first called";
EXPECT_EQ(0, ret);
EXPECT_EQ(strlen(str), out.len);
@@ -104,7 +104,7 @@ TEST(lua_exec_with_context, normal)
bzero(out.str, 1024);
ud = "hello lua.";
- ret = lua_exec_with_context(L, script, in, (void *)ud, context, &out);
+ ret = lua_exec(L, script, in, (void *)ud, context, &out);
str = "userdata:hello lua., context.count:2, context.message:This is not first called";
EXPECT_EQ(0, ret);
EXPECT_EQ(strlen(str), out.len);
@@ -113,8 +113,8 @@ TEST(lua_exec_with_context, normal)
bzero(out.str, 1024);
lua_script_context context2 = NULL;
- lua_set_script_context(L, &context2);
- ret = lua_exec_with_context(L, script, in, (void *)ud, context2, &out);
+ context2 = lua_script_context_malloc(L);
+ ret = lua_exec(L, script, in, (void *)ud, context2, &out);
str = "userdata:hello lua., context.count:1, context.message:This is first called";
EXPECT_EQ(0, ret);
EXPECT_EQ(strlen(str), out.len);
@@ -122,13 +122,13 @@ TEST(lua_exec_with_context, normal)
EXPECT_STREQ(str, out.str);
bzero(out.str, 1024);
- lua_unset_script_context(L, context);
- lua_unset_script_context(L, context2);
+ lua_script_context_free(L, context);
+ lua_script_context_free(L, context2);
tsg_destory_lua(L);
free(out.str);
}
-TEST(lua_cache_exec_with_context, normal)
+TEST(lua_cache_exec, normal)
{
tsg_lua_handle L = tsg_lua_vm_create_with_name("TEST");
@@ -145,8 +145,8 @@ TEST(lua_cache_exec_with_context, normal)
lua_register_function(L, "get", "get_userdata", get_userdata);
lua_script_context context = NULL;
- lua_set_script_context(L, &context);
- int ret = lua_cache_exec_with_context(L, script_id, in, (void *)ud, context, &out);
+ context = lua_script_context_malloc(L);
+ int ret = lua_cache_exec(L, script_id, in, (void *)ud, context, &out);
const char *str = "userdata:hello world., context.count:1, context.message:This is first called";
EXPECT_EQ(0, ret);
EXPECT_EQ(strlen(str), out.len);
@@ -155,7 +155,7 @@ TEST(lua_cache_exec_with_context, normal)
bzero(out.str, 1024);
ud = "hello lua.";
- ret = lua_cache_exec_with_context(L, script_id, in, (void *)ud, context, &out);
+ ret = lua_cache_exec(L, script_id, in, (void *)ud, context, &out);
str = "userdata:hello lua., context.count:2, context.message:This is not first called";
EXPECT_EQ(0, ret);
EXPECT_EQ(strlen(str), out.len);
@@ -164,8 +164,8 @@ TEST(lua_cache_exec_with_context, normal)
bzero(out.str, 1024);
lua_script_context context2 = NULL;
- lua_set_script_context(L, &context2);
- ret = lua_cache_exec_with_context(L, script_id, in, (void *)ud, context2, &out);
+ context2 = lua_script_context_malloc(L);
+ ret = lua_cache_exec(L, script_id, in, (void *)ud, context2, &out);
str = "userdata:hello lua., context.count:1, context.message:This is first called";
EXPECT_EQ(0, ret);
EXPECT_EQ(strlen(str), out.len);
@@ -173,8 +173,8 @@ TEST(lua_cache_exec_with_context, normal)
EXPECT_STREQ(str, out.str);
bzero(out.str, 1024);
- lua_unset_script_context(L, context);
- lua_unset_script_context(L, context2);
+ lua_script_context_free(L, context);
+ lua_script_context_free(L, context2);
tsg_destory_lua(L);
free(out.str);
}
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