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('(')) {
|
} 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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue