Blob Blame History Raw
https://hg.prosody.im/trunk/log?rev=only%28%22tip%22%2C+%220.11.2%22%29+and+keyword%28%22lua+5.3%22%29

--- prosody-0.11.4/plugins/mod_admin_telnet.lua		2020-01-02 10:49:37.000000000 +0100
+++ prosody-0.11.4/plugins/mod_admin_telnet.lua.lua53	2020-02-10 01:22:04.338037958 +0100
@@ -1207,7 +1207,7 @@
 	--do return tostring(value) end
 	if type == "duration" then
 		if ref_value < 0.001 then
-			return ("%d µs"):format(value*1000000);
+			return ("%g µs"):format(value*1000000);
 		elseif ref_value < 0.9 then
 			return ("%0.2f ms"):format(value*1000);
 		end
--- prosody-0.11.4/spec/util_format_spec.lua		2020-01-02 10:49:37.000000000 +0100
+++ prosody-0.11.4/spec/util_format_spec.lua.lua53	2020-02-10 01:22:04.337037950 +0100
@@ -9,6 +9,8 @@
 			assert.equal("true", format("%s", true));
 			assert.equal("[true]", format("%d", true));
 			assert.equal("% [true]", format("%%", true));
+			assert.equal("{ }", format("%q", { }));
+			assert.equal("[1.5]", format("%d", 1.5));
 		end);
 	end);
 end);
--- prosody-0.11.4/spec/util_json_spec.lua		2020-01-02 10:49:37.000000000 +0100
+++ prosody-0.11.4/spec/util_json_spec.lua.lua53	2020-02-10 01:25:25.036574135 +0100
@@ -1,5 +1,6 @@
 
 local json = require "util.json";
+local array = require "util.array";
 
 describe("util.json", function()
 	describe("#encode()", function()
@@ -67,4 +68,13 @@
 			end
 		end);
 	end)
+
+	describe("util.array integration", function ()
+		it("works", function ()
+			assert.equal("[]", json.encode(array()));
+			assert.equal("[1,2,3]", json.encode(array({1,2,3})));
+			assert.equal(getmetatable(array()), getmetatable(json.decode("[]")));
+		end);
+	end);
+
 end);
--- prosody-0.11.4/util/array.lua			2020-01-02 10:49:37.000000000 +0100
+++ prosody-0.11.4/util/array.lua.lua53			2020-02-10 01:24:20.088079855 +0100
@@ -10,6 +10,7 @@
     = table.insert, table.sort, table.remove, table.concat;
 
 local setmetatable = setmetatable;
+local getmetatable = getmetatable;
 local math_random = math.random;
 local math_floor = math.floor;
 local pairs, ipairs = pairs, ipairs;
@@ -40,6 +41,10 @@
 end
 
 function array_mt.__eq(a, b)
+	if getmetatable(a) ~= array_mt or getmetatable(b) ~= array_mt then
+		-- Lua 5.3+ calls this if both operands are tables, even if metatables differ
+		return false;
+	end
 	if #a == #b then
 		for i = 1, #a do
 			if a[i] ~= b[i] then
--- prosody-0.11.4/util/dependencies.lua		2020-01-02 10:49:37.000000000 +0100
+++ prosody-0.11.4/util/dependencies.lua.lua53		2020-02-10 01:22:04.337037950 +0100
@@ -140,7 +140,7 @@
 end
 
 local function log_warnings()
-	if _VERSION > "Lua 5.2" then
+	if _VERSION > "Lua 5.3" then
 		prosody.log("warn", "Support for %s is experimental, please report any issues", _VERSION);
 	end
 	local ssl = softreq"ssl";
--- prosody-0.11.4/util/format.lua			2020-01-02 10:49:37.000000000 +0100
+++ prosody-0.11.4/util/format.lua.lua53		2020-02-10 01:22:04.338037958 +0100
@@ -6,6 +6,9 @@
 local select = select;
 local unpack = table.unpack or unpack; -- luacheck: ignore 113/unpack
 local type = type;
+local num_type = math.type;
+
+local expects_integer = num_type and { c = true, d = true, i = true, o = true, u = true, X = true, x = true, } or {};
 
 local function format(formatstring, ...)
 	local args, args_length = { ... }, select('#', ...);
@@ -39,6 +42,9 @@
 			elseif type(arg) ~= "number" then -- arg isn't number as expected?
 				args[i] = tostring(arg);
 				spec = "[%s]";
+			elseif expects_integer[option] and num_type(arg) ~= "integer" then
+				args[i] = tostring(arg);
+				spec = "[%s]";
 			end
 		end
 		return spec;
--- prosody-0.11.4/util/ip.lua				2020-01-02 10:49:37.000000000 +0100
+++ prosody-0.11.4/util/ip.lua.lua53			2020-02-10 01:23:34.117728556 +0100
@@ -19,8 +19,14 @@
 		return ret;
 	end,
 	__tostring = function (ip) return ip.addr; end,
-	__eq = function (ipA, ipB) return ipA.packed == ipB.packed; end
 };
+ip_mt.__eq = function (ipA, ipB)
+	if getmetatable(ipA) ~= ip_mt or getmetatable(ipB) ~= ip_mt then
+		-- Lua 5.3+ calls this if both operands are tables, even if metatables differ
+		return false;
+	end
+	return ipA.packed == ipB.packed;
+end
 
 local hex2bits = {
 	["0"] = "0000", ["1"] = "0001", ["2"] = "0010", ["3"] = "0011",
--- prosody-0.11.4/util/set.lua				2020-01-02 10:49:37.000000000 +0100
+++ prosody-0.11.4/util/set.lua.lua53			2020-02-10 01:22:59.838465654 +0100
@@ -8,6 +8,7 @@
 
 local ipairs, pairs, setmetatable, next, tostring =
       ipairs, pairs, setmetatable, next, tostring;
+local getmetatable = getmetatable;
 local t_concat = table.concat;
 
 local _ENV = nil;
@@ -146,6 +147,11 @@
 	return new_set;
 end
 function set_mt.__eq(set1, set2)
+	if getmetatable(set1) ~= set_mt or getmetatable(set2) ~= set_mt then
+		-- Lua 5.3+ calls this if both operands are tables, even if metatables differ
+		return false;
+	end
+
 	set1, set2 = set1._items, set2._items;
 	for item in pairs(set1) do
 		if not set2[item] then