Fix pushToParent to work for arrays of Objects

The reference `*array` is a copy of the value on the stack. Instead use
a reference to top of stack. This is the same technique used above for
`var object` in `Value.String`.

Added two simple tests.
This commit is contained in:
Wink Saville 2018-11-18 10:14:37 -08:00
parent e9b47d960b
commit 8d54cbb834
No known key found for this signature in database
GPG Key ID: D232788D248BCF0E

View File

@ -1323,7 +1323,8 @@ pub const Parser = struct {
p.state = State.ObjectKey; p.state = State.ObjectKey;
}, },
// Array Parent -> [ ..., <array>, value ] // Array Parent -> [ ..., <array>, value ]
Value.Array => |*array| { Value.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;
}, },
@ -1364,7 +1365,8 @@ test "json parser dynamic" {
\\ "Width": 100 \\ "Width": 100
\\ }, \\ },
\\ "Animated" : false, \\ "Animated" : false,
\\ "IDs": [116, 943, 234, 38793] \\ "IDs": [116, 943, 234, 38793],
\\ "ArrayOfObject": [{"n": "m"}]
\\ } \\ }
\\} \\}
; ;
@ -1387,4 +1389,10 @@ test "json parser dynamic" {
const animated = image.Object.get("Animated").?.value; const animated = image.Object.get("Animated").?.value;
debug.assert(animated.Bool == false); debug.assert(animated.Bool == false);
const array_of_object = image.Object.get("ArrayOfObject").?.value;
debug.assert(array_of_object.Array.len == 1);
const obj0 = array_of_object.Array.at(0).Object.get("n").?.value;
debug.assert(mem.eql(u8, obj0.String, "m"));
} }