Remove some ui_out-related cleanups from Python
This patch introduces a bit of infrastructure -- namely, a minimal std::optional analogue called gdb::optional, and an RAII template class that works like make_cleanup_ui_out_tuple_begin_end or make_cleanup_ui_out_list_begin_end -- and then uses these in the Python code. This removes a number of cleanups and generally simplifies this code. std::optional is only available in C++17. Normally I would have had this code check __cplusplus, but my gcc apparently isn't new enough to find <optional>, even with -std=c++1z; so, because I could not test it, the patch does not do this. gdb/ChangeLog 2017-02-10 Tom Tromey <tom@tromey.com> * ui-out.h (ui_out_emit_type): New class. (ui_out_emit_tuple, ui_out_emit_list): New typedefs. * python/py-framefilter.c (py_print_single_arg): Use gdb::optional and ui_out_emit_tuple. (enumerate_locals): Likewise. (py_mi_print_variables, py_print_locals, py_print_args): Use ui_out_emit_list. (py_print_frame): Use gdb::optional, ui_out_emit_tuple, ui_out_emit_list. * common/gdb_optional.h: New file.
This commit is contained in:
parent
f67f945cf2
commit
d4b0bb186e
4 changed files with 186 additions and 156 deletions
33
gdb/ui-out.h
33
gdb/ui-out.h
|
@ -187,4 +187,37 @@ class ui_out
|
|||
ui_out_level *current_level () const;
|
||||
};
|
||||
|
||||
/* This is similar to make_cleanup_ui_out_tuple_begin_end and
|
||||
make_cleanup_ui_out_list_begin_end, but written as an RAII template
|
||||
class. It takes the ui_out_type as a template parameter. Normally
|
||||
this is used via the typedefs ui_out_emit_tuple and
|
||||
ui_out_emit_list. */
|
||||
template<ui_out_type Type>
|
||||
class ui_out_emit_type
|
||||
{
|
||||
public:
|
||||
|
||||
ui_out_emit_type (struct ui_out *uiout, const char *id)
|
||||
: m_uiout (uiout)
|
||||
{
|
||||
uiout->begin (Type, id);
|
||||
}
|
||||
|
||||
~ui_out_emit_type ()
|
||||
{
|
||||
m_uiout->end (Type);
|
||||
}
|
||||
|
||||
ui_out_emit_type (const ui_out_emit_type<Type> &) = delete;
|
||||
ui_out_emit_type<Type> &operator= (const ui_out_emit_type<Type> &)
|
||||
= delete;
|
||||
|
||||
private:
|
||||
|
||||
struct ui_out *m_uiout;
|
||||
};
|
||||
|
||||
typedef ui_out_emit_type<ui_out_type_tuple> ui_out_emit_tuple;
|
||||
typedef ui_out_emit_type<ui_out_type_list> ui_out_emit_list;
|
||||
|
||||
#endif /* UI_OUT_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue