fix regression from d5648d26

thanks Wink Saville for the test case.
This commit is contained in:
Andrew Kelley 2018-11-27 00:52:32 -05:00
parent 7818550edc
commit a5b79017a3
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9

View File

@ -1188,7 +1188,7 @@ pub const Parser = struct {
} }
var value = p.stack.pop(); var value = p.stack.pop();
try p.pushToParent(value); try p.pushToParent(&value);
}, },
Token.Id.String => { Token.Id.String => {
try p.stack.append(try p.parseString(allocator, token, input, i)); try p.stack.append(try p.parseString(allocator, token, input, i));
@ -1251,7 +1251,7 @@ pub const Parser = struct {
} }
var value = p.stack.pop(); var value = p.stack.pop();
try p.pushToParent(value); try p.pushToParent(&value);
}, },
Token.Id.ObjectBegin => { Token.Id.ObjectBegin => {
try p.stack.append(Value{ .Object = ObjectMap.init(allocator) }); try p.stack.append(Value{ .Object = ObjectMap.init(allocator) });
@ -1312,20 +1312,19 @@ pub const Parser = struct {
} }
} }
fn pushToParent(p: *Parser, value: Value) !void { fn pushToParent(p: *Parser, value: *const Value) !void {
switch (p.stack.at(p.stack.len - 1)) { switch (p.stack.toSlice()[p.stack.len - 1]) {
// Object Parent -> [ ..., object, <key>, value ] // Object Parent -> [ ..., object, <key>, value ]
Value.String => |key| { Value.String => |key| {
_ = p.stack.pop(); _ = p.stack.pop();
var object = &p.stack.items[p.stack.len - 1].Object; var object = &p.stack.items[p.stack.len - 1].Object;
_ = try object.put(key, value); _ = try object.put(key, value.*);
p.state = State.ObjectKey; p.state = State.ObjectKey;
}, },
// Array Parent -> [ ..., <array>, value ] // Array Parent -> [ ..., <array>, value ]
Value.Array => { Value.Array => |*array| {
var array = &p.stack.items[p.stack.len - 1].Array; try array.append(value.*);
try array.append(value);
p.state = State.ArrayValue; p.state = State.ArrayValue;
}, },
else => { else => {