diff options
author | Waqas Hussain <waqas20@gmail.com> | 2013-05-05 15:02:33 -0400 |
---|---|---|
committer | Waqas Hussain <waqas20@gmail.com> | 2013-05-05 15:02:33 -0400 |
commit | 8098be4eb1e9a10f967398196407c39d2cb5ef46 (patch) | |
tree | 417dc6da4013335fb024110062eb13f58ee0ed07 /util/json.lua | |
parent | f10d012d24cf65e24ba0ff176b56613f4ae4f532 (diff) | |
download | prosody-8098be4eb1e9a10f967398196407c39d2cb5ef46.tar.gz prosody-8098be4eb1e9a10f967398196407c39d2cb5ef46.zip |
util.json: Optimize long string parsing.
Diffstat (limited to 'util/json.lua')
-rw-r--r-- | util/json.lua | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/util/json.lua b/util/json.lua index 9c2dd2c6..6251af1a 100644 --- a/util/json.lua +++ b/util/json.lua @@ -258,16 +258,16 @@ function json.decode(json) return val; end local function readstring() - local s = ""; + local s = {}; checkandskip("\""); while ch do while ch and ch ~= "\\" and ch ~= "\"" do - s = s..ch; next(); + t_insert(s, ch); next(); end if ch == "\\" then next(); if unescapes[ch] then - s = s..unescapes[ch]; + t_insert(s, unescapes[ch]); next(); elseif ch == "u" then local seq = ""; @@ -277,13 +277,13 @@ function json.decode(json) if not ch:match("[0-9a-fA-F]") then error("invalid unicode escape sequence in string"); end seq = seq..ch; end - s = s..codepoint_to_utf8(tonumber(seq, 16)); + t_insert(s, codepoint_to_utf8(tonumber(seq, 16))); next(); else error("invalid escape sequence in string"); end end if ch == "\"" then next(); - return s; + return t_concat(s); end end error("eof while reading string"); |