Class-ify ui_out_level

This patch changes struct ui_out_level to be a real C++ class.  No
behavioral changes.

gdb/ChangeLog:

	* ui-out.c (struct ui_out_level): Replace with ...
	(class ui_out_level): ... this.
	(current_level): Update.
	(push_level): Update.
	(pop_level): Update.
	(verify_field): Update.
	(ui_out_new): Update.
This commit is contained in:
Simon Marchi 2016-12-01 16:04:43 -05:00 committed by Simon Marchi
parent 37e20dd659
commit 909c0aa582
2 changed files with 54 additions and 21 deletions

View File

@ -1,3 +1,13 @@
2016-12-01 Simon Marchi <simon.marchi@polymtl.ca>
* ui-out.c (struct ui_out_level): Replace with ...
(class ui_out_level): ... this.
(current_level): Update.
(push_level): Update.
(pop_level): Update.
(verify_field): Update.
(ui_out_new): Update.
2016-12-01 Simon Marchi <simon.marchi@polymtl.ca> 2016-12-01 Simon Marchi <simon.marchi@polymtl.ca>
* ui-out.c (struct ui_out_hdr): Replace with ... * ui-out.c (struct ui_out_hdr): Replace with ...

View File

@ -90,13 +90,41 @@ class ui_out_hdr
std::string m_header; std::string m_header;
}; };
struct ui_out_level /* A level of nesting (either a list or a tuple) in a ui_out output. */
class ui_out_level
{
public:
explicit ui_out_level (ui_out_type type)
: m_type (type),
m_field_count (0)
{ {
/* Count each field; the first element is for non-list fields. */ }
int field_count;
/* The type of this level. */ ui_out_type type () const
enum ui_out_type type; {
}; return m_type;
}
int field_count () const
{
return m_field_count;
}
void inc_field_count ()
{
m_field_count++;
}
private:
/* The type of this level. */
ui_out_type m_type;
/* Count each field; the first element is for non-list fields. */
int m_field_count;
};
/* Tables are special. Maintain a separate structure that tracks /* Tables are special. Maintain a separate structure that tracks
@ -153,7 +181,7 @@ struct ui_out
}; };
/* The current (inner most) level. */ /* The current (inner most) level. */
static struct ui_out_level * static ui_out_level *
current_level (struct ui_out *uiout) current_level (struct ui_out *uiout)
{ {
return uiout->levels[uiout->level].get (); return uiout->levels[uiout->level].get ();
@ -164,13 +192,10 @@ static int
push_level (struct ui_out *uiout, push_level (struct ui_out *uiout,
enum ui_out_type type) enum ui_out_type type)
{ {
std::unique_ptr<ui_out_level> current (new ui_out_level ()); std::unique_ptr<ui_out_level> level (new ui_out_level (type));
current->field_count = 0;
current->type = type;
uiout->levels.push_back (std::move (level));
uiout->level++; uiout->level++;
uiout->levels.push_back (std::move (current));
return uiout->level; return uiout->level;
} }
@ -183,7 +208,7 @@ pop_level (struct ui_out *uiout,
{ {
/* We had better not underflow the buffer. */ /* We had better not underflow the buffer. */
gdb_assert (uiout->level > 0); gdb_assert (uiout->level > 0);
gdb_assert (current_level (uiout)->type == type); gdb_assert (current_level (uiout)->type () == type);
uiout->levels.pop_back (); uiout->levels.pop_back ();
uiout->level--; uiout->level--;
@ -798,7 +823,7 @@ static void
verify_field (struct ui_out *uiout, int *fldno, int *width, verify_field (struct ui_out *uiout, int *fldno, int *width,
enum ui_align *align) enum ui_align *align)
{ {
struct ui_out_level *current = current_level (uiout); ui_out_level *current = current_level (uiout);
const char *text; const char *text;
if (uiout->table.flag) if (uiout->table.flag)
@ -814,13 +839,13 @@ specified after table_body and inside a list."));
level is zero. */ level is zero. */
} }
current->field_count += 1; current->inc_field_count ();
if (uiout->table.body_flag if (uiout->table.body_flag
&& uiout->table.entry_level == uiout->level && uiout->table.entry_level == uiout->level
&& get_next_header (uiout, fldno, width, align, &text)) && get_next_header (uiout, fldno, width, align, &text))
{ {
if (*fldno != current->field_count) if (*fldno != current->field_count ())
internal_error (__FILE__, __LINE__, internal_error (__FILE__, __LINE__,
_("ui-out internal error in handling headers.")); _("ui-out internal error in handling headers."));
} }
@ -828,7 +853,7 @@ specified after table_body and inside a list."));
{ {
*width = 0; *width = 0;
*align = ui_noalign; *align = ui_noalign;
*fldno = current->field_count; *fldno = current->field_count ();
} }
} }
@ -875,7 +900,6 @@ ui_out_new (const struct ui_out_impl *impl, void *data,
int flags) int flags)
{ {
struct ui_out *uiout = new ui_out (); struct ui_out *uiout = new ui_out ();
std::unique_ptr<ui_out_level> current (new ui_out_level ());
uiout->data = data; uiout->data = data;
uiout->impl = impl; uiout->impl = impl;
@ -885,9 +909,8 @@ ui_out_new (const struct ui_out_impl *impl, void *data,
uiout->level = 0; uiout->level = 0;
/* Create uiout->level 0, the default level. */ /* Create uiout->level 0, the default level. */
current->type = ui_out_type_tuple; std::unique_ptr<ui_out_level> level (new ui_out_level (ui_out_type_tuple));
current->field_count = 0; uiout->levels.push_back (std::move (level));
uiout->levels.push_back (std::move (current));
uiout->table.headers_iterator = uiout->table.headers.end (); uiout->table.headers_iterator = uiout->table.headers.end ();