فهرست منبع

obs-scripting: Replace macro with plain C code

Instead of using a non-debuggable macro function, keep function
references and desired function names in a static array that can then
be iterated over to add desired functions.

This allows for proper debugging as well as makes the combination of
function and function name more explicit.
PatTheMav 2 سال پیش
والد
کامیت
69a0cd2910
1فایلهای تغییر یافته به همراه48 افزوده شده و 27 حذف شده
  1. 48 27
      deps/obs-scripting/obs-scripting-lua-frontend.c

+ 48 - 27
deps/obs-scripting/obs-scripting-lua-frontend.c

@@ -297,37 +297,58 @@ static int add_save_callback(lua_State *script)
 
 /* ----------------------------------- */
 
+typedef struct lua_function_tuple {
+	const char *name;
+	lua_CFunction function;
+} obs_frontend_func;
+
+static const obs_frontend_func functions[] = {
+	{.name = "obs_frontend_get_scene_names", .function = get_scene_names},
+	{.name = "obs_frontend_get_scenes", .function = get_scenes},
+	{.name = "obs_frontend_get_current_scene",
+	 .function = get_current_scene},
+	{.name = "obs_frontend_set_current_scene",
+	 .function = set_current_scene},
+	{.name = "obs_frontend_get_transitions", .function = get_transitions},
+	{.name = "obs_frontend_get_current_transition",
+	 .function = get_current_transition},
+	{.name = "obs_frontend_set_current_transition",
+	 .function = set_current_transition},
+	{.name = "obs_frontend_get_transition_duration",
+	 .function = get_transition_duration},
+	{.name = "obs_frontend_set_transition_duration",
+	 .function = set_transition_duration},
+	{.name = "obs_frontend_get_scene_collections",
+	 .function = get_scene_collections},
+	{.name = "obs_frontend_get_current_scene_collection",
+	 .function = get_current_scene_collection},
+	{.name = "obs_frontend_set_current_scene_collection",
+	 .function = set_current_scene_collection},
+	{.name = "obs_frontend_get_profiles", .function = get_profiles},
+	{.name = "obs_frontend_get_current_profile",
+	 .function = get_current_profile},
+	{.name = "obs_frontend_set_current_profile",
+	 .function = set_current_profile},
+	{.name = "obs_frontend_remove_event_callback",
+	 .function = remove_event_callback},
+	{.name = "obs_frontend_add_event_callback",
+	 .function = add_event_callback},
+	{.name = "obs_frontend_remove_save_callback",
+	 .function = remove_save_callback},
+	{.name = "obs_frontend_add_save_callback",
+	 .function = add_save_callback},
+};
+
 void add_lua_frontend_funcs(lua_State *script)
 {
 	lua_getglobal(script, "obslua");
 
-#define add_func(name)                                         \
-	do {                                                   \
-		lua_pushstring(script, "obs_frontend_" #name); \
-		lua_pushcfunction(script, name);               \
-		lua_rawset(script, -3);                        \
-	} while (false)
-
-	add_func(get_scene_names);
-	add_func(get_scenes);
-	add_func(get_current_scene);
-	add_func(set_current_scene);
-	add_func(get_transitions);
-	add_func(get_current_transition);
-	add_func(set_current_transition);
-	add_func(get_transition_duration);
-	add_func(set_transition_duration);
-	add_func(get_scene_collections);
-	add_func(get_current_scene_collection);
-	add_func(set_current_scene_collection);
-	add_func(get_profiles);
-	add_func(get_current_profile);
-	add_func(set_current_profile);
-	add_func(remove_event_callback);
-	add_func(add_event_callback);
-	add_func(remove_save_callback);
-	add_func(add_save_callback);
-#undef add_func
+	size_t num_items = OBS_COUNTOF(functions);
 
+	for (size_t i = 0; i < num_items; i++) {
+		lua_pushstring(script, functions[i].name);
+		lua_pushcfunction(script, functions[i].function);
+		lua_rawset(script, -3);
+	}
 	lua_pop(script, 1);
 }