fix regression from d5648d26
thanks Wink Saville for the test case.
This commit is contained in:
parent
7818550edc
commit
a5b79017a3
15
std/json.zig
15
std/json.zig
@ -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 => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user