Add support for reading arrays
This commit is contained in:
parent
3999ef97ff
commit
94b8f21a82
1 changed files with 28 additions and 4 deletions
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue