aboutsummaryrefslogtreecommitdiff
path: root/gdb/python/py-varobj.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/python/py-varobj.c')
-rw-r--r--gdb/python/py-varobj.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/gdb/python/py-varobj.c b/gdb/python/py-varobj.c
index 372c911..9e4fb6c 100644
--- a/gdb/python/py-varobj.c
+++ b/gdb/python/py-varobj.c
@@ -17,13 +17,15 @@
#include "python-internal.h"
#include "varobj.h"
#include "varobj-iter.h"
+#include "valprint.h"
/* A dynamic varobj iterator "class" for python pretty-printed
varobjs. This inherits struct varobj_iter. */
struct py_varobj_iter : public varobj_iter
{
- py_varobj_iter (struct varobj *var, gdbpy_ref<> &&pyiter);
+ py_varobj_iter (struct varobj *var, gdbpy_ref<> &&pyiter,
+ const value_print_options *opts);
~py_varobj_iter () override;
std::unique_ptr<varobj_item> next () override;
@@ -41,6 +43,9 @@ private:
/* The python iterator returned by the printer's 'children' method,
or NULL if not available. */
PyObject *m_iter;
+
+ /* The print options to use. */
+ value_print_options m_opts;
};
/* Implementation of the 'dtor' method of pretty-printed varobj
@@ -67,6 +72,9 @@ py_varobj_iter::next ()
gdbpy_enter_varobj enter_py (m_var);
+ scoped_restore set_options = make_scoped_restore (&gdbpy_current_print_options,
+ &m_opts);
+
gdbpy_ref<> item (PyIter_Next (m_iter));
if (item == NULL)
@@ -124,9 +132,11 @@ py_varobj_iter::next ()
whose children the iterator will be iterating over. PYITER is the
python iterator actually responsible for the iteration. */
-py_varobj_iter::py_varobj_iter (struct varobj *var, gdbpy_ref<> &&pyiter)
+py_varobj_iter::py_varobj_iter (struct varobj *var, gdbpy_ref<> &&pyiter,
+ const value_print_options *opts)
: m_var (var),
- m_iter (pyiter.release ())
+ m_iter (pyiter.release ()),
+ m_opts (*opts)
{
}
@@ -134,13 +144,17 @@ py_varobj_iter::py_varobj_iter (struct varobj *var, gdbpy_ref<> &&pyiter)
over VAR's children. */
std::unique_ptr<varobj_iter>
-py_varobj_get_iterator (struct varobj *var, PyObject *printer)
+py_varobj_get_iterator (struct varobj *var, PyObject *printer,
+ const value_print_options *opts)
{
gdbpy_enter_varobj enter_py (var);
if (!PyObject_HasAttr (printer, gdbpy_children_cst))
return NULL;
+ scoped_restore set_options = make_scoped_restore (&gdbpy_current_print_options,
+ opts);
+
gdbpy_ref<> children (PyObject_CallMethodObjArgs (printer, gdbpy_children_cst,
NULL));
if (children == NULL)
@@ -157,5 +171,6 @@ py_varobj_get_iterator (struct varobj *var, PyObject *printer)
}
return std::unique_ptr<varobj_iter> (new py_varobj_iter (var,
- std::move (iter)));
+ std::move (iter),
+ opts));
}