From 917e8a08c218439005f14ad50170c16df26434b5 Mon Sep 17 00:00:00 2001 From: alexandro-rezakhani <85354050+alexandro-rezakhani@users.noreply.github.com> Date: Sun, 20 Nov 2022 00:58:38 -0500 Subject: [PATCH] Optimize code Took advice from @Dnsls and @Faserr to optimize code from #34. https://github.com/rxi/json.lua/issues/34 https://github.com/rxi/json.lua/issues/34#issue-900464723 https://github.com/rxi/json.lua/issues/34#issuecomment-1060329470 --- json.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/json.lua b/json.lua index bc4b745..53bc7ef 100644 --- a/json.lua +++ b/json.lua @@ -22,7 +22,7 @@ -- SOFTWARE. -- -local json = { _version = "0.1.2" } +local json = { _version = "0.1.2fix" } ------------------------------------------------------------------------------- -- Encode @@ -233,7 +233,7 @@ end local function parse_string(str, i) - local res = "" + local res = {} local j = i + 1 local k = j @@ -244,25 +244,25 @@ local function parse_string(str, i) decode_error(str, j, "control character in string") elseif x == 92 then -- `\`: Escape - res = res .. str:sub(k, j - 1) + res[#res + 1] = str:sub(k, j - 1) j = j + 1 local c = str:sub(j, j) if c == "u" then local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1) or str:match("^%x%x%x%x", j + 1) or decode_error(str, j - 1, "invalid unicode escape in string") - res = res .. parse_unicode_escape(hex) + res[#res + 1] = parse_unicode_escape(hex) j = j + #hex else if not escape_chars[c] then decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string") end - res = res .. escape_char_map_inv[c] + res[#res + 1] = escape_char_map_inv[c] end k = j + 1 elseif x == 34 then -- `"`: End of string - res = res .. str:sub(k, j - 1) + res[#res + 1] = str:sub(k, j - 1) return res, j + 1 end