Software /
code /
prosody
Changeset
10034:4fca92d60040
util.format: Handle formats expecting an integer in Lua 5.3+ (fixes #1371)
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 30 May 2019 13:41:05 +0200 |
parents | 10033:ca8333d1a7fe |
children | 10035:386f085820e6 |
files | spec/util_format_spec.lua util/format.lua |
diffstat | 2 files changed, 7 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/spec/util_format_spec.lua Tue May 28 00:56:30 2019 +0200 +++ b/spec/util_format_spec.lua Thu May 30 13:41:05 2019 +0200 @@ -12,6 +12,7 @@ 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);
--- a/util/format.lua Tue May 28 00:56:30 2019 +0200 +++ b/util/format.lua Thu May 30 13:41:05 2019 +0200 @@ -7,6 +7,9 @@ local pack = require "util.table".pack; -- TODO table.pack in 5.2+ local type = type; local dump = require "util.serialization".new("debug"); +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 = pack(...); @@ -43,6 +46,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;