util.startup: Provide a common Lua 5.3+ math.type() for Lua 5.2
authorKim Alvefur <zash@zash.se>
Wed, 19 Oct 2022 16:25:05 +0200
changeset 12785 22066b02887f
parent 12784 2c0c1b18a02b
child 12786 8815d3090928
util.startup: Provide a common Lua 5.3+ math.type() for Lua 5.2 Code deduplication
util/format.lua
util/jsonpointer.lua
util/serialization.lua
util/startup.lua
--- a/util/format.lua	Thu Oct 20 16:56:45 2022 +0200
+++ b/util/format.lua	Wed Oct 19 16:25:05 2022 +0200
@@ -11,9 +11,7 @@
 local valid_utf8 = require "util.encodings".utf8.valid;
 local type = type;
 local dump = require "util.serialization".new("debug");
-local num_type = math.type or function (n)
-	return n % 1 == 0 and n <= 9007199254740992 and n >= -9007199254740992 and "integer" or "float";
-end
+local num_type = math.type;
 
 -- In Lua 5.3+ these formats throw an error if given a float
 local expects_integer = { c = true, d = true, i = true, o = true, u = true, X = true, x = true, };
--- a/util/jsonpointer.lua	Thu Oct 20 16:56:45 2022 +0200
+++ b/util/jsonpointer.lua	Wed Oct 19 16:25:05 2022 +0200
@@ -1,6 +1,4 @@
-local m_type = math.type or function (n)
-	return n % 1 == 0 and n <= 9007199254740992 and n >= -9007199254740992 and "integer" or "float";
-end;
+local m_type = math.type;
 
 local function unescape_token(escaped_token)
 	local unescaped = escaped_token:gsub("~1", "/"):gsub("~0", "~")
--- a/util/serialization.lua	Thu Oct 20 16:56:45 2022 +0200
+++ b/util/serialization.lua	Wed Oct 19 16:25:05 2022 +0200
@@ -22,9 +22,7 @@
 local envload = require"util.envload".envload;
 
 local pos_inf, neg_inf = math.huge, -math.huge;
-local m_type = math.type or function (n)
-	return n % 1 == 0 and n <= 9007199254740992 and n >= -9007199254740992 and "integer" or "float";
-end;
+local m_type = math.type;
 
 local function rawpairs(t)
 	return next, t, nil;
--- a/util/startup.lua	Thu Oct 20 16:56:45 2022 +0200
+++ b/util/startup.lua	Wed Oct 19 16:25:05 2022 +0200
@@ -277,6 +277,20 @@
 	startup.detect_platform();
 	startup.detect_installed();
 	_G.prosody = prosody;
+
+	-- COMPAT Lua < 5.3
+	if not math.type then
+		-- luacheck: ignore 122/math
+		function math.type(n)
+			if type(n) == "number" then
+				if n % 1 == 0 and (n + 1 ~= n and n - 1 ~= n) then
+					return "integer"
+				else
+					return "float"
+				end
+			end
+		end
+	end
 end
 
 function startup.setup_datadir()