Commit 4b9e5e2a authored by Dominik Charousset's avatar Dominik Charousset

Merge branch 'topic/neverlord/json'

parents 21328c0f d8e9b092
...@@ -166,6 +166,7 @@ void json_reader::revert() { ...@@ -166,6 +166,7 @@ void json_reader::revert() {
err_.reset(); err_.reset();
st_->clear(); st_->clear();
st_->emplace_back(root_); st_->emplace_back(root_);
field_.clear();
} }
} }
...@@ -173,6 +174,7 @@ void json_reader::reset() { ...@@ -173,6 +174,7 @@ void json_reader::reset() {
buf_.reclaim(); buf_.reclaim();
st_ = nullptr; st_ = nullptr;
err_.reset(); err_.reset();
field_.clear();
} }
// -- interface functions ------------------------------------------------------ // -- interface functions ------------------------------------------------------
...@@ -260,8 +262,8 @@ bool json_reader::end_object() { ...@@ -260,8 +262,8 @@ bool json_reader::end_object() {
bool json_reader::begin_field(std::string_view name) { bool json_reader::begin_field(std::string_view name) {
SCOPE(position::object); SCOPE(position::object);
if (auto member = find_member(top<position::object>(), name)) {
field_.push_back(name); field_.push_back(name);
if (auto member = find_member(top<position::object>(), name)) {
push(member->val); push(member->val);
return true; return true;
} else { } else {
...@@ -273,10 +275,10 @@ bool json_reader::begin_field(std::string_view name) { ...@@ -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) { bool json_reader::begin_field(std::string_view name, bool& is_present) {
SCOPE(position::object); SCOPE(position::object);
field_.push_back(name);
if (auto member = find_member(top<position::object>(), name); if (auto member = find_member(top<position::object>(), name);
member != nullptr member != nullptr
&& member->val->data.index() != detail::json::value::null_index) { && member->val->data.index() != detail::json::value::null_index) {
field_.push_back(name);
push(member->val); push(member->val);
is_present = true; is_present = true;
} else { } else {
...@@ -304,6 +306,7 @@ bool json_reader::begin_field(std::string_view name, ...@@ -304,6 +306,7 @@ bool json_reader::begin_field(std::string_view name,
bool json_reader::begin_field(std::string_view name, bool& is_present, bool json_reader::begin_field(std::string_view name, bool& is_present,
span<const type_id_t> types, size_t& index) { span<const type_id_t> types, size_t& index) {
SCOPE(position::object); SCOPE(position::object);
field_.push_back(name);
if (auto member = find_member(top<position::object>(), name); if (auto member = find_member(top<position::object>(), name);
member != nullptr member != nullptr
&& member->val->data.index() != detail::json::value::null_index) { && member->val->data.index() != detail::json::value::null_index) {
...@@ -312,7 +315,6 @@ bool json_reader::begin_field(std::string_view name, bool& is_present, ...@@ -312,7 +315,6 @@ bool json_reader::begin_field(std::string_view name, bool& is_present,
if (auto i = std::find(types.begin(), types.end(), id); if (auto i = std::find(types.begin(), types.end(), id);
i != types.end()) { i != types.end()) {
index = static_cast<size_t>(std::distance(types.begin(), i)); index = static_cast<size_t>(std::distance(types.begin(), i));
field_.push_back(name);
push(member->val); push(member->val);
is_present = true; is_present = true;
return true; return true;
...@@ -327,6 +329,7 @@ bool json_reader::end_field() { ...@@ -327,6 +329,7 @@ bool json_reader::end_field() {
SCOPE(position::object); SCOPE(position::object);
// Note: no pop() here, because the value(s) were already consumed. Only // Note: no pop() here, because the value(s) were already consumed. Only
// update the field_ for debugging. // update the field_ for debugging.
if (!field_.empty())
field_.pop_back(); field_.pop_back();
return true; 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