diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2019-11-14 11:49:03 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2019-11-14 11:49:03 +0800 |
commit | e37c7995cf6a9d27fed887671732735a3522186e (patch) | |
tree | eebdc901b962a4f34acf199df81396f8f696641f /server/src/json | |
parent | c7137ba14af910490a523d50c001098946ddf410 (diff) | |
download | lua-language-server-e37c7995cf6a9d27fed887671732735a3522186e.zip |
fix #106
Diffstat (limited to 'server/src/json')
-rw-r--r-- | server/src/json/decode.lua | 51 |
1 files changed, 22 insertions, 29 deletions
diff --git a/server/src/json/decode.lua b/server/src/json/decode.lua index 4822bc82..36f8aa54 100644 --- a/server/src/json/decode.lua +++ b/server/src/json/decode.lua @@ -1,19 +1,21 @@ -local lpeg = require 'lpeglabel' -local save_sort -local table_pack = table.pack -local rawset = rawset -local tointeger = math.tointeger -local tonumber = tonumber +local lpeg = require 'lpeglabel' +local tablePack = table.pack +local rawset = rawset +local tointeger = math.tointeger +local tonumber = tonumber local setmetatable = setmetatable -local string_char = string.char +local stringChar = string.char +local error = error -local P = lpeg.P -local S = lpeg.S -local R = lpeg.R -local V = lpeg.V -local C = lpeg.C +_ENV = nil + +local SaveSort +local P = lpeg.P +local S = lpeg.S +local R = lpeg.R +local V = lpeg.V +local C = lpeg.C local Ct = lpeg.Ct -local Cg = lpeg.Cg local Cc = lpeg.Cc local Cp = lpeg.Cp local Cs = lpeg.Cs @@ -55,15 +57,6 @@ local hashmt = { rawset(self, i, k) rawset(self, k, v) end, - __debugger_extand = function (self) - local list = {} - for k, v in pairs(self) do - k = tostring(k) - list[#list+1] = k - list[k] = v - end - return list - end, } ----------------------------------------------------------------------------- @@ -83,23 +76,23 @@ local function Utf8(str) -- 4096 = 2^12 (or 2^6 * 2^6) local x if n < 0x80 then - x = string_char(n % 0x80) + x = stringChar(n % 0x80) elseif n < 0x800 then -- [110x xxxx] [10xx xxxx] - x = string_char(0xC0 + ((n // 64) % 0x20), 0x80 + (n % 0x40)) + x = stringChar(0xC0 + ((n // 64) % 0x20), 0x80 + (n % 0x40)) else -- [1110 xxxx] [10xx xxxx] [10xx xxxx] - x = string_char(0xE0 + ((n // 4096) % 0x10), 0x80 + ((n // 64) % 0x40), 0x80 + (n % 0x40)) + x = stringChar(0xE0 + ((n // 4096) % 0x10), 0x80 + ((n // 64) % 0x40), 0x80 + (n % 0x40)) end return x end local function HashTable(patt) return C(patt) / function (_, ...) - local hash = table_pack(...) + local hash = tablePack(...) local n = hash.n hash.n = nil - if save_sort then + if SaveSort then local max = n // 2 for i = 1, max do local key, value = hash[2*i-1], hash[2*i] @@ -130,7 +123,7 @@ local Token = P { V'Value' * Cp(), Nl = P'\r\n' + S'\r\n', - Sp = S' \t', + Sp = S' \t' + '//' * (1-V'Nl')^0, Spnl = (V'Sp' + V'Nl')^0, Bool = C(P'true' + P'false') / BoolMap, Int = C('0' + (P'-'^-1 * R'19' * R'09'^0)) / tointeger, @@ -148,7 +141,7 @@ local Token = P } return function (str, save_sort_) - save_sort = save_sort_ + SaveSort = save_sort_ local table, res, pos = Token:match(str) if not table then if not pos or pos <= #str then |