authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-11-27 00:52:32-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-11-27 00:52:32-05:00
loga5b79017a32e8ee1c9486b3b3bf2c13fa7db899c
tree06ef9591d26a6eadaba334b889a57c4a28ebfa86
parent7818550edcced664344abe1a6a66caea194beccc
signaturelock-open Commit is signed but in an unrecognized format.

fix regression from d5648d26

thanks Wink Saville for the test case.

1 files changed, 7 insertions(+), 8 deletions(-)

std/json.zig+7-8
......@@ -1188,7 +1188,7 @@ pub const Parser = struct {
11881188 }
11891189
11901190 var value = p.stack.pop();
1191 try p.pushToParent(value);
1191 try p.pushToParent(&value);
11921192 },
11931193 Token.Id.String => {
11941194 try p.stack.append(try p.parseString(allocator, token, input, i));
......@@ -1251,7 +1251,7 @@ pub const Parser = struct {
12511251 }
12521252
12531253 var value = p.stack.pop();
1254 try p.pushToParent(value);
1254 try p.pushToParent(&value);
12551255 },
12561256 Token.Id.ObjectBegin => {
12571257 try p.stack.append(Value{ .Object = ObjectMap.init(allocator) });
......@@ -1312,20 +1312,19 @@ pub const Parser = struct {
13121312 }
13131313 }
13141314
1315 fn pushToParent(p: *Parser, value: Value) !void {
1316 switch (p.stack.at(p.stack.len - 1)) {
1315 fn pushToParent(p: *Parser, value: *const Value) !void {
1316 switch (p.stack.toSlice()[p.stack.len - 1]) {
13171317 // Object Parent -> [ ..., object, <key>, value ]
13181318 Value.String => |key| {
13191319 _ = p.stack.pop();
13201320
13211321 var object = &p.stack.items[p.stack.len - 1].Object;
1322 _ = try object.put(key, value);
1322 _ = try object.put(key, value.*);
13231323 p.state = State.ObjectKey;
13241324 },
13251325 // Array Parent -> [ ..., <array>, value ]
1326 Value.Array => {
1327 var array = &p.stack.items[p.stack.len - 1].Array;
1328 try array.append(value);
1326 Value.Array => |*array| {
1327 try array.append(value.*);
13291328 p.state = State.ArrayValue;
13301329 },
13311330 else => {