[FarGroup/FarManager] master: LuaFAR: refactoring (805453730)

0 views
Skip to first unread message

farg...@farmanager.com

unread,
Oct 26, 2025, 10:45:49 AM (4 days ago) Oct 26
to farco...@googlegroups.com
Repository : https://github.com/FarGroup/FarManager
On branch : master
Link : https://github.com/FarGroup/FarManager/commit/8054537308a36555d0dc9c554d09ca4c020cdcf5

>---------------------------------------------------------------

commit 8054537308a36555d0dc9c554d09ca4c020cdcf5
Author: Shmuel Zeigerman <solo...@gmail.com>
Date: Sun Oct 26 16:43:07 2025 +0200

LuaFAR: refactoring


>---------------------------------------------------------------

8054537308a36555d0dc9c554d09ca4c020cdcf5
plugins/luamacro/_globalinfo.lua | 2 +-
plugins/luamacro/changelog | 4 ++++
plugins/luamacro/luafar/lf_exported.c | 34 +++++++++++++++-------------------
plugins/luamacro/luafar/lf_luamacro.c | 7 +++----
plugins/luamacro/luafar/lf_service.c | 3 +--
plugins/luamacro/luafar/lf_service.h | 2 +-
plugins/luamacro/luafar/lf_util.c | 5 +++++
plugins/luamacro/luafar/lf_util.h | 1 +
plugins/luamacro/luafar/lf_version.h | 2 +-
plugins/luamacro/luafar/lf_win.c | 2 +-
plugins/luamacro/macrotest.lua | 27 ++++++++++++---------------
11 files changed, 45 insertions(+), 44 deletions(-)

diff --git a/plugins/luamacro/_globalinfo.lua b/plugins/luamacro/_globalinfo.lua
index f505ffafc..674f95cb8 100644
--- a/plugins/luamacro/_globalinfo.lua
+++ b/plugins/luamacro/_globalinfo.lua
@@ -1,6 +1,6 @@
function export.GetGlobalInfo()
return {
- Version = { 3, 0, 0, 898 },
+ Version = { 3, 0, 0, 899 },
MinFarVersion = { 3, 0, 0, 6564 },
Guid = win.Uuid("4EBBEFC8-2084-4B7F-94C0-692CE136894D"),
Title = "LuaMacro",
diff --git a/plugins/luamacro/changelog b/plugins/luamacro/changelog
index 5b7842727..b836ea65b 100644
--- a/plugins/luamacro/changelog
+++ b/plugins/luamacro/changelog
@@ -1,3 +1,7 @@
+shmuel 2025-10-26 16:31:48+02:00 - build 899
+
+1. LuaFAR: refactoring.
+
shmuel 2025-10-25 17:10:58+03:00 - build 898

1. LuaFAR: Add more stack operations to Macro-API engine.
diff --git a/plugins/luamacro/luafar/lf_exported.c b/plugins/luamacro/luafar/lf_exported.c
index 289d60c5e..3c31f2ae2 100644
--- a/plugins/luamacro/luafar/lf_exported.c
+++ b/plugins/luamacro/luafar/lf_exported.c
@@ -791,7 +791,7 @@ void PushFarMacroValue(lua_State* L, const struct FarMacroValue* val)
break;

case FMVT_BINARY:
- lua_createtable(L,1,0);
+ lua_createtable(L,0,1);
lua_pushlstring(L, (char*)val->Value.Binary.Data, val->Value.Binary.Size);
lua_setfield(L, -2, TKEY_BINARY);
break;
@@ -810,9 +810,8 @@ void PushFarMacroValue(lua_State* L, const struct FarMacroValue* val)

void PackMacroValues(lua_State* L, size_t Count, const struct FarMacroValue* Values)
{
- size_t i;
lua_createtable(L, (int)Count, 1);
- for(i=0; i < Count; i++)
+ for(size_t i=0; i < Count; i++)
{
PushFarMacroValue(L, Values + i);
lua_rawseti(L, -2, (int)i+1);
@@ -823,11 +822,10 @@ void PackMacroValues(lua_State* L, size_t Count, const struct FarMacroValue* Val

static void WINAPI FillFarMacroCall_Callback (void *CallbackData, struct FarMacroValue *Values, size_t Count)
{
- size_t i;
struct FarMacroCall *fmc = (struct FarMacroCall*)CallbackData;
(void)Values; // not used
(void)Count; // not used
- for(i=0; i<fmc->Count; i++)
+ for(size_t i=0; i<fmc->Count; i++)
{
struct FarMacroValue *v = fmc->Values + i;
if (v->Type == FMVT_STRING)
@@ -838,21 +836,26 @@ static void WINAPI FillFarMacroCall_Callback (void *CallbackData, struct FarMacr
free(CallbackData);
}

-static HANDLE FillFarMacroCall (lua_State* L, int narg)
+static struct FarMacroCall* CreateFarMacroCall(size_t narg)
{
- INT64 val64;
-
+ size_t offset = aligned_size(sizeof(struct FarMacroCall), _Alignof(struct FarMacroValue));
struct FarMacroCall *fmc = (struct FarMacroCall*)
- malloc(sizeof(struct FarMacroCall) + narg*sizeof(struct FarMacroValue));
-
+ malloc(offset + narg*sizeof(struct FarMacroValue));
fmc->StructSize = sizeof(*fmc);
fmc->Count = narg;
- fmc->Values = (struct FarMacroValue*)(fmc+1);
+ fmc->Values = (struct FarMacroValue*)((char*)fmc + offset);
fmc->Callback = FillFarMacroCall_Callback;
fmc->CallbackData = fmc;
+ return fmc;
+}
+
+static HANDLE FillFarMacroCall (lua_State* L, int narg)
+{
+ struct FarMacroCall *fmc = CreateFarMacroCall(narg);

for (int i=0; i<narg; i++)
{
+ INT64 val64;
int pos = i - narg;
int type = lua_type(L, pos);
fmc->Values[i].Type = FMVT_NIL;
@@ -968,16 +971,9 @@ HANDLE LF_Open(lua_State* L, const struct OpenInfo *Info)
lua_rawgeti(L,-narg,1); // narg+1
if (lua_toboolean(L, -1))
{
- struct FarMacroCall* fmc = (struct FarMacroCall*)
- malloc(sizeof(struct FarMacroCall)+sizeof(struct FarMacroValue));
- fmc->StructSize = sizeof(*fmc);
- fmc->Count = 1;
- fmc->Values = (struct FarMacroValue*)(fmc+1);
- fmc->Callback = FillFarMacroCall_Callback;
- fmc->CallbackData = fmc;
+ struct FarMacroCall* fmc = CreateFarMacroCall(1);
fmc->Values[0].Type = FMVT_PANEL;
fmc->Values[0].Value.Pointer = RegisterObject(L); // narg
-
lua_pop(L,narg); // +0
return fmc;
}
diff --git a/plugins/luamacro/luafar/lf_luamacro.c b/plugins/luamacro/luafar/lf_luamacro.c
index 2c777a9d2..8155a8417 100644
--- a/plugins/luamacro/luafar/lf_luamacro.c
+++ b/plugins/luamacro/luafar/lf_luamacro.c
@@ -17,8 +17,7 @@ static int FL_PushParams(lua_State* L, const struct FarMacroCall* Data)
int ret = lua_checkstack(L, 2 + (int)Data->Count);
if (ret)
{
- size_t i;
- for(i=0; i < Data->Count; i++)
+ for(size_t i=0; i < Data->Count; i++)
PushFarMacroValue(L, Data->Values + i);
}
if (Data->Callback)
@@ -276,9 +275,9 @@ int far_MacroCallFar(lua_State *L)

int far_MacroCallToLua(lua_State *L)
{
- if (lua_type(L,1) == LUA_TLIGHTUSERDATA)
+ if (lua_type(L,1) == LUA_TLIGHTUSERDATA)
{
- struct FarMacroCall* Data = (struct FarMacroCall*)lua_touserdata(L, 1);
+ const struct FarMacroCall* Data = (struct FarMacroCall*)lua_touserdata(L, 1);
lua_settop(L, 0);
if (Data && !FL_PushParams(L, Data))
{
diff --git a/plugins/luamacro/luafar/lf_service.c b/plugins/luamacro/luafar/lf_service.c
index 08af0764b..d72ade68e 100644
--- a/plugins/luamacro/luafar/lf_service.c
+++ b/plugins/luamacro/luafar/lf_service.c
@@ -5307,11 +5307,10 @@ static int far_MacroExecute(lua_State* L)

if (top > 2)
{
- size_t i;
Data.InCount = top-2;
Data.InValues = (struct FarMacroValue*)lua_newuserdata(L, Data.InCount*sizeof(struct FarMacroValue));
memset(Data.InValues, 0, Data.InCount*sizeof(struct FarMacroValue));
- for (i=0; i<Data.InCount; i++)
+ for (size_t i=0; i<Data.InCount; i++)
ConvertLuaValue(L, (int)i+3, Data.InValues+i);
}

diff --git a/plugins/luamacro/luafar/lf_service.h b/plugins/luamacro/luafar/lf_service.h
index 05a3c6a5c..c0ec4eee9 100644
--- a/plugins/luamacro/luafar/lf_service.h
+++ b/plugins/luamacro/luafar/lf_service.h
@@ -18,7 +18,7 @@ void PushInputRecord(lua_State *L, const INPUT_RECORD* ir);
void DeleteLuaStateTimerQueue(lua_State *L);
HANDLE GetLuaStateTimerQueue(lua_State *L);

-int IsLuaJIT();
+int IsLuaJIT(void);
void LF_Error(lua_State *L, const wchar_t* aMsg);
void NewVirtualKeyTable(lua_State* L, BOOL twoways);
void pushFileTime(lua_State *L, const FILETIME *ft);
diff --git a/plugins/luamacro/luafar/lf_util.c b/plugins/luamacro/luafar/lf_util.c
index 47ebd990f..8a5d13fb2 100644
--- a/plugins/luamacro/luafar/lf_util.c
+++ b/plugins/luamacro/luafar/lf_util.c
@@ -109,3 +109,8 @@ int GetAttrFromTable(lua_State *L)
lua_pop(L, 1);
return attr;
}
+
+size_t aligned_size(size_t Size, size_t Alignment)
+{
+ return (Size + (Alignment - 1)) & ~(Alignment - 1);
+}
diff --git a/plugins/luamacro/luafar/lf_util.h b/plugins/luamacro/luafar/lf_util.h
index d85f3e4e3..cf5d9c76e 100644
--- a/plugins/luamacro/luafar/lf_util.h
+++ b/plugins/luamacro/luafar/lf_util.h
@@ -80,6 +80,7 @@ int GetFarColor(lua_State *L, int pos, struct FarColor* Color);
void PushFarColor(lua_State *L, const struct FarColor* Color);
HANDLE OptHandle(lua_State *L);
void FillPluginPanelItem(lua_State *L, struct PluginPanelItem *pi, int CollectorPos);
+size_t aligned_size(size_t Size, size_t Alignment);

typedef struct
{
diff --git a/plugins/luamacro/luafar/lf_version.h b/plugins/luamacro/luafar/lf_version.h
index efd070c58..35dbe6440 100644
--- a/plugins/luamacro/luafar/lf_version.h
+++ b/plugins/luamacro/luafar/lf_version.h
@@ -1,3 +1,3 @@
#include <farversion.hpp>

-#define PLUGIN_BUILD 898
+#define PLUGIN_BUILD 899
diff --git a/plugins/luamacro/luafar/lf_win.c b/plugins/luamacro/luafar/lf_win.c
index 61d242fef..4bb4d6865 100644
--- a/plugins/luamacro/luafar/lf_win.c
+++ b/plugins/luamacro/luafar/lf_win.c
@@ -862,7 +862,7 @@ static void PutFileTimeToTableEx(lua_State *L, const LARGE_INTEGER *FT, const ch
lua_setfield(L, -2, key);
}

-static void SetFunctionPointers()
+static void SetFunctionPointers(void)
{
HMODULE hNtDll = GetModuleHandleW(L"ntdll.dll");
if (hNtDll)
diff --git a/plugins/luamacro/macrotest.lua b/plugins/luamacro/macrotest.lua
index e38bad5ea..b1816fbfe 100644
--- a/plugins/luamacro/macrotest.lua
+++ b/plugins/luamacro/macrotest.lua
@@ -1435,22 +1435,19 @@ function MT.test_Plugin()
end

local function test_far_MacroExecute()
+ local i1 = bit64.new("0x8765876587658765")
+ local a1,a2,a3,a4,a5,a6 = "foo", false, 5, nil, i1, {[TKEY_BINARY]="bar"}
local function test(code, flags)
- local t = far.MacroExecute(code, flags,
- "foo",
- false,
- 5,
- nil,
- bit64.new("0x8765876587658765"),
- {[TKEY_BINARY] = "bar"})
- assert_table (t)
- assert_eq (t.n, 6)
- assert_eq (t[1], "foo")
- assert_false (t[2])
- assert_eq (t[3], 5)
- assert_nil (t[4])
- assert_eq (t[5], bit64.new("0x8765876587658765"))
- assert_eq (assert_table(t[6])[TKEY_BINARY], "bar")
+ local r = far.MacroExecute(code, flags, a1, a2, a3, a4, a5, a6)
+ assert_table (r)
+ assert_eq (r.n, 6)
+ assert_eq (r[1], a1)
+ assert_eq (r[2], a2)
+ assert_eq (r[3], a3)
+ assert_eq (r[4], a4)
+ assert_eq (r[5], a5)
+ assert_table (r[6])
+ assert_eq (r[6][TKEY_BINARY], a6[TKEY_BINARY])
end
test("return ...", nil)
test("return ...", "KMFLAGS_LUA")


Reply all
Reply to author
Forward
0 new messages