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 {...@@ -1188,7 +1188,7 @@ pub const Parser = struct {
1188 }1188 }
11891189
1190 var value = p.stack.pop();1190 var value = p.stack.pop();
1191 try p.pushToParent(value);1191 try p.pushToParent(&value);
1192 },1192 },
1193 Token.Id.String => {1193 Token.Id.String => {
1194 try p.stack.append(try p.parseString(allocator, token, input, i));1194 try p.stack.append(try p.parseString(allocator, token, input, i));
...@@ -1251,7 +1251,7 @@ pub const Parser = struct {...@@ -1251,7 +1251,7 @@ pub const Parser = struct {
1251 }1251 }
12521252
1253 var value = p.stack.pop();1253 var value = p.stack.pop();
1254 try p.pushToParent(value);1254 try p.pushToParent(&value);
1255 },1255 },
1256 Token.Id.ObjectBegin => {1256 Token.Id.ObjectBegin => {
1257 try p.stack.append(Value{ .Object = ObjectMap.init(allocator) });1257 try p.stack.append(Value{ .Object = ObjectMap.init(allocator) });
...@@ -1312,20 +1312,19 @@ pub const Parser = struct {...@@ -1312,20 +1312,19 @@ pub const Parser = struct {
1312 }1312 }
1313 }1313 }
13141314
1315 fn pushToParent(p: *Parser, value: Value) !void {1315 fn pushToParent(p: *Parser, value: *const Value) !void {
1316 switch (p.stack.at(p.stack.len - 1)) {1316 switch (p.stack.toSlice()[p.stack.len - 1]) {
1317 // Object Parent -> [ ..., object, <key>, value ]1317 // Object Parent -> [ ..., object, <key>, value ]
1318 Value.String => |key| {1318 Value.String => |key| {
1319 _ = p.stack.pop();1319 _ = p.stack.pop();
13201320
1321 var object = &p.stack.items[p.stack.len - 1].Object;1321 var object = &p.stack.items[p.stack.len - 1].Object;
1322 _ = try object.put(key, value);1322 _ = try object.put(key, value.*);
1323 p.state = State.ObjectKey;1323 p.state = State.ObjectKey;
1324 },1324 },
1325 // Array Parent -> [ ..., <array>, value ]1325 // Array Parent -> [ ..., <array>, value ]
1326 Value.Array => {1326 Value.Array => |*array| {
1327 var array = &p.stack.items[p.stack.len - 1].Array;1327 try array.append(value.*);
1328 try array.append(value);
1329 p.state = State.ArrayValue;1328 p.state = State.ArrayValue;
1330 },1329 },
1331 else => {1330 else => {