From 3cfffd299e5223aa5bd383aa19eebd5117ae6a90 Mon Sep 17 00:00:00 2001 From: rxi Date: Sat, 15 Aug 2015 10:52:31 +0100 Subject: [PATCH] Fixed codepoint_to_utf8()'s string.char usage for Lua5.3 Lua5.3 requires that string.char's arguments are integers (<=5.2 and JIT do not) --- json.lua | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/json.lua b/json.lua index 746b358..40b75c8 100644 --- a/json.lua +++ b/json.lua @@ -163,15 +163,16 @@ end local function codepoint_to_utf8(n) -- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa + local f = math.floor if n <= 0x7f then return string.char(n) elseif n <= 0x7ff then - return string.char(n / 64 + 192, n % 64 + 128) + return string.char(f(n / 64) + 192, n % 64 + 128) elseif n <= 0xffff then - return string.char(n / 4096 + 224, n % 4096 / 64 + 128, n % 64 + 128) + return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128) elseif n <= 0x10ffff then - return string.char(n / 262144 + 240, n % 262144 / 4096 + 128, - n % 4096 / 64 + 128, n % 64 + 128) + return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128, + f(n % 4096 / 64) + 128, n % 64 + 128) end error( string.format("invalid unicode codepoint '%x'", n) ) end