From ae05f11c458601fe6c279ae5abcd2197518e3c28 Mon Sep 17 00:00:00 2001
From: Louis-Antoine <lamr@free.fr>
Date: Tue, 28 Apr 2020 23:12:02 +0200
Subject: [PATCH] Optimise number archiving

---
 src/lua_script.c | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/src/lua_script.c b/src/lua_script.c
index 05ad4700f6..98c35e91f7 100644
--- a/src/lua_script.c
+++ b/src/lua_script.c
@@ -732,7 +732,9 @@ enum
 	ARCH_NULL=0,
 	ARCH_TRUE,
 	ARCH_FALSE,
-	ARCH_SIGNED,
+	ARCH_INT8,
+	ARCH_INT16,
+	ARCH_INT32,
 	ARCH_SMALLSTRING,
 	ARCH_LARGESTRING,
 	ARCH_TABLE,
@@ -824,8 +826,21 @@ static UINT8 ArchiveValue(int TABLESINDEX, int myindex)
 	case LUA_TNUMBER:
 	{
 		lua_Integer number = lua_tointeger(gL, myindex);
-        WRITEUINT8(save_p, ARCH_SIGNED);
-        WRITEFIXED(save_p, number);
+		if (number >= INT8_MIN && number <= INT8_MAX)
+		{
+			WRITEUINT8(save_p, ARCH_INT8);
+			WRITESINT8(save_p, number);
+		}
+		else if (number >= INT16_MIN && number <= INT16_MAX)
+		{
+			WRITEUINT8(save_p, ARCH_INT16);
+			WRITEINT16(save_p, number);
+		}
+		else
+		{
+			WRITEUINT8(save_p, ARCH_INT32);
+			WRITEFIXED(save_p, number);
+		}
 		break;
 	}
 	case LUA_TSTRING:
@@ -1193,8 +1208,13 @@ static UINT8 UnArchiveValue(int TABLESINDEX)
 	case ARCH_FALSE:
 		lua_pushboolean(gL, false);
 		break;
+	case ARCH_INT8:
+		lua_pushinteger(gL, READSINT8(save_p));
+		break;
+	case ARCH_INT16:
+		lua_pushinteger(gL, READINT16(save_p));
 		break;
-	case ARCH_SIGNED:
+	case ARCH_INT32:
 		lua_pushinteger(gL, READFIXED(save_p));
 		break;
 	case ARCH_SMALLSTRING:
-- 
GitLab