Set parent pointers for values inserted via update() (fixes #3007).
This commit is contained in:
parent
bbdb29c658
commit
42b77b5c92
@ -6009,6 +6009,9 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
|
|||||||
for (auto it = j.cbegin(); it != j.cend(); ++it)
|
for (auto it = j.cbegin(); it != j.cend(); ++it)
|
||||||
{
|
{
|
||||||
m_value.object->operator[](it.key()) = it.value();
|
m_value.object->operator[](it.key()) = it.value();
|
||||||
|
#if JSON_DIAGNOSTICS
|
||||||
|
m_value.object->operator[](it.key()).m_parent = this;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -23414,6 +23414,9 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
|
|||||||
for (auto it = j.cbegin(); it != j.cend(); ++it)
|
for (auto it = j.cbegin(); it != j.cend(); ++it)
|
||||||
{
|
{
|
||||||
m_value.object->operator[](it.key()) = it.value();
|
m_value.object->operator[](it.key()) = it.value();
|
||||||
|
#if JSON_DIAGNOSTICS
|
||||||
|
m_value.object->operator[](it.key()).m_parent = this;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -679,6 +679,23 @@ TEST_CASE("regression tests 2")
|
|||||||
test3[json::json_pointer(p)] = json::object();
|
test3[json::json_pointer(p)] = json::object();
|
||||||
CHECK(test3.dump() == "{\"/root\":{}}");
|
CHECK(test3.dump() == "{\"/root\":{}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("issue #3007 - Parent pointers properly set when using update()")
|
||||||
|
{
|
||||||
|
json j = json::object();
|
||||||
|
json lower = json::object();
|
||||||
|
|
||||||
|
{
|
||||||
|
json j2 = json::object();
|
||||||
|
j2["one"] = 1;
|
||||||
|
|
||||||
|
j.update(j2);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto const & kv : j) {
|
||||||
|
CHECK(kv.m_parent == &j);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DOCTEST_CLANG_SUPPRESS_WARNING_POP
|
DOCTEST_CLANG_SUPPRESS_WARNING_POP
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user