aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2020-12-11 09:33:36 -0700
committerTom Tromey <tom@tromey.com>2020-12-11 09:33:39 -0700
commit60ee72f6d3bf10b4bd3ef1315c72c4551c459224 (patch)
treeecabe94538b876c29844cd4bd542030b6bcefb96 /gdb
parent54746ce37a483e235ac128b6f545be9888bf3521 (diff)
downloadgdb-60ee72f6d3bf10b4bd3ef1315c72c4551c459224.zip
gdb-60ee72f6d3bf10b4bd3ef1315c72c4551c459224.tar.gz
gdb-60ee72f6d3bf10b4bd3ef1315c72c4551c459224.tar.bz2
Change varobj_iter::next to return unique_ptr
This changes varobj_iter::next to return a unique_ptr. This fits in with the ongoing theme of trying to express these ownership transfers via the type system. gdb/ChangeLog 2020-12-11 Tom Tromey <tom@tromey.com> * varobj.c (update_dynamic_varobj_children): Update. * varobj-iter.h (struct varobj_iter) <next>: Change return type. * python/py-varobj.c (struct py_varobj_iter) <next>: Change return type. (py_varobj_iter::next): Likewise.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/python/py-varobj.c6
-rw-r--r--gdb/varobj-iter.h2
-rw-r--r--gdb/varobj.c10
4 files changed, 16 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 53f87d9..d2c902c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
2020-12-11 Tom Tromey <tom@tromey.com>
+ * varobj.c (update_dynamic_varobj_children): Update.
+ * varobj-iter.h (struct varobj_iter) <next>: Change return type.
+ * python/py-varobj.c (struct py_varobj_iter) <next>: Change return
+ type.
+ (py_varobj_iter::next): Likewise.
+
+2020-12-11 Tom Tromey <tom@tromey.com>
+
* varobj.c (update_dynamic_varobj_children, install_visualizer)
(varobj::~varobj): Update.
* varobj-iter.h (struct varobj_iter): Change to interface class.
diff --git a/gdb/python/py-varobj.c b/gdb/python/py-varobj.c
index df6f9c5..c3fb2e9 100644
--- a/gdb/python/py-varobj.c
+++ b/gdb/python/py-varobj.c
@@ -26,7 +26,7 @@ struct py_varobj_iter : public varobj_iter
py_varobj_iter (struct varobj *var, gdbpy_ref<> &&pyiter);
~py_varobj_iter () override;
- varobj_item *next () override;
+ std::unique_ptr<varobj_item> next () override;
private:
@@ -55,7 +55,7 @@ py_varobj_iter::~py_varobj_iter ()
/* Implementation of the 'next' method of pretty-printed varobj
iterators. */
-varobj_item *
+std::unique_ptr<varobj_item>
py_varobj_iter::next ()
{
PyObject *py_v;
@@ -117,7 +117,7 @@ py_varobj_iter::next ()
vitem->name = name;
m_next_raw_index++;
- return vitem;
+ return std::unique_ptr<varobj_item> (vitem);
}
/* Constructor of pretty-printed varobj iterators. VAR is the varobj
diff --git a/gdb/varobj-iter.h b/gdb/varobj-iter.h
index ed65419..a05f1cb 100644
--- a/gdb/varobj-iter.h
+++ b/gdb/varobj-iter.h
@@ -36,7 +36,7 @@ public:
virtual ~varobj_iter () = default;
- virtual varobj_item *next () = 0;
+ virtual std::unique_ptr<varobj_item> next () = 0;
};
#endif /* VAROBJ_ITER_H */
diff --git a/gdb/varobj.c b/gdb/varobj.c
index 80de679..e9856ea 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -719,12 +719,12 @@ update_dynamic_varobj_children (struct varobj *var,
are more children. */
for (; to < 0 || i < to + 1; ++i)
{
- varobj_item *item;
+ std::unique_ptr<varobj_item> item;
/* See if there was a leftover from last time. */
if (var->dynamic->saved_item != NULL)
{
- item = var->dynamic->saved_item;
+ item = std::unique_ptr<varobj_item> (var->dynamic->saved_item);
var->dynamic->saved_item = NULL;
}
else
@@ -753,13 +753,11 @@ update_dynamic_varobj_children (struct varobj *var,
can_mention ? newobj : NULL,
can_mention ? unchanged : NULL,
can_mention ? cchanged : NULL, i,
- item);
-
- delete item;
+ item.get ());
}
else
{
- var->dynamic->saved_item = item;
+ var->dynamic->saved_item = item.release ();
/* We want to truncate the child list just before this
element. */