equal
deleted
inserted
replaced
15 local pairs, ipairs = pairs, ipairs; |
15 local pairs, ipairs = pairs, ipairs; |
16 local next = next; |
16 local next = next; |
17 local error = error; |
17 local error = error; |
18 local newproxy, getmetatable = newproxy, getmetatable; |
18 local newproxy, getmetatable = newproxy, getmetatable; |
19 local print = print; |
19 local print = print; |
|
20 |
|
21 local has_array, array = pcall(require, "util.array"); |
|
22 local array_mt = hasarray and getmetatable(array()) or {}; |
20 |
23 |
21 --module("json") |
24 --module("json") |
22 local json = {}; |
25 local json = {}; |
23 |
26 |
24 local null = newproxy and newproxy(true) or {}; |
27 local null = newproxy and newproxy(true) or {}; |
163 if t == "number" then |
166 if t == "number" then |
164 t_insert(buffer, tostring(o)); |
167 t_insert(buffer, tostring(o)); |
165 elseif t == "string" then |
168 elseif t == "string" then |
166 stringsave(o, buffer); |
169 stringsave(o, buffer); |
167 elseif t == "table" then |
170 elseif t == "table" then |
168 tablesave(o, buffer); |
171 local mt = getmetatable(o); |
|
172 if mt == array_mt then |
|
173 arraysave(o, buffer); |
|
174 else |
|
175 tablesave(o, buffer); |
|
176 end |
169 elseif t == "boolean" then |
177 elseif t == "boolean" then |
170 t_insert(buffer, (o and "true" or "false")); |
178 t_insert(buffer, (o and "true" or "false")); |
171 else |
179 else |
172 t_insert(buffer, "null"); |
180 t_insert(buffer, "null"); |
173 end |
181 end |
235 end |
243 end |
236 end |
244 end |
237 |
245 |
238 local readvalue; |
246 local readvalue; |
239 local function readarray() |
247 local function readarray() |
240 local t = {}; |
248 local t = setmetatable({}, array_mt); |
241 next(); -- skip '[' |
249 next(); -- skip '[' |
242 skipstuff(); |
250 skipstuff(); |
243 if ch == "]" then next(); return t; end |
251 if ch == "]" then next(); return t; end |
244 t_insert(t, readvalue()); |
252 t_insert(t, readvalue()); |
245 while true do |
253 while true do |