27#include "gdbsupport/format.h"
29#include "diagnostics.h"
43 explicit ui_out_hdr (
int number,
int min_width,
ui_align alignment,
44 const std::string &
name,
const std::string &header)
46 m_min_width (min_width),
47 m_alignment (alignment),
58 int min_width ()
const
68 const std::string &header ()
const
73 const std::string &
name ()
const
170 const std::string &col_name,
const std::string &col_hdr);
178 const char **col_hdr);
180 bool query_field (
int colno,
int *width,
int *alignment,
181 const char **col_name)
const;
215 internal_error (_(
"extra table_body call not allowed; there must be only "
216 "one table_body after a table_begin and before a "
222 internal_error (_(
"number of headers differ from number of table "
232 const std::string &col_name,
233 const std::string &col_hdr)
236 internal_error (_(
"table header must be specified after table_begin and "
237 "before table_body."));
239 auto header = gdb::make_unique<ui_out_hdr> (
m_headers.size () + 1,
243 m_headers.push_back (std::move (header));
256 const char **col_hdr)
264 *colno = hdr->number ();
265 *width = hdr->min_width ();
266 *alignment = hdr->alignment ();
267 *col_hdr = hdr->header ().c_str ();
278 const char **col_name)
const
281 int index = colno - 1;
283 if (index >= 0 && index <
m_headers.size ())
285 ui_out_hdr *hdr =
m_headers[index].get ();
287 gdb_assert (colno == hdr->number ());
289 *width = hdr->min_width ();
290 *alignment = hdr->alignment ();
291 *col_name = hdr->name ().c_str ();
331 auto level = gdb::make_unique<ui_out_level> (
type);
354 internal_error (_(
"tables cannot be nested; table_begin found before \
355previous table_end."));
364 const std::string &col_name,
const std::string &col_hdr)
367 internal_error (_(
"table_header outside a table is not valid; it must be \
368after a table_begin and before a table_body."));
370 m_table_up->append_header (width, alignment, col_name, col_hdr);
379 internal_error (_(
"table_body outside a table is not valid; it must be "
380 "after a table_begin and before a table_end."));
391 internal_error (_(
"misplaced table_end or missing table_begin."));
450 const char *fldname, LONGEST
value)
489 if (!stream.
empty ())
534 va_start (args, format);
543 const char *format, ...)
552 va_start (args, format);
554 do_field_fmt (fldno, width, align, fldname, style, format, args);
577 va_start (args, format);
583 DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
594 format_pieces fpieces (&format,
true);
598 for (
auto &&piece : fpieces)
600 const char *current_substring = piece.string;
602 gdb_assert (piece.n_int_args >= 0 && piece.n_int_args <= 2);
603 int intvals[2] = { 0, 0 };
604 for (
int i = 0; i < piece.n_int_args; ++i)
605 intvals[i] = va_arg (args,
int);
608 gdb_assert (piece.n_int_args == 0
609 || piece.argclass == string_arg
610 || piece.argclass == int_arg
611 || piece.argclass == long_arg);
613 switch (piece.argclass)
617 const char *str = va_arg (args,
const char *);
618 switch (piece.n_int_args)
628 intvals[0], intvals[1], str);
633 case wide_string_arg:
634 gdb_assert_not_reached (
"wide_string_arg not supported in vmessage");
637 gdb_assert_not_reached (
"wide_char_arg not supported in vmessage");
644 int val = va_arg (args,
int);
645 switch (piece.n_int_args)
655 intvals[0], intvals[1], val);
662 long val = va_arg (args,
long);
663 switch (piece.n_int_args)
673 intvals[0], intvals[1], val);
680 size_t val = va_arg (args,
size_t);
681 switch (piece.n_int_args)
691 intvals[0], intvals[1], val);
699 case long_double_arg:
700 gdb_assert_not_reached (
"long_double_arg not supported in vmessage");
703 gdb_assert_not_reached (
"dec32float_arg not supported in vmessage");
706 gdb_assert_not_reached (
"dec64float_arg not supported in vmessage");
708 case dec128float_arg:
709 gdb_assert_not_reached (
"dec128float_arg not supported in vmessage");
712 switch (current_substring[2])
746 void *arg = va_arg (args,
void *);
747 gdb_assert (arg ==
nullptr);
768 internal_error (_(
"failed internal consistency check"));
777 va_start (args, format);
828 internal_error (_(
"table_body missing; table fields must be \
829specified after table_body and inside a list."));
840 internal_error (_(
"ui-out internal error in handling headers."));
854 const char **col_name)
859 return m_table_up->query_field (colno, width, alignment, col_name);
ui_file_style style() const
const char * c_str() const
ui_out_level(ui_out_type type)
ui_out_table(int entry_level, int nr_cols, const std::string &id)
bool query_field(int colno, int *width, int *alignment, const char **col_name) const
void append_header(int width, ui_align alignment, const std::string &col_name, const std::string &col_hdr)
bool get_next_header(int *colno, int *width, ui_align *alignment, const char **col_hdr)
state current_state() const
std::vector< std::unique_ptr< ui_out_hdr > >::const_iterator m_headers_iterator
std::vector< std::unique_ptr< ui_out_hdr > > m_headers
virtual void do_field_signed(int fldno, int width, ui_align align, const char *fldname, LONGEST value)=0
void field_fmt_signed(int width, ui_align align, const char *fldname, LONGEST value)
void verify_field(int *fldno, int *width, ui_align *align)
ui_out_flags test_flags(ui_out_flags mask)
virtual bool do_is_mi_like_p() const
virtual void virtual void do_wrap_hint(int indent)=0
void begin(ui_out_type type, const char *id)
virtual void do_field_string(int fldno, int width, ui_align align, const char *fldname, const char *string, const ui_file_style &style)=0
bool query_table_field(int colno, int *width, int *alignment, const char **col_name)
void void void spaces(int numspaces)
std::unique_ptr< ui_out_table > m_table_up
virtual void do_field_fmt(int fldno, int width, ui_align align, const char *fldname, const ui_file_style &style, const char *format, va_list args) ATTRIBUTE_PRINTF(7
ui_out(ui_out_flags flags=0)
virtual void virtual void do_spaces(int numspaces)=0
void table_begin(int nr_cols, int nr_rows, const std::string &tblid)
void field_core_addr(const char *fldname, struct gdbarch *gdbarch, CORE_ADDR address)
void field_string(const char *fldname, const char *string, const ui_file_style &style=ui_file_style())
virtual void do_begin(ui_out_type type, const char *id)=0
virtual void do_field_skip(int fldno, int width, ui_align align, const char *fldname)=0
void field_fmt(const char *fldname, const char *format,...) ATTRIBUTE_PRINTF(3
ui_out_level * current_level() const
virtual void do_flush()=0
void pop_level(ui_out_type type)
void field_signed(const char *fldname, LONGEST value)
std::vector< std::unique_ptr< ui_out_level > > m_levels
void call_do_message(const ui_file_style &style, const char *format,...)
virtual void do_text(const char *string)=0
void field_skip(const char *fldname)
void text(const char *string)
void field_stream(const char *fldname, string_file &stream, const ui_file_style &style=ui_file_style())
void push_level(ui_out_type type)
void table_header(int width, ui_align align, const std::string &col_name, const std::string &col_hdr)
bool is_mi_like_p() const
virtual void do_table_body()=0
virtual void do_message(const ui_file_style &style, const char *format, va_list args) ATTRIBUTE_PRINTF(3
virtual void do_table_header(int width, ui_align align, const std::string &col_name, const std::string &col_hdr)=0
void redirect(ui_file *outstream)
virtual void do_field_unsigned(int fldno, int width, ui_align align, const char *fldname, ULONGEST value)=0
virtual void do_table_begin(int nbrofcols, int nr_rows, const char *tblid)=0
void void void wrap_hint(int indent)
virtual void do_table_end()=0
void message(const char *format,...) ATTRIBUTE_PRINTF(2
void field_unsigned(const char *fldname, ULONGEST value)
virtual void do_end(ui_out_type type)=0
void void vmessage(const ui_file_style &in_style, const char *format, va_list args) ATTRIBUTE_PRINTF(3
void end(ui_out_type type)
virtual void do_redirect(struct ui_file *outstream)=0
cli_style_option address_style
mach_port_t kern_return_t mach_port_t mach_msg_type_name_t msgportsPoly mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
const char * print_core_address(struct gdbarch *gdbarch, CORE_ADDR address)