Commit 1aa1d4d6 authored by Dominik Charousset's avatar Dominik Charousset

Fix bookkeeping of the field name

parent df975797
......@@ -166,6 +166,7 @@ void json_reader::revert() {
err_.reset();
st_->clear();
st_->emplace_back(root_);
field_.clear();
}
}
......@@ -173,6 +174,7 @@ void json_reader::reset() {
buf_.reclaim();
st_ = nullptr;
err_.reset();
field_.clear();
}
// -- interface functions ------------------------------------------------------
......@@ -273,10 +275,10 @@ bool json_reader::begin_field(std::string_view name) {
bool json_reader::begin_field(std::string_view name, bool& is_present) {
SCOPE(position::object);
field_.push_back(name);
if (auto member = find_member(top<position::object>(), name);
member != nullptr
&& member->val->data.index() != detail::json::value::null_index) {
field_.push_back(name);
push(member->val);
is_present = true;
} else {
......@@ -297,6 +299,8 @@ bool json_reader::begin_field(std::string_view name,
return false;
}
} else {
// Always push since we'll do a .pop_back() in end_field().
field_.push_back(name);
return false;
}
}
......@@ -304,6 +308,7 @@ bool json_reader::begin_field(std::string_view name,
bool json_reader::begin_field(std::string_view name, bool& is_present,
span<const type_id_t> types, size_t& index) {
SCOPE(position::object);
field_.push_back(name);
if (auto member = find_member(top<position::object>(), name);
member != nullptr
&& member->val->data.index() != detail::json::value::null_index) {
......@@ -327,7 +332,8 @@ bool json_reader::end_field() {
SCOPE(position::object);
// Note: no pop() here, because the value(s) were already consumed. Only
// update the field_ for debugging.
field_.pop_back();
if (!field_.empty())
field_.pop_back();
return true;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment