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>
* ui-out.c (struct ui_out_hdr): Replace with ...

View File

@ -90,13 +90,41 @@ class ui_out_hdr
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. */
enum ui_out_type type;
};
}
ui_out_type type () const
{
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
@ -153,7 +181,7 @@ struct ui_out
};
/* The current (inner most) level. */
static struct ui_out_level *
static ui_out_level *
current_level (struct ui_out *uiout)
{
return uiout->levels[uiout->level].get ();
@ -164,13 +192,10 @@ static int
push_level (struct ui_out *uiout,
enum ui_out_type type)
{
std::unique_ptr<ui_out_level> current (new ui_out_level ());
current->field_count = 0;
current->type = type;
std::unique_ptr<ui_out_level> level (new ui_out_level (type));
uiout->levels.push_back (std::move (level));
uiout->level++;
uiout->levels.push_back (std::move (current));
return uiout->level;
}
@ -183,7 +208,7 @@ pop_level (struct ui_out *uiout,
{
/* We had better not underflow the buffer. */
gdb_assert (uiout->level > 0);
gdb_assert (current_level (uiout)->type == type);
gdb_assert (current_level (uiout)->type () == type);
uiout->levels.pop_back ();
uiout->level--;
@ -798,7 +823,7 @@ static void
verify_field (struct ui_out *uiout, int *fldno, int *width,
enum ui_align *align)
{
struct ui_out_level *current = current_level (uiout);
ui_out_level *current = current_level (uiout);
const char *text;
if (uiout->table.flag)
@ -814,13 +839,13 @@ specified after table_body and inside a list."));
level is zero. */
}
current->field_count += 1;
current->inc_field_count ();
if (uiout->table.body_flag
&& uiout->table.entry_level == uiout->level
&& get_next_header (uiout, fldno, width, align, &text))
{
if (*fldno != current->field_count)
if (*fldno != current->field_count ())
internal_error (__FILE__, __LINE__,
_("ui-out internal error in handling headers."));
}
@ -828,7 +853,7 @@ specified after table_body and inside a list."));
{
*width = 0;
*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)
{
struct ui_out *uiout = new ui_out ();
std::unique_ptr<ui_out_level> current (new ui_out_level ());
uiout->data = data;
uiout->impl = impl;
@ -885,9 +909,8 @@ ui_out_new (const struct ui_out_impl *impl, void *data,
uiout->level = 0;
/* Create uiout->level 0, the default level. */
current->type = ui_out_type_tuple;
current->field_count = 0;
uiout->levels.push_back (std::move (current));
std::unique_ptr<ui_out_level> level (new ui_out_level (ui_out_type_tuple));
uiout->levels.push_back (std::move (level));
uiout->table.headers_iterator = uiout->table.headers.end ();