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('(')) { } else if (match('(')) {
return read_list(); return read_list();
} else if (match('[')) { } else if (match('[')) {
// TODO: implement array return read_array();
// return read_array();
return ERROR(ReadError);
} else if (match('{')) { } else if (match('{')) {
return read_dict(); return read_dict();
return ERROR(ReadError);
} }
position_ = saved_position; position_ = saved_position;
@ -118,6 +115,33 @@ Result<Value> Reader::read_list() {
return ERROR(ReadError); 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() { Result<Value> Reader::read_dict() {
if (!match('{')) return ERROR(ReadError); if (!match('{')) return ERROR(ReadError);