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")