Add support for reading arrays

This commit is contained in:
Konstantin Nazarov 2024-09-01 22:37:56 +01:00
parent 3999ef97ff
commit 94b8f21a82
Signed by: knazarov
GPG key ID: 4CFE0A42FA409C22

View file

@ -59,12 +59,9 @@ Result<Value> Reader::read_one() {
} else if (match('(')) {
return read_list();
} else if (match('[')) {
// TODO: implement array
// return read_array();
return ERROR(ReadError);
return read_array();
} else if (match('{')) {
return read_dict();
return ERROR(ReadError);
}
position_ = saved_position;
@ -118,6 +115,33 @@ Result<Value> Reader::read_list() {
return ERROR(ReadError);
}
Result<Value> Reader::read_array() {
if (!match('[')) return ERROR(ReadError);
forward();
auto res = TRY(Array::create());
while (1) {
forward_whitespace();
if (is_eof()) {
return ERROR(ReadError);
}
if (match(']')) {
forward();
return Value(std::move(res));
}
auto val = TRY(read_one());
res = TRY(res.append(val));
}
return ERROR(ReadError);
}
Result<Value> Reader::read_dict() {
if (!match('{')) return ERROR(ReadError);