From 53cc8414a2227eb9ca1d2e840a90d3d52e671e52 Mon Sep 17 00:00:00 2001 From: xiota Date: Sun, 5 Mar 2023 13:58:13 -0800 Subject: [PATCH] GeanyLua: Add support for Lua 5.2+ --- geanylua/glspi_app.c | 2 +- geanylua/glspi_dlg.c | 4 ++-- geanylua/glspi_doc.c | 2 +- geanylua/glspi_init.c | 2 +- geanylua/glspi_kfile.c | 6 ++++-- geanylua/glspi_run.c | 28 +++++++++++++--------------- geanylua/glspi_sci.c | 4 ++-- geanylua/gsdlg_lua.c | 8 +++++--- 8 files changed, 29 insertions(+), 27 deletions(-) diff --git a/geanylua/glspi_app.c b/geanylua/glspi_app.c index 5cc409efc..988df945a 100644 --- a/geanylua/glspi_app.c +++ b/geanylua/glspi_app.c @@ -549,5 +549,5 @@ static const struct luaL_Reg glspi_app_funcs[] = { void glspi_init_app_funcs(lua_State *L, const gchar*script_dir) { glspi_script_dir = script_dir; - luaL_register(L, NULL,glspi_app_funcs); + luaL_setfuncs(L, glspi_app_funcs, 0); } diff --git a/geanylua/glspi_dlg.c b/geanylua/glspi_dlg.c index 2c5395746..4e546cbe4 100644 --- a/geanylua/glspi_dlg.c +++ b/geanylua/glspi_dlg.c @@ -128,7 +128,7 @@ static gint glspi_choose(lua_State* L) arg1=lua_tostring(L, 1); } - n=lua_objlen(L,2); + n=lua_rawlen(L,2); for (i=1;i<=n; i++) { lua_rawgeti(L,2,i); if (!lua_isstring(L, -1)) { @@ -554,5 +554,5 @@ static const struct luaL_Reg glspi_dlg_funcs[] = { void glspi_init_dlg_funcs(lua_State *L, GsDlgRunHook hook) { glspi_pause_timer = hook; - luaL_register(L, NULL,glspi_dlg_funcs); + luaL_setfuncs(L, glspi_dlg_funcs, 0); } diff --git a/geanylua/glspi_doc.c b/geanylua/glspi_doc.c index cc1e4fe77..e65d5897e 100644 --- a/geanylua/glspi_doc.c +++ b/geanylua/glspi_doc.c @@ -374,5 +374,5 @@ static const struct luaL_Reg glspi_doc_funcs[] = { }; void glspi_init_doc_funcs(lua_State *L) { - luaL_register(L, NULL,glspi_doc_funcs); + luaL_setfuncs(L, glspi_doc_funcs, 0); } diff --git a/geanylua/glspi_init.c b/geanylua/glspi_init.c index b0f95c7e8..3bc5bb1c7 100644 --- a/geanylua/glspi_init.c +++ b/geanylua/glspi_init.c @@ -546,5 +546,5 @@ static const struct luaL_Reg glspi_mnu_funcs[] = { void glspi_init_mnu_funcs(lua_State *L) { - luaL_register(L, NULL,glspi_mnu_funcs); + luaL_setfuncs(L, glspi_mnu_funcs, 0); } diff --git a/geanylua/glspi_kfile.c b/geanylua/glspi_kfile.c index dead8c1fc..ca469cd8c 100644 --- a/geanylua/glspi_kfile.c +++ b/geanylua/glspi_kfile.c @@ -395,8 +395,10 @@ static gint luaopen_keyfile(lua_State *L) lua_pushstring(L,"__gc"); lua_pushcfunction(L,kfile_done); lua_rawset(L,-3); - luaL_register(L, NULL, &kfile_funcs[1]); - luaL_register(L, LUA_MODULE_NAME, kfile_funcs); + luaL_setfuncs(L, &kfile_funcs[1], 0); + lua_newtable(L); + luaL_setfuncs(L, kfile_funcs, 0); + lua_setglobal(L, LUA_MODULE_NAME); return 0; } diff --git a/geanylua/glspi_run.c b/geanylua/glspi_run.c index 17155a441..e034ede1d 100644 --- a/geanylua/glspi_run.c +++ b/geanylua/glspi_run.c @@ -293,21 +293,17 @@ static const struct luaL_Reg glspi_timer_funcs[] = { /* Catch and report script errors */ static gint glspi_traceback(lua_State *L) { - lua_getfield(L, LUA_GLOBALSINDEX, "debug"); - if (!lua_istable(L, -1)) { - lua_pop(L, 1); - return 1; - } - lua_getfield(L, -1, "traceback"); - if (!lua_isfunction(L, -1)) { - lua_pop(L, 2); - return 1; + const char *msg = lua_tostring(L, 1); + if (msg == NULL) { /* is error object not a string? */ + if (luaL_callmeta(L, 1, "__tostring") && /* does it have a metamethod */ + lua_type(L, -1) == LUA_TSTRING) /* that produces a string? */ + return 1; /* that is the message */ + else + msg = lua_pushfstring(L, "(error object is a %s value)", + luaL_typename(L, 1)); } - lua_pushvalue(L, 1); - lua_pushinteger(L, 2); - lua_call(L, 2, 1); - - return 1; + luaL_traceback(L, L, msg, 1); /* append a standard traceback */ + return 1; /* return the traceback */ } /* @@ -393,12 +389,14 @@ static void show_error(lua_State *L, const gchar *script_file) static gint glspi_init_module(lua_State *L, const gchar *script_file, gint caller, GKeyFile*proj, const gchar*script_dir) { - luaL_register(L, LUA_MODULE_NAME, glspi_timer_funcs); + lua_newtable(L); + luaL_setfuncs(L, glspi_timer_funcs, 0); glspi_init_sci_funcs(L); glspi_init_doc_funcs(L); glspi_init_mnu_funcs(L); glspi_init_dlg_funcs(L, glspi_pause_timer); glspi_init_app_funcs(L,script_dir); + lua_setglobal(L, LUA_MODULE_NAME); set_string_token(L,tokenWordChars,GEANY_WORDCHARS); set_string_token(L,tokenBanner,DEFAULT_BANNER); set_string_token(L,tokenDirSep, G_DIR_SEPARATOR_S); diff --git a/geanylua/glspi_sci.c b/geanylua/glspi_sci.c index f07fa3521..e95342606 100644 --- a/geanylua/glspi_sci.c +++ b/geanylua/glspi_sci.c @@ -905,7 +905,7 @@ static gint glspi_find(lua_State* L) ttf.chrg.cpMin=lua_tonumber(L,2); ttf.chrg.cpMax=lua_tonumber(L,3); - n=lua_objlen(L,4); + n=lua_rawlen(L,4); for (i=1;i<=n; i++) { lua_rawgeti(L,4,i); if (lua_isstring(L, -1)) { @@ -995,5 +995,5 @@ static const struct luaL_Reg glspi_sci_funcs[] = { }; void glspi_init_sci_funcs(lua_State *L) { - luaL_register(L, NULL,glspi_sci_funcs); + luaL_setfuncs(L, glspi_sci_funcs, 0); } diff --git a/geanylua/gsdlg_lua.c b/geanylua/gsdlg_lua.c index eca163dcb..34df24365 100644 --- a/geanylua/gsdlg_lua.c +++ b/geanylua/gsdlg_lua.c @@ -323,7 +323,7 @@ static gint gsdl_new(lua_State *L) { if (argc>=2) { if (!lua_istable(L,2)) { return FAIL_TABLE_ARG(2); } } - n=lua_objlen(L,2); + n=lua_rawlen(L,2); for (i=1;i<=n; i++) { lua_rawgeti(L,2,i); if (!lua_isstring(L, -1)) { @@ -425,8 +425,10 @@ gint luaopen_dialog(lua_State *L) lua_pushcfunction(L,gsdl_done); lua_rawset(L,-3); - luaL_register(L, NULL, &gsdl_funcs[1]); - luaL_register(L, LUA_MODULE_NAME, gsdl_funcs); + luaL_setfuncs(L, &gsdl_funcs[1], 0); + lua_newtable(L); + luaL_setfuncs(L, gsdl_funcs, 0); + lua_setglobal(L, LUA_MODULE_NAME); return 0; }